一、概述
妹子工作时需要大量地查询火车车次至南京的信息,包括该车次到达站(南京站or南京南站)、到达时间、出发时间等,然后根据这些信息做下一步工作。
版本结束,趁着间歇期,帮她弄了个简易的批量查询工具,粉色的按钮是给她用的~哈哈哈! ("https://www.jb51.net/article/131059.htm">https://www.jb51.net/article/131059.htm
最终效果图:
二、实现
1.界面读取待查询车次
之前总结过使用tkinter实现GUI,详见之前的笔记:https://www.jb51.net/article/131059.htm
2.调用车次信息接口
题外话,之前是做的从界面读取待查询车次信息,然后构造成携程的查询url,取到数据后筛选信息;
但后续在取到页面数据后,decode时发现总抛解码异常,百度之,原因是页面源码中编码格式有多样,decode时需要加个错误跳过参数。。
但车次信息恰巧在跳过之列。。。
但是已经跟妹子说很快就能搞好(装b),于是就直接申请了某第三方平台的接口 QAQ
网上查了下,免费的接口基本都不提供服务了。于是用的某第三方平台的接口(某速数据),注册赠1000条,续费5元1W条(暂时没续=。=)
#调用车次信息接口,获取车次信息 def getTrainScheduleInfo(self,trainSchedule): trainBaseInfo = "" #拼接URL url = "http://api.xxxx.com/train/line" + 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实现火车车次信息查询功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]