注册了个账号,然后用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"] +'度')