python 获取指定城市【昨日天气+未来15天预报天气+空气质量+气象数据】

      下午正好有点时间就把之前想做的一个工作给结束掉,之前网上搜索数据的时候发现了一个在线的数据结果,提供了一下正好需要的数据,一般的气象类网站大多只能提供未来一周的预测数据,而这个网站则可以提供未来半月的预测数据,当然,免费的版本可能颗粒度没有那么的高,不过对于一般的应用需求来说已经是足够了的。

       因为整体的实现来说非常简单这里就不再累述了,直接帖出来实现的代码如下所示:

#!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

      在浏览器中回车后返回的结果如下所示:

{"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":"阴晴之间,谨防紫外线侵扰"}}}

       代码输出如下所示:

[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]

         有需要的话可以亲自动手实践一下,本质上就是【网络请求+数据解析】。

发布了521 篇原创文章 · 获赞 490 · 访问量 323万+

猜你喜欢

转载自blog.csdn.net/Together_CZ/article/details/102898853