# encoding=utf-8
from Tkinter import *
from ScrolledText import ScrolledText
import urllib2
import json
import ssl
import time
import threading
'''
根据chrome 开发者模式取得城市代码参数,此步骤的目的通过中文去定位到对应英文城市代码
'''
citylist = open('C:\Users\Think\Desktop\citylist.txt')
city = citylist.read() # 把文件内容赋值给city
citylist.close()
# 取出城市对应代码,进行分割得到所需
tmp_c = city.split('@')
city_d = {}
for i in tmp_c:
if not i:
continue # 因为第一位为空所以判断如果为空则继续循环,不为空继续
city_d[i.split('|')[1]] = i.split('|')[2]
# 城市对应城市代码生成的dic
# 对应的座位类型,这里是硬卧

city_s = city_d['北京']
city_a = city_d['天津']
seat = 'queryLeftNewDTO'
yw = 'yw_num'
'''
12306证书验证会影响访问,所以要关闭掉
'''
ssl._create_default_https_context = ssl._create_unverified_context # 关闭证书验证

#格式化字符串,把往返城市和时间写入并且访问
def getList():
s_time = '2017-04-20'
html = urllib2.urlopen(
"https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADULT" % (
s_time, city_s, city_a))
content = html.read()
text1 = json.loads(content) # json不是一个类型是一种表达方式
# print text1
return text1 # 转换成dic

#根据座位类型查询火车票余票
def train_name():
train_name = getList()
for i in train_name['data']: # 通过键值取到想要的信息,这里有个坑需要注意,这个字典里面又嵌套了一个字典以queryLeftNewDTO作为key,同时它也是一个value
x = 0
while i[seat][yw] == u'无': # 如果没票打印无票并且循环直到有票
x += 1
time1 = time.strftime('%Y-%m-%d %H:%M:%S')
text.insert(END, u'检测时间%s:\n' % time1)
text.insert(END, u'第%d次查询:\n' % x)
text.insert(END, u'无票\n')
time.sleep(2)
else:
print u'有票%s'%(i[seat][yw])
# print u'第%d次查询:'%x
# print u'无票'
if i[seat][yw]!=u'无':#如果有票就打印出对应车次时间等等
tmp = u'''车次:%s
出发时间:%s
到达时间:%s
历时:%s
硬卧:%s\n''' % (i['queryLeftNewDTO']['station_train_code'], i['queryLeftNewDTO']['start_time'],
i['queryLeftNewDTO']['arrive_time'], i['queryLeftNewDTO']['lishi'], i[seat][yw])
text.insert(END,tmp)#将数据插入GUI用于显示

# print trainlist

#采用多线程进行处理
def start():
t1 = threading.Thread(target=train_name)
t1.start()

#建立一个GUI界面
root = Tk()
root.title(u'查询火车余票')
root.state("zoomed")
root.geometry('300x500')
text = ScrolledText(root, font=('微软雅黑', 16))
text.pack()

button = Button(root, text=u'开始抢票', font=('微软雅黑', 16), command=start) # target目标函数名字切记不要()不然点击按钮就失效了
button.pack()
root.mainloop()

python打造12306余票实时监控的更多相关文章

  1. 性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控【转】

    概述 本文我们将介绍如何使用JMeter+InfluxDB+Grafana打造压测可视化实时监控. 引言 我们很多时候在使用JMeter做性能测试,我们很难及时察看压测过程中应用的性能状况,总是需要等 ...

  2. Java爬取12306余票

    一.前言 今年国庆和中秋一起放,虽然很欢快,但是没有票了!!! 于是自己倒腾了一个查询余票的小程序. 二.准备工作 1.先打开12306的页面 2.然后右键检查,点network 3.再点一下1230 ...

  3. 【数量技术宅 | Python爬虫系列分享】实时监控股市重大公告的Python爬虫

    实时监控股市重大公告的Python爬虫小技巧 精力有限的我们,如何更加有效率地监控信息? 很多时候特别是交易时,我们需要想办法监控一些信息,比如股市的公告.如果现有的软件没有办法实现我们的需求,那么就 ...

  4. python写12306抢票

    #!/usr/bin/env python # -*- coding: utf-8 -*- ''' 利用splinter写的一个手动过验证及自动抢票的例子, 大家可以自己扩展或者弄错窗体.web端. ...

  5. Python操作12306抢票脚本

    有一段时间没有使用Python了,前几天经朋友提起一篇关于用Python实现抢火车票的文章,百度了实现抢火车票的技术细节,网上却有不少资料,也不是新鲜的东西.在了解了一些技术手段,阅读了一些大神的博文 ...

  6. php 通过API接口连接12306余票查询

    <?php header("content-type:text/html;charset='utf-8'"); //设置编码 echo "<meta cont ...

  7. 用webpy实现12306余票查询

    效果

  8. python subprocess.Popen 控制台输出 实时监控百度网ping值

    import subprocess file_out = subprocess.Popen('ping www.baidu.com', shell=True, stdout=subprocess.PI ...

  9. 性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控(centos7环境)

    前提条件,已经安装jmeter并可以运行 1.安装influxdata wget et https://dl.influxdata.com/influxdb/releases/influxdb-1.7 ...

随机推荐

  1. c# IE浏览器清除缓存没用

    再想买更新JS和css文件之后, 使用 internet 里面的删除选项 发现样式和事件还是没用变 最终发现 需要 按 f12 找到这个清缓存才正常解决问题

  2. abp 指定方法不生成api

    方法上面添加RemoteServiceAttribute特性

  3. EOJ3650 转机折扣(26进制,字符串)

    题面 看成26进制,把较小的那个字符串加1 strcmp(s1,s2)s1和s2有大小时,不一定都是返回1或者-1.....这个地方wa了好几次没有发现 #include<bits/stdc++ ...

  4. 英特尔® 实感™ 深度摄像头代码示例 – R200 摄像头数据流

    英特尔开发人员专区原文地址 简介 该可下载代码示例展示了如何使用面向 Windows 的英特尔® 实感™ SDK* 捕捉和查看用 C#/XAML 编写的原始 R200 摄像头数据流. Visual S ...

  5. Phaser3 屏幕适配iPhoneX、iPhoneXs的坑 -- JavaScript Html5 游戏开发

      PhaserJS 坑:在config内不要把 width 设为 window.innnerWidth在config内不要把 width 设为 window.innnerWidth在config内不 ...

  6. 使用performance进行前端性能监控

    该文章仅作为自己的总结 1.performance.timing对象 navigationStart:当前浏览器窗口的前一个网页关闭,发生unload事件时的Unix毫秒时间戳.如果没有前一个网页,则 ...

  7. python程序设计——面向对象程序设计:方法

    类中定义的方法分为四类:公有方法,私有方法,静态方法,类方法 公有方法.私有方法都属于对象,私有方法的名字以"__"开始 每个对象都有自己的公有方法和私有方法,这两类方法可以访问属 ...

  8. 基于 Agent 的模型入门:Python 实现隔离仿真

    2005 年诺贝尔经济学奖得主托马斯·谢林(Thomas Schelling)在上世纪 70 年代就纽约的人种居住分布得出了著名的 Schelling segregation model,这是一个 A ...

  9. nginx原声方法按照每天日志切割保存

    首先配置日志变量,然后配置日志 在/etc/nginx/conf.d/default.conf 配置变量 server{ if ($time_iso8601 ~ "^(\d{4})-(\d{ ...

  10. FivePlus——团队展示

    光耀101  <光耀101>是福州大学数计学院计算机专业推出的中国首部程序猿脱发养成节目.由张栋担任发起人,刘晨瑶.畅畅担任导师.  该节目召集了你猜多少位选手,通过任务.训练.考核,让选 ...