极速数据查询天气的接口

注册了个账号,然后用python接口调用,如下是官方给出的python2的接口调用方式:

#!/usr/bin/python
# encoding:utf-8
 
import urllib2, json, urllib
 
 
#  1、天气预报查询
 
 
data = {}
data["appkey"] = "your_appkey_here"
data["city"] = "杭州"
data["cityid"] = "111"#任选
data["citycode"] ="101260301"#任选
 
url_values = urllib.urlencode(data)
url = "http://api.jisuapi.com/weather/query" + "?" + url_values
result = urllib2.urlopen(url)
jsonarr = json.loads(result.read())
 
if jsonarr["status"] != u"0":
    print jsonarr["msg"]
    exit()
result = jsonarr["result"]
print result["city"],result["cityid"],result["citycode"],result["date"],result["week"],result["weather"],result["temp"]
print result["temphigh"],result["templow"],result["img"],result["humidity"],result["pressure"],result["windspeed"],result["winddirect"]
print result["windpower"],result["updatetime"]
print "指数:"
for i in result["index"]:
    if i.has_key("ivalue"):
        print i["iname"],i["ivalue"],i["detail"]
    else:
        print i["iname"],i["index"],i["detail"]
 
print "空气质量指数:"
aqi = result["aqi"]
print aqi["so2"],aqi["so224"],aqi["no2"],aqi["no224"],aqi["co"]
print aqi["co24"],aqi["o3"],aqi["o38"],aqi["o324"],aqi["pm10"]
print aqi["pm1024"],aqi["pm2_5"],aqi["pm2_524"],aqi["iso2"],aqi["ino2"]
print aqi["ico"],aqi["io3"],aqi["io38"],aqi["ipm10"],aqi["ipm2_5"]
print aqi["aqi"],aqi["primarypollutant"],aqi["quality"],aqi["timepoint"]
print aqi["aqiinfo"]["level"],aqi["aqiinfo"]["color"],aqi["aqiinfo"]["affect"],aqi["aqiinfo"]["measure"]
 
print "未来几天天气:"
for daily in result["daily"]:
    print daily["date"],daily["week"],daily["sunrise"],daily["sunset"]
    print daily["night"]["weather"],daily["night"]["templow"],daily["night"]["img"],daily["night"]["winddirect"],daily["night"]["windpower"]
    print daily["day"]["weather"],daily["day"]["img"],daily["day"]["winddirect"],daily["day"]["windpower"]
 
print "未来几小时天气:"
for hourly in result["hourly"]:
    print hourly["time"],hourly["weather"],hourly["temp"],hourly["img"]

返回的数据是json格式:如下所示:

{
    "status": "0",
    "msg": "ok",
    "result": {
        "city": "安顺",
        "cityid": "111",
        "citycode": "101260301",
        "date": "2015-12-22",
        "week": "星期二",
        "weather": "多云",
        "temp": "16",
        "temphigh": "18",
        "templow": "9",
        "img": "1",
        "humidity": "55",
        "pressure": "879",
        "windspeed": "14.0",
        "winddirect": "南风",
        "windpower": "2级",
        "updatetime": "2015-12-22 15:37:03",
        "index": [
            {
                "iname": "空调指数",
                "ivalue": "较少开启",
                "detail": "您将感到很舒适,一般不需要开启空调。"
            },
            {
                "iname": "运动指数",
                "ivalue": "较适宜",
                "detail": "天气较好,无雨水困扰,较适宜进行各种运动,但因气温较低,在户外运动请注意增减衣物。"
            }
        ],
        "aqi": {
            "so2": "37",
            "so224": "43",
            "no2": "24",
            "no224": "21",
            "co": "0.647",
            "co24": "0.675",
            "o3": "26",
            "o38": "14",
            "o324": "30",
            "pm10": "30",
            "pm1024": "35",
            "pm2_5": "23",
            "pm2_524": "24",
            "iso2": "13",
            "ino2": "13",
            "ico": "7",
            "io3": "9",
            "io38": "7",
            "ipm10": "35",
            "ipm2_5": "35",
            "aqi": "35",
            "primarypollutant": "PM10",
            "quality": "",
            "timepoint": "2015-12-09 16:00:00",
            "aqiinfo": {
                "level": "一级",
                "color": "#00e400",
                "affect": "空气质量令人满意,基本无空气污染",
                "measure": "各类人群可正常活动"
            }
        },
        "daily": [
            {
                "date": "2015-12-22",
                "week": "星期二",
                "sunrise": "07:39",
                "sunset": "18:09",
                "night": {
                    "weather": "多云",
                    "templow": "9",
                    "img": "1",
                    "winddirect": "无持续风向",
                    "windpower": "微风"
                },
                "day": {
                    "weather": "多云",
                    "temphigh": "18",
                    "img": "1",
                    "winddirect": "无持续风向",
                    "windpower": "微风"
                }
            }
        ],
        "hourly": [
            {
                "time": "16:00",
                "weather": "多云",
                "temp": "14",
                "img": "1"
            },
            {
                "time": "17:00",
                "weather": "多云",
                "temp": "13",
                "img": "1"
            }
        ]
    }
}

我自己机器是python3.6,所以需要把他的代码进行更改:

程序中的

#url_values = urllib.urlencode(data)
url_values = urllib.parse.urlencode(data)

python3用requests就可以了,不必用urllib2,因为后者是python2用的。所以

导入的包改为:

import json
import urllib
import requests

但是发现程序在

url_values = urllib.parse.urlencode(data)报错了,说是没有parse模块好像。然后我又把

import urllib

改为:

import urllib.parse

这样就错误就解决了(奇怪的是后来我又改成import urllib,但是却不报错了,奇怪~)。

  程序还有另外两处改动,改动如下:

#result = urllib2.urlopen(url)
result = requests.get(url).text
#jsonarr = json.loads(result.read())
jsonarr = json.loads(result)

  最后可以正确跑通调用的程序如下:

#!/usr/bin/python
# encoding:utf-8
 
#import urllib2, json, urllib
import json
import urllib
import requests
 
 
#  1、天气预报查询

data = {}
data["appkey"] = "你自己注册的"
data["city"] = "杭州"

#url_values = urllib.urlencode(data)
url_values = urllib.parse.urlencode(data)
url = "http://api.jisuapi.com/weather/query" + "?" + url_values
#result = urllib2.urlopen(url)
result = requests.get(url).text
#jsonarr = json.loads(result.read())
jsonarr = json.loads(result)
 
if jsonarr["status"] != u"0":
    print (jsonarr["msg"])
    exit()
result = jsonarr["result"]

print ("天气情况:")
#print('type(result["daily"])',type(result["daily"]))
daily = result["daily"][0]
print('最高气温,最低气温:')
print(daily["day"]["temphigh"])
print(daily["night"]["templow"])


print (daily["date"],daily["week"])
print (daily["day"]["weather"],daily["day"]["winddirect"],daily["day"]["windpower"])
print (daily["night"]["weather"],daily["night"]["winddirect"],daily["day"]["windpower"])

print('今天'+','+result["city"] + ','+'白天天气' + daily["day"]["weather"]+ ',' +'风向'+ daily["day"]["winddirect"] 
+','+'夜间天气' + daily["day"]["weather"] +','+'风向'+ daily["day"]["winddirect"] +'.' + '最高气温' +daily["day"]["temphigh"] +'' +'最低气温'+ daily["night"]["templow"] +'')
原文地址:https://www.cnblogs.com/www-caiyin-com/p/8386358.html