--------blogs: 陈月白 http://www.cnblogs.com/chenyuebai --------
一、概述
妹子工作时需要大量地查询火车车次至南京的信息,包括该车次到达站(南京站or南京南站)、到达时间、出发时间等,然后根据这些信息做下一步工作。
版本结束,趁着间歇期,帮她弄了个简易的批量查询工具,粉色的按钮是给她用的~哈哈哈! (?*?*?)
大概80行代码,主要是:
界面读取待查询车次 - - - - 调用车次信息接口- - - - 解析返回数据 - - - - 组装结果 - - - - 封装到界面(tkinter)
python+tkinter实现界面,详见之前的学习笔记:http://www.cnblogs.com/chenyuebai/p/7150382.html
最终效果图:
二、实现
1.界面读取待查询车次
之前总结过使用tkinter实现GUI,详见之前的笔记:http://www.cnblogs.com/chenyuebai/p/7150382.html
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"},{"sequence