使用Python獲取各個城市當前的天氣情況
阿新 • • 發佈:2018-04-04
Python 天氣 tkinter 這次的這個項目,弄了好幾天,主要在tkinter上做GUI界面上一直卡住,在網上資料又不多,最後直接放棄稍微復雜的東西,直接做個簡單點的界面。
程序功能:
1、可以查詢不同城市的天氣情況和顯示時間,每60秒刷新次天氣情況,如圖:
2、可以自由選擇城市,選擇之後立刻獲取該城市的天氣情況
關鍵代碼
# _*_ coding: utf-8 _*_ import requests import time def weather_log(stu): #獲取實時天氣情況寫入到文本 cu_time=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) fp=open(‘weather.log‘,‘a‘) fp.write(‘{} {}‘.format(cu_time,stu)) fp.close() #把文本中城市與城市ID一一對應的關系存進dic字典中 f=open(‘cityid.txt‘,‘r‘) dic={} for line in f: v=line.strip().split(‘,‘) dic[v[1]]=v[0] f.close() def update_weather(city): #通過小米天氣API獲取天氣狀況 if city in dic: cityid=dic[city] temp=requests.get("http://weatherapi.market.xiaomi.com/wtr-v2/temp/realtime?cityId="+cityid) temp.encoding=‘utf-8‘ tem=temp.json()[‘weatherinfo‘][‘temp‘] SD=temp.json()[‘weatherinfo‘][‘SD‘] w=temp.json()[‘weatherinfo‘][‘WD‘]+temp.json()[‘weatherinfo‘][‘WS‘] weather=temp.json()[‘weatherinfo‘][‘weather‘] update_time=temp.json()[‘weatherinfo‘][‘time‘] stu=‘{0}此刻溫度:{1} {2} {3} 天氣更新時間:{4}\n‘.format(city,tem,weather,w,update_time) weather_log(stu) else : print("請確定城市是否正確") return (tem,SD,w,weather)
這些只是關鍵代碼,完整代碼和cityid文件可在下面的鏈接中下載。
cityid的文件格式如下圖:
關鍵程序很簡單,就是通過cityid這文件生成cityid與城市名對應的字典,再通過小米的天氣API去獲取該城市的天氣信息,請求的地址返回的是json格式的數據,所以直接用requests庫中的json的方法訪問即可,無需使用標準庫的json庫。
思考與總結
- 本次項目更多的坑是在tkinter的使用上,真是tkinter從入門到放棄。不過也了解tkinter的一些運行機制,了解tkinter的三種布局方式,pack(),place(),grid(),此次主演用到的是place()。
- 使用了Python的多線程,分別是用來控制窗口的主線程、控制時間的子線程和控制天氣更新的子線程。
- 學習使用了sleep.time()隔段時間來更新天氣情況。
- 不過此次小項目主要的思想還是面向過程的,代碼想到哪就寫到哪,沒有個合理的規劃。
- 對於面向對象的編程還是很不熟,接下來要往這方面去學習。
本次項目的源碼下載地址:http://down.51cto.com/data/2444907
使用Python獲取各個城市當前的天氣情況