欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 3.6 tkinter+urllib+json實現(xiàn)火車車次信息查詢功能

 更新時間:2017年12月20日 11:27:51   作者:陳月白  
這篇文章主要介紹了python 3.6 tkinter+urllib+json 火車車次信息查詢功能,本文以查詢火車車次至南京的信息為例,需要的朋友可以參考下

一、概述

妹子工作時需要大量地查詢火車車次至南京的信息,包括該車次到達(dá)站(南京站or南京南站)、到達(dá)時間、出發(fā)時間等,然后根據(jù)這些信息做下一步工作。

版本結(jié)束,趁著間歇期,幫她弄了個簡易的批量查詢工具,粉色的按鈕是給她用的~哈哈哈! (๑*◡*๑)

大概80行代碼,主要是:

界面讀取待查詢車次 - - - - 調(diào)用車次信息接口- - - - 解析返回數(shù)據(jù) - - - - 組裝結(jié)果 - - - - 封裝到界面(tkinter)

python+tkinter實現(xiàn)界面,詳見之前的學(xué)習(xí)筆記:http://www.dbjr.com.cn/article/131059.htm

最終效果圖:

二、實現(xiàn)

1.界面讀取待查詢車次

之前總結(jié)過使用tkinter實現(xiàn)GUI,詳見之前的筆記:http://www.dbjr.com.cn/article/131059.htm

2.調(diào)用車次信息接口

題外話,之前是做的從界面讀取待查詢車次信息,然后構(gòu)造成攜程的查詢url,取到數(shù)據(jù)后篩選信息;

但后續(xù)在取到頁面數(shù)據(jù)后,decode時發(fā)現(xiàn)總拋解碼異常,百度之,原因是頁面源碼中編碼格式有多樣,decode時需要加個錯誤跳過參數(shù)。。

但車次信息恰巧在跳過之列。。。

但是已經(jīng)跟妹子說很快就能搞好(裝b),于是就直接申請了某第三方平臺的接口 QAQ

網(wǎng)上查了下,免費(fèi)的接口基本都不提供服務(wù)了。于是用的某第三方平臺的接口(某速數(shù)據(jù)),注冊贈1000條,續(xù)費(fèi)5元1W條(暫時沒續(xù)=。=)

 #調(diào)用車次信息接口,獲取車次信息
 def getTrainScheduleInfo(self,trainSchedule):
  trainBaseInfo = ""
  #拼接URL
  url = "http://api.xxxx.com/train/line?appkey=xxxxxx&trainno=" + trainSchedule
  #print(url)
  #獲取數(shù)據(jù)
  try:
   trainBaseInfo = self.send_GET_request(url)  #發(fā)送GET請求,python3.X是用urllib.request庫,網(wǎng)上很多
  except:
   print("ERROR:FUNC getTrainScheduleInfo select_items_from_url failed.url = %s ,flag = %s"%(trainSchedule))
  return trainBaseInfo

3.解析返回數(shù)據(jù)

返回數(shù)據(jù)為json類型的字符串,直接json.loads后,解析即可

#獲取所有待查詢車次信息
  allTrainResultDic = {}  #車次查詢結(jié)果集合
  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":"濟(jì)南西","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
      #篩選出途經(jīng)南京、南京南
      for trainInfo in listNodeValue:
       if (cityName1 in trainInfo.values()) or (cityName2 in trainInfo.values()):
        #解析數(shù)據(jù)
        arrivedStation = trainInfo["station"]   #到達(dá)站
        arrivedTime = trainInfo["arrivaltime"]  #到站時間
        leaveTime = trainInfo["departuretime"]  #離站時間
        if arrivedStation == "南京":
         arrivedStation = "南京站"  
        # 存儲該車次查詢結(jié)果
        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 檢查返回數(shù)據(jù)狀態(tài)碼不為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.組裝結(jié)果、界面輸出      

 #組裝結(jié)果界面輸出
  self.result_data_Text.delete(1.0, END)
  head = "車次 南京到達(dá)站 到站時間 離站時間  類型"
  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:獲取火車至南京信息完成")

總結(jié)

以上所述是小編給大家介紹的python 3.6 tkinter+urllib+json實現(xiàn)火車車次信息查詢功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Python爬蟲DOTA排行榜爬取實例(分享)

    Python爬蟲DOTA排行榜爬取實例(分享)

    下面小編就為大家?guī)硪黄狿ython爬蟲DOTA排行榜爬取實例(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Python的Tornado框架異步編程入門實例

    Python的Tornado框架異步編程入門實例

    這篇文章主要介紹了Python的Tornado框架異步編程入門實例,異步編程的思維與普通編程比起來有些不同,需要的朋友可以參考下
    2015-04-04
  • pandas groupby + unstack的使用說明

    pandas groupby + unstack的使用說明

    這篇文章主要介紹了pandas groupby + unstack的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python圖像處理之使用OpenCV檢測對象顏色

    Python圖像處理之使用OpenCV檢測對象顏色

    OpenCV顏色檢測只是一個起點,最終目標(biāo)是最終使用Python?3代碼在視頻流幀中定位彩色元素位置,下面這篇文章主要給大家介紹了關(guān)于Python圖像處理之使用OpenCV檢測對象顏色的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Flask-WTF表單的使用方法

    Flask-WTF表單的使用方法

    這篇文章主要介紹了Flask-WTF表單的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python issubclass和isinstance函數(shù)的具體使用

    Python issubclass和isinstance函數(shù)的具體使用

    本文主要介紹了Python issubclass和isinstance函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • PyTorch 中的傅里葉卷積實現(xiàn)示例

    PyTorch 中的傅里葉卷積實現(xiàn)示例

    這篇文章主要介紹了PyTorch 中的傅里葉卷積實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • django最快程序開發(fā)流程詳解

    django最快程序開發(fā)流程詳解

    這篇文章主要介紹了django最快程序開發(fā)流程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Pycharm5個非常有用的方法技巧

    Pycharm5個非常有用的方法技巧

    這篇文章主要介紹了Pycharm5個非常有用的方法技巧,PyCharm?是一款非常強(qiáng)大的編寫?python?代碼的工具。掌握一些小技巧能成倍的提升寫代碼的效率,本篇介紹幾個經(jīng)常使用的小技巧,需要的小伙伴可以參考一下
    2022-07-07
  • Python+Selenium自動化實現(xiàn)分頁(pagination)處理

    Python+Selenium自動化實現(xiàn)分頁(pagination)處理

    這篇文章主要為大家詳細(xì)介紹了Python+Selenium自動化實現(xiàn)分頁pagination處理的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評論