python 獲取指定城市「昨日天氣+未來15天預報+AQI+氣象數據」

本文首發地址:
https://yishuihancheng.blog.csdn.net/article/details/102898853


python 獲取指定城市「昨日天氣+未來15天預報+AQI+氣象數據」



下午正好有點時間就把之前想做的一個工作給結束掉,之前網上搜索數據的時候發現了一個在線的數據結果,提供了一下正好需要的數據,一般的氣象類網站大多隻能提供未來一週的預測數據,而這個網站則可以提供未來半月的預測數據,當然,免費的版本可能顆粒度沒有那麼的高,不過對於一般的應用需求來說已經是足夠了的。

因為整體的實現來說非常簡單這裡就不再累述了,直接帖出來實現的代碼如下所示:

#!usr/bin/env python
# encoding:utf-8
from __future__ import division
 
 
"""
__Author__:沂水寒城
功能: python 獲取指定城市【昨日天氣+未來15天預報天氣+空氣質量+氣象數據】
"""
 
 
import sys
import json
import requests
 
if sys.version_info == 2:
 reload(sys)
 sys.setdefaultencoding("utf-8")
 
 
pre_url = "http://t.weather.sojson.com/api/weather/city/"
 
 
def weather(city_code="101210101"):
 """
 藉助於在線接口獲取所需數據
 """
 url = pre_url + city_code
 data = requests.get(url).json()
 res_list = []
 if data["status"] == 200:
 cityInfo = data["cityInfo"]
 forest_data = data["data"]["forecast"]
 yesterday_data = data["data"]["yesterday"]
 forest_data.append(yesterday_data)
 key_list = [
 "date",
 "high",
 "low",
 "ymd",
 "week",
 "sunrise",
 "sunset",
 "aqi",
 "fx",
 "fl",
 "type",
 "notice",
 ]
 for one_day in forest_data:
 one_list = []
 for i in range(len(key_list)):
 try:
 one_list.append(one_day[key_list[i]])
 except:
 one_list.append("NULL")
 res_list.append(one_list)
 res_list = sorted(res_list, key=lambda e: e[0])
 return res_list
 
 
if __name__ == "__main__":
 res_list = weather(city_code="101210101")
 for one in res_list:
 print(one)

以下述鏈接【北京市】為例:

http://t.weather.sojson.com/api/weather/city/101010100

在瀏覽器中回車後返回的結果如下所示:

python 獲取指定城市「昨日天氣+未來15天預報+AQI+氣象數據」

{"message":"success感謝又拍雲(upyun.com)提供CDN贊助","status":200,"date":"20191104","time":"2019-11-04 13:39:02","cityInfo":{"city":"北京市","citykey":"101010100","parent":"北京","updateTime":"12:54"},"data":{"shidu":"56%","pm25":44.0,"pm10":58.0,"quality":"良","wendu":"13","ganmao":"極少數敏感人群應減少戶外活動","forecast":[{"date":"04","high":"高溫 16℃","low":"低溫 5℃","ymd":"2019-11-04","week":"星期一","sunrise":"06:44","sunset":"17:10","aqi":70,"fx":"西南風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"05","high":"高溫 16℃","low":"低溫 5℃","ymd":"2019-11-05","week":"星期二","sunrise":"06:46","sunset":"17:09","aqi":90,"fx":"東北風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"06","high":"高溫 15℃","low":"低溫 3℃","ymd":"2019-11-06","week":"星期三","sunrise":"06:47","sunset":"17:08","aqi":110,"fx":"西南風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"07","high":"高溫 12℃","low":"低溫 2℃","ymd":"2019-11-07","week":"星期四","sunrise":"06:48","sunset":"17:07","aqi":70,"fx":"南風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"08","high":"高溫 16℃","low":"低溫 1℃","ymd":"2019-11-08","week":"星期五","sunrise":"06:49","sunset":"17:06","aqi":80,"fx":"西南風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"09","high":"高溫 13℃","low":"低溫 3℃","ymd":"2019-11-09","week":"星期六","sunrise":"06:50","sunset":"17:05","aqi":52,"fx":"北風","fl":"<3級","type":"陰","notice":"不要被陰雲遮擋住好心情"},{"date":"10","high":"高溫 17℃","low":"低溫 3℃","ymd":"2019-11-10","week":"星期日","sunrise":"06:51","sunset":"17:04","fx":"西北風","fl":"3-4級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"11","high":"高溫 15℃","low":"低溫 4℃","ymd":"2019-11-11","week":"星期一","sunrise":"06:53","sunset":"17:03","fx":"南風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"12","high":"高溫 16℃","low":"低溫 4℃","ymd":"2019-11-12","week":"星期二","sunrise":"06:54","sunset":"17:02","fx":"西風","fl":"4-5級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"13","high":"高溫 11℃","low":"低溫 -1℃","ymd":"2019-11-13","week":"星期三","sunrise":"06:55","sunset":"17:01","fx":"西北風","fl":"<3級","type":"陰","notice":"不要被陰雲遮擋住好心情"},{"date":"14","high":"高溫 3℃","low":"低溫 -3℃","ymd":"2019-11-14","week":"星期四","sunrise":"06:56","sunset":"17:00","fx":"西北風","fl":"5-6級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"15","high":"高溫 5℃","low":"低溫 -3℃","ymd":"2019-11-15","week":"星期五","sunrise":"06:57","sunset":"16:59","fx":"南風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"16","high":"高溫 6℃","low":"低溫 -2℃","ymd":"2019-11-16","week":"星期六","sunrise":"06:58","sunset":"16:59","fx":"南風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"17","high":"高溫 8℃","low":"低溫 0℃","ymd":"2019-11-17","week":"星期日","sunrise":"06:59","sunset":"16:58","fx":"南風","fl":"<3級","type":"晴","notice":"願你擁有比陽光明媚的心情"},{"date":"18","high":"高溫 8℃","low":"低溫 2℃","ymd":"2019-11-18","week":"星期一","sunrise":"07:01","sunset":"16:57","fx":"東風","fl":" 
<3級","type":"小雨","notice":"雨雖小,注意保暖別感冒"}],"yesterday":{"date":"03","high":"高溫 14℃","low":"低溫 4℃","ymd":"2019-11-03","week":"星期日","sunrise":"06:43","sunset":"17:11","aqi":54,"fx":"東北風","fl":"<3級","type":"多雲","notice":"陰晴之間,謹防紫外線侵擾"}}}


python 獲取指定城市「昨日天氣+未來15天預報+AQI+氣象數據」


代碼輸出如下所示:

[u'03', u'\u9ad8\u6e29 14\u2103', u'\u4f4e\u6e29 4\u2103', u'2019-11-03', u'\u661f\u671f\u65e5', u'06:43', u'17:11', 54, u'\u4e1c\u5317\u98ce', u'<3\u7ea7', u'\u591a\u4e91', u'\u9634\u6674\u4e4b\u95f4\uff0c\u8c28\u9632\u7d2b\u5916\u7ebf\u4fb5\u6270']
[u'04', u'\u9ad8\u6e29 16\u2103', u'\u4f4e\u6e29 5\u2103', u'2019-11-04', u'\u661f\u671f\u4e00', u'06:44', u'17:10', 70, u'\u897f\u5357\u98ce', u'<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5']
[u'05', u'\u9ad8\u6e29 16\u2103', u'\u4f4e\u6e29 5\u2103', u'2019-11-05', u'\u661f\u671f\u4e8c', u'06:46', u'17:09', 90, u'\u4e1c\u5317\u98ce', u'<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5']
[u'06', u'\u9ad8\u6e29 15\u2103', u'\u4f4e\u6e29 3\u2103', u'2019-11-06', u'\u661f\u671f\u4e09', u'06:47', u'17:08', 110, u'\u897f\u5357\u98ce', u'<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5']
[u'07', u'\u9ad8\u6e29 12\u2103', u'\u4f4e\u6e29 2\u2103', u'2019-11-07', u'\u661f\u671f\u56db', u'06:48', u'17:07', 70, u'\u5357\u98ce', u' 
<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'08', u'\u9ad8\u6e29 16\u2103', u'\u4f4e\u6e29 1\u2103', u'2019-11-08', u'\u661f\u671f\u4e94', u'06:49', u'17:06', 80, u'\u897f\u5357\u98ce', u'<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'09', u'\u9ad8\u6e29 13\u2103', u'\u4f4e\u6e29 3\u2103', u'2019-11-09', u'\u661f\u671f\u516d', u'06:50', u'17:05', 52, u'\u5317\u98ce', u'<3\u7ea7', u'\u9634', u'\u4e0d\u8981\u88ab\u9634\u4e91\u906e\u6321\u4f4f\u597d\u5fc3\u60c5'] [u'10', u'\u9ad8\u6e29 17\u2103', u'\u4f4e\u6e29 3\u2103', u'2019-11-10', u'\u661f\u671f\u65e5', u'06:51', u'17:04', 'NULL', u'\u897f\u5317\u98ce', u'3-4\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'11', u'\u9ad8\u6e29 15\u2103', u'\u4f4e\u6e29 4\u2103', u'2019-11-11', u'\u661f\u671f\u4e00', u'06:53', u'17:03', 'NULL', u'\u5357\u98ce', u'<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'12', u'\u9ad8\u6e29 16\u2103', u'\u4f4e\u6e29 4\u2103', u'2019-11-12', u'\u661f\u671f\u4e8c', u'06:54', u'17:02', 'NULL', u'\u897f\u98ce', u'4-5\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'13', u'\u9ad8\u6e29 11\u2103', u'\u4f4e\u6e29 -1\u2103', u'2019-11-13', u'\u661f\u671f\u4e09', u'06:55', u'17:01', 'NULL', u'\u897f\u5317\u98ce', u'<3\u7ea7', u'\u9634', u'\u4e0d\u8981\u88ab\u9634\u4e91\u906e\u6321\u4f4f\u597d\u5fc3\u60c5'] [u'14', u'\u9ad8\u6e29 3\u2103', u'\u4f4e\u6e29 -3\u2103', u'2019-11-14', u'\u661f\u671f\u56db', u'06:56', u'17:00', 'NULL', u'\u897f\u5317\u98ce', u'5-6\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'15', u'\u9ad8\u6e29 5\u2103', u'\u4f4e\u6e29 -3\u2103', u'2019-11-15', u'\u661f\u671f\u4e94', u'06:57', u'16:59', 'NULL', u'\u5357\u98ce', u'<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'16', u'\u9ad8\u6e29 6\u2103', u'\u4f4e\u6e29 -2\u2103', u'2019-11-16', u'\u661f\u671f\u516d', u'06:58', u'16:59', 'NULL', u'\u5357\u98ce', u'<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'17', u'\u9ad8\u6e29 8\u2103', u'\u4f4e\u6e29 0\u2103', u'2019-11-17', u'\u661f\u671f\u65e5', u'06:59', u'16:58', 'NULL', u'\u5357\u98ce', u'<3\u7ea7', u'\u6674', u'\u613f\u4f60\u62e5\u6709\u6bd4\u9633\u5149\u660e\u5a9a\u7684\u5fc3\u60c5'] [u'18', u'\u9ad8\u6e29 8\u2103', u'\u4f4e\u6e29 2\u2103', u'2019-11-18', u'\u661f\u671f\u4e00', u'07:01', u'16:57', 'NULL', u'\u4e1c\u98ce', u'<3\u7ea7', u'\u5c0f\u96e8', u'\u96e8\u867d\u5c0f\uff0c\u6ce8\u610f\u4fdd\u6696\u522b\u611f\u5192'] [Finished in 0.4s]

有需要的話可以親自動手實踐一下,本質上就是【網絡請求+數據解析】。


python 獲取指定城市「昨日天氣+未來15天預報+AQI+氣象數據」


分享到:


相關文章: