当前位置: 首页 > news >正文

python打造12306余票实时监控

# 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()

 

转载于:https://www.cnblogs.com/tom-gao/p/6674469.html

相关文章:

  • as3 socket连接方法类
  • Func和Action委托简单用法
  • APMServ错误解决办法:1、Apache启动失败,请检查相关配置
  • iptables配置详解
  • wordpress如何安装主题?
  • Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace 解决方法...
  • flex不能生成swf和html
  • java中各种date格式的转化
  • eclipse+maven搭建web工程之创建
  • 一类积性函数的前缀和---刷题记录
  • AS3教程:for each in解析效率
  • [4.9福建四校联考]
  • flex教程:一个虚线画法实例
  • git分支小问题
  • flex教程:flex4破解,以及序列号防止过期
  • 10个最佳ES6特性 ES7与ES8的特性
  • Angular2开发踩坑系列-生产环境编译
  • JavaWeb(学习笔记二)
  • js递归,无限分级树形折叠菜单
  • ReactNativeweexDeviceOne对比
  • WebSocket使用
  • WePY 在小程序性能调优上做出的探究
  • 基于webpack 的 vue 多页架构
  • 聊聊hikari连接池的leakDetectionThreshold
  • 排序(1):冒泡排序
  • 听说你叫Java(二)–Servlet请求
  • 写给高年级小学生看的《Bash 指南》
  • 以太坊客户端Geth命令参数详解
  • 1.Ext JS 建立web开发工程
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 大数据全解:定义、价值及挑战
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • !!java web学习笔记(一到五)
  • # centos7下FFmpeg环境部署记录
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (南京观海微电子)——I3C协议介绍
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET企业级应用架构设计系列之技术选型
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [Android] Android ActivityManager
  • [BZOJ 3282] Tree 【LCT】
  • [BZOJ] 2006: [NOI2010]超级钢琴
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [C\C++]读入优化【技巧】
  • [CakePHP] 在Controller中使用Helper
  • [cogs2652]秘术「天文密葬法」
  • [EULAR文摘] 利用蛋白组学技术开发一项蛋白评分用于预测TNFi疗效
  • [ICCV2017]Neural Person Search Machines
  • [NBIoT]NBIoT相关知识
  • [NOIP2005]过河