做了一個查詢天氣的小腳本,使用的是中華萬年曆的天氣API介面:url = r'http://wthrcdn.etouch.cn/weather_mini?citykey=101280101 首先是導入城市數據,根據輸入的城市名稱,查到city_code,這裡我從網上找了個城市代碼的文件。 用pick ...
做了一個查詢天氣的小腳本,使用的是中華萬年曆的天氣API介面:url = r'http://wthrcdn.etouch.cn/weather_mini?citykey=101280101
首先是導入城市數據,根據輸入的城市名稱,查到city_code,這裡我從網上找了個城市代碼的文件。
用pickle導入,然後找出對應的code。
1 # coding=utf-8 2 import requests 3 import json 4 import pickle 5 6 #獲取城市代碼 7 f = open('city_data.pkl', 'rb') 8 city_file = pickle.load(f) 9 f.close() 10 city_name = input('請輸入想要查詢的城市:') 11 city_code = city_file[city_name]
獲得city_code後,將code傳入url,使用requests.get得到數據。然後使用json.loads()解碼。
我也是今天剛剛接觸requests模塊,這裡給出requests的官方文檔
1 #利用城市名稱查詢天氣 2 url = r'http://wthrcdn.etouch.cn/weather_mini?citykey=%s' %city_code 3 jsonStr = requests.get(url).text 4 5 data = json.loads(jsonStr) 6 #print(data) 7 weather = data['data']
這樣就得到了天氣數據,data是這樣子的:
{'data': {'yesterday': {'date': '14日星期日', 'high': '高溫 20℃', 'fx': '無持續風向', 'low': '低溫 9℃', 'fl': '<![CDATA[<3級]]>', 'type': '多雲'}, 'city': '廣州', 'aqi': '91', 'forecast': [{'date': '15日星期一', 'high': '高溫 20℃', 'fengli': '<![CDATA[<3級]]>', 'low': '低溫 9℃', 'fengxiang': '無持續風向', 'type': '多雲'}, {'date': '16日星期二', 'high': '高溫 21℃', 'fengli': '<![CDATA[<3級]]>', 'low': '低溫 10℃', 'fengxiang': '無持續風向', 'type': '晴'}, {'date': '17日星期三', 'high': '高溫 22℃', 'fengli': '<![CDATA[<3級]]>', 'low': '低溫 11℃', 'fengxiang': '無持續風向', 'type': '晴'}, {'date': '18日星期四', 'high': '高溫 23℃', 'fengli': '<![CDATA[<3級]]>', 'low': '低溫 13℃', 'fengxiang': '無持續風向', 'type': '多雲'}, {'date': '19日星期五', 'high': '高溫 24℃', 'fengli': '<![CDATA[<3級]]>', 'low': '低溫 15℃', 'fengxiang': '無持續風向', 'type': '多雲'}], 'ganmao': '晝夜溫差較大,較易發生感冒,請適當增減衣服。體質較弱的朋友請註意防護。', 'wendu': '7'}, 'status': 1000, 'desc': 'OK'}
剩下來的就是將這個字典里的各項數據取出來列印了。
1 #列印各項數據 2 print('城市:',weather['city']) 3 print('當前溫度',weather['wendu'] + '℃') 4 print('提示',weather['ganmao']) 5 6 for x in weather['forecast']: 7 print(x['date'],x['type'],x['high'],x['low'],x['fengxiang'])
整個運行下,得到的結果就是:
完成。其實裡面還有一項數據我沒有列印出來,風力,因為在返回的data中是這個樣子的
'fengli': '<![CDATA[<3級]]>',他的Value值是'<![CDATA[<3級]]>'。。。這個我還沒想好要怎麼處理。。。
在完成了這個後,才又發現,原來這個介面可以改下,直接傳入城市名也是可以的。。。
url = r'http://wthrcdn.etouch.cn/weather_mini?city=city_name
這樣,也就不需要再去open城市數據,找到對應的城市代碼了。。。更簡單了。
但是,一些異常的處理我還沒有加入。如:當輸入的城市錯誤或者不存在的時候,要給用戶對應的提示。
但是作為初次嘗試使用requests模塊,當看到輸出結果時,還是蠻開心的。