python火车票查询工具tkinter_python 3.6 tkinter+urllib+json实现火车车次信息查询功能...
一、概述
妹子工作时需要大量地查询火车车次至南京的信息,包括该车次到达站(南京站or南京南站)、到达时间、出发时间等,然后根据这些信息做下一步工作。
版本结束,趁着间歇期,帮她弄了个简易的批量查询工具,粉色的按钮是给她用的~哈哈哈! (๑*◡*๑)
大概80行代码,主要是:
界面读取待查询车次 - - - - 调用车次信息接口- - - - 解析返回数据 - - - - 组装结果 - - - - 封装到界面(tkinter)
最终效果图:
二、实现
1.界面读取待查询车次
2.调用车次信息接口
题外话,之前是做的从界面读取待查询车次信息,然后构造成携程的查询url,取到数据后筛选信息;
但后续在取到页面数据后,decode时发现总抛解码异常,百度之,原因是页面源码中编码格式有多样,decode时需要加个错误跳过参数。。
但车次信息恰巧在跳过之列。。。
但是已经跟妹子说很快就能搞好(装b),于是就直接申请了某第三方平台的接口 QAQ
网上查了下,免费的接口基本都不提供服务了。于是用的某第三方平台的接口(某速数据),注册赠1000条,续费5元1W条(暂时没续=。=)
#调用车次信息接口,获取车次信息
def getTrainScheduleInfo(self,trainSchedule):
trainBaseInfo = ""
#拼接URL
url = "http://api.xxxx.com/train/line?appkey=xxxxxx&trainno=" + trainSchedule
#print(url)
#获取数据
try:
trainBaseInfo = self.send_GET_request(url) #发送GET请求,python3.X是用urllib.request库,网上很多
except:
print("ERROR:FUNC getTrainScheduleInfo select_items_from_url failed.url = %s ,flag = %s"%(trainSchedule))
return trainBaseInfo
3.解析返回数据
返回数据为json类型的字符串,直接json.loads后,解析即可
#获取所有待查询车次信息
allTrainResultDic = {} #车次查询结果集合
for trainSchedule in trainScheduleList:
trainBaseInfo = self.getTrainScheduleInfo(trainSchedule) #json string
# #----测试----
# trainBaseInfo = '''{"status":"0","msg":"ok","result":{"trainno":"G8","type":"高铁","list":[{"sequenceno":"1","station":"上海虹桥","day":"1","arrivaltime":"----","departuretime":"19:00","stoptime":"0","costtime":"0","distance":"0","isend":"0","pricesw":"","pricetd":"","pricegr1":"","pricegr2":"","pricerw1":"0","pricerw2":"0","priceyw1":"0","priceyw2":"0","priceyw3":"0","priceyd":"0.0","priceed":"0.0"},{"sequenceno":"2","station":"南京南","day":"1","arrivaltime":"20:00","departuretime":"20:02","stoptime":"2","costtime":"60","distance":"295","isend":"0","pricesw":"429.5","pricetd":"0","pricegr1":"0","pricegr2":"0","pricerw1":"0","pricerw2":"0","priceyw1":"0","priceyw2":"0","priceyw3":"0","priceyd":"229.5","priceed":"134.5"},{"sequenceno":"3","station":"济南西","day":"1","arrivaltime":"21:59","departuretime":"22:01","stoptime":"2","costtime":"179","distance":"0","isend":"0","pricesw":"1263.5","pricetd":"","pricegr1":"","pricegr2":"","pricerw1":"0","pricerw2":"0","priceyw1":"0","priceyw2":"0","priceyw3":"0","priceyd":"673.5","priceed":"398.5"},{"sequenceno":"4","station":"天津南","day":"1","arrivaltime":"22:59","departuretime":"23:01","stoptime":"2","costtime":"239","distance":"0","isend":"0","pricesw":"1603.5","pricetd":"","pricegr1":"","pricegr2":"","pricerw1":"0","pricerw2":"0","priceyw1":"0","priceyw2":"0","priceyw3":"0","priceyd":"853.5","priceed":"508.5"},{"sequenceno":"5","station":"北京南","day":"1","arrivaltime":"23:34","departuretime":"23:34","stoptime":"0","costtime":"274","distance":"0","isend":"1","pricesw":"1748","pricetd":"","pricegr1":"","pricegr2":"","pricerw1":"0","pricerw2":"0","priceyw1":"0","priceyw2":"0","priceyw3":"0","priceyd":"933.0","priceed":"553.0","costtimetxt":"4时34分"}]}}'''
# #----测试----
print("trainBaseInfo =",trainBaseInfo)
#解析
if trainBaseInfo:
try:
trainBaseInfo_loads = json.loads(trainBaseInfo)
if trainBaseInfo_loads["status"] == "0":
resultNodeValue = trainBaseInfo_loads["result"]
trainnoNodeValue = resultNodeValue["trainno"] #查询车次代码
typeNodeValue = resultNodeValue["type"] #车次类型
listNodeValue = resultNodeValue["list"] #途径站点信息集合 list
#筛选出途经南京、南京南
for trainInfo in listNodeValue:
if (cityName1 in trainInfo.values()) or (cityName2 in trainInfo.values()):
#解析数据
arrivedStation = trainInfo["station"] #到达站
arrivedTime = trainInfo["arrivaltime"] #到站时间
leaveTime = trainInfo["departuretime"] #离站时间
if arrivedStation == "南京":
arrivedStation = "南京站"
# 存储该车次查询结果
trainResult = []
trainResult.append(arrivedStation)
trainResult.append(arrivedTime)
trainResult.append(leaveTime)
trainResult.append(typeNodeValue)
allTrainResultDic[trainSchedule] = trainResult
else:
#self.write_log_to_Text("ERROR:车次: %s 无途径南京站信息,跳过" % trainSchedule)
continue
else:
self.write_log_to_Text("ERROR:车次: %s 检查返回数据状态码不为0,跳过" % trainSchedule)
continue
except:
self.write_log_to_Text("ERROR:车次:%s 返回的json串失败 "% trainSchedule)
else:
self.write_log_to_Text("ERROR:车次: %s 查询接口返回信息为空,已跳过"%trainSchedule)
continue
print(allTrainResultDic)
4.组装结果、界面输出
#组装结果界面输出
self.result_data_Text.delete(1.0, END)
head = "车次 南京到达站 到站时间 离站时间 类型"
self.result_data_Text.insert(1.0, head)
for train in allTrainResultDic.keys():
outMsg = "\n" + "-" * 52 + "\n" + "%4s"%train + "%9s"%allTrainResultDic[train][0] + "%13s"%allTrainResultDic[train][1] + "%12s"%allTrainResultDic[train][2] + "%8s"%allTrainResultDic[train][3]
self.result_data_Text.insert(END,outMsg)
self.write_log_to_Text("INFO:获取火车至南京信息完成")
总结
以上所述是小编给大家介绍的python 3.6 tkinter+urllib+json实现火车车次信息查询功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
python火车票查询工具tkinter_python 3.6 tkinter+urllib+json实现火车车次信息查询功能...相关推荐
- 12306火车车次票价查询api
12306订票接口-火车车次票价查询api代码文档及返回示例分享,可查询查询车次返回的车次信息查询票价,支持列次编号.出发站名称.到达站名称等查询. 接口名称:火车车次票价查询api 接口平台:聚合数 ...
- python火车票查询工具tkinter_Python 实现一个火车票查询的工具
原标题:Python 实现一个火车票查询的工具 主要功能: 输入出发车站,到达车站,时间,然后返回所有的车次信息,和余票信息 支持输入附加选项查询不同的火车的类型,比如高铁,动车. #查询上海到北京2 ...
- python 12306查询不到车次_python爬取12306火车车次信息
#-*- coding:utf-8 -*- importrequestsimportreimportjson#关闭https证书验证警告 requests.packages.urllib3.disab ...
- 安卓 spinner下拉框 做模糊查询_用图表控件做一个简单的员工信息查询系统
前几天在上课的时候有同学说在做人员的信息查询的时候,经常的要去做查找搜索很麻烦,能不能做一个简单的人员信息查询系统,只需要选择人员的编号就可以查询到这个员工的信息.其实要实现这个同学的需求在EXCEL ...
- python爬取12306_python爬取12306火车车次信息
#-*- coding:utf-8 -*- importrequestsimportreimportjson#关闭https证书验证警告 requests.packages.urllib3.disab ...
- excel制作录入和查询系统_叮咚!您有一份Excel人员信息查询系统,请您查收~
叮咚!您有一份Excel人员信息查询系统,请您查收~ 打开中-- 1 2 3 open! 哦豁,瞅着还不错哦~ 下面介绍如何制作一个简易的人员信息查询系统. 数据源准备 第一步当然是准备数据源,数据源 ...
- c语言招生信息查询系统,《C语言程序设计》课程设计报-招生信息查询系统.docx...
<C语言程序设计>课程设计报-招生信息查询系统 课程设计报告题目:招生信息查询系统课程名称:C语言程序设计专业班级:信息安全1302学号:姓名:指导教师:报告日期:2014年9月17日计算 ...
- 查询oracle表序列,Oracle查询表、视图、序列等信息查询
Oracle查询表.视图.序列等信息查询以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这几天做性能优化 网上找了些资料 ...
- python爬取微博热门消息(三)—— 爬取微博热门信息的功能函数
微博的热搜榜对于研究大众的流量有非常大的价值. 今天的教程就来说说如何爬取微博的热搜榜. 感兴趣的小伙伴可以 收藏 + 关注 哦! 另外,关于本项目的效果展示,以及教程,点击一下链接即可. pytho ...
最新文章
- 【 karle 专栏 】Android 初探底层知识系列
- 解决安装mysql的”A Windows service with the name MySQL already exists.“问题
- canal能监控多个mysql_learning-mysql-canal
- opencv第一课 打开一个图片
- 农发行:BI数据平台建设
- python中json模块博客园_Python中的Json模块详解
- MongoDB实战(7)索引与性能
- python partition by函数_python – 避免Spark窗口函数中单个分区模式的性能影响
- oracle windows server 2008,Node.js 在 Windows Server 2008 X64 连接Oracle 数据库
- 进入快速通道的委托(深入理解c#)
- Centos6.8 搭建Lvs+Keepalived
- 飞天茅台也可以在天猫上购买了,售价1499元!
- Unity API学习笔记(2)-GameObject的3种Message消息方法
- SQL注入环境搭建及多种注入类型测试实验
- why elmlang:最简最安全的full ola stack的终身webappdev语言选型
- 病毒+蠕虫+bot+rootkit
- Win10 安装 PySC2 环境 -- DeepMind联合战网开发的《星际争霸 II》强化学习环境
- 有什么发音真实自然有感情的配音软件吗?
- 设置MAC地址和动态IP
- 有什么变音视频软件?这些软件值得收藏