好久没有写了 最近在学python 树莓派暂时闲置了 这几天学python学到查天气这边 但是因为接口都失效了 我就自己用了api接口来替代繁琐的操作
一、申请API接口
API接口是什么我就不阐述了 具体自行百度
首先我们先到:聚合数据申请一个账号并且实名认证
-
接着我们找到我们的个人中心去申请一个新数据:如下图所示:
我们需要记住自己的APPKey 之后调用接口会用到
认证这个环节大家可以忽略 反正我也是瞎写
-
接着我们点击接口测试:
-
我们看到这个接口给我们提供了很多测试的方法 我们只用第一种 "获取城市名称或者ID"
可以在这上面看到我们所必须的参数是cityname 其他两个默认就可以了 需要七天数据的可以自己再抓
我们可以看到这里具体的请求方式
请求地址:http://v.juhe.cn/weather/index
请求参数:cityname=%E8%8B%8F%E5%B7%9E&dtype=&format=&key=AppKey
请求方式:GET
- 我们请求的地址是:http://v.juhe.cn/weather/index
- 请求的参数是:cityname=cityname&dtype=&format=&key=AppKey
- 我们把地址和参数用"?"拼接起来:http://v.juhe.cn/weather/index?cityname=cityname&dtype=&format=&key=AppKey
- 这样就是一个完整的url
- 我们去测试请求看一下
- 我们看到上图是一个类似字典的json格式数据 这样我们就好用python操作了 之前写的历史上今天是一个list'和dict组合的格式 所以这个天气还是挺好获得的
二、准备写抓取天气的代码
特地说明一下 我就是个菜鸟 今天上课的时候花了好久才写出来 因为很多还没有学过 我百度了好久才写出来的 而且遇到了不少的坑
-
首先说一下一些坑:
上面那张图官方给出的说明是必须要转换成url的编码格式(我就这么理解吧)
所以我们要把用户输入的文字转换成网页认识的文字:比如"苏州" 在网页中显示的就是:%E8%8B%8F%E5%B7%9E这样的格式 我们要做的就是把用户输入的汉字转换成这样的格式
完整代码:
#-*- coding=utf-8 -*-
import sys
import json
import urllib2
import urllib
appkey = '********'#你的key
cityname = raw_input('请输入城市名称:')#定义cityname
cityname = cityname.encode('utf-8')#把cityname用utf-8编码
cityname = cityname.decode('gb2312')#把cityname用gb2312解码
cityname = urllib.quote(cityname)#把cityname转成url编码
get_city_url = ('http://v.juhe.cn/weather/index?format=2&cityname=%s&key=%s' % (cityname,appkey))#接口地址
get_city_json = urllib2.urlopen(get_city_url).read()#读取接口信息
get_city_json_except = json.loads(get_city_json)#把json格式字符串转成字典
try:#异常处理 因为这个接口参数不能输入xx省 不然直接报错 所以直接提示用户输入地级市
get_main = get_city_json_except['result']['today']#访问result的today值 下面的温度什么都包括在today这里
get_temp = get_main['temperature']#获取温度
get_we = get_main['weather']#获取天气情况
get_wind = get_main['wind']#获取风向
message = [get_temp,get_we,get_wind]#把温度 天气情况 风向存在一个list中
for city_get in message:#遍历list中的每一项
print city_get#输出每一项
except:
print '请输入正确地级市'.decode('utf-8')
代码执行效果:
json返回的信息:
{
"resultcode":"200",
"reason":"查询成功",
"result":{
"sk":{
"temp":"24",
"wind_direction":"东南风",
"wind_strength":"1级",
"humidity":"78%",
"time":"17:38"
},
"today":{
"temperature":"23℃~28℃",
"weather":"阴转多云",
"weather_id":{
"fa":"02",
"fb":"01"
},
"wind":"东北风3-5级",
"week":"星期二",
"city":"苏州",
"date_y":"2018年09月11日",
"dressing_index":"炎热",
"dressing_advice":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。",
"uv_index":"弱",
"comfort_index":"",
"wash_index":"较适宜",
"travel_index":"较适宜",
"exercise_index":"较适宜",
"drying_index":""
},
"future":{
"day_20180911":{
"temperature":"23℃~28℃",
"weather":"阴转多云",
"weather_id":{
"fa":"02",
"fb":"01"
},
"wind":"东北风3-5级",
"week":"星期二",
"date":"20180911"
},
"day_20180912":{
"temperature":"24℃~30℃",
"weather":"多云转阴",
"weather_id":{
"fa":"01",
"fb":"02"
},
"wind":"东北风4-5级",
"week":"星期三",
"date":"20180912"
},
"day_20180913":{
"temperature":"25℃~29℃",
"weather":"阵雨转阴",
"weather_id":{
"fa":"03",
"fb":"02"
},
"wind":"东北风3-5级",
"week":"星期四",
"date":"20180913"
},
"day_20180914":{
"temperature":"25℃~32℃",
"weather":"多云",
"weather_id":{
"fa":"01",
"fb":"01"
},
"wind":"西风3-5级",
"week":"星期五",
"date":"20180914"
},
"day_20180915":{
"temperature":"25℃~32℃",
"weather":"多云",
"weather_id":{
"fa":"01",
"fb":"01"
},
"wind":"东北风3-5级",
"week":"星期六",
"date":"20180915"
},
"day_20180916":{
"temperature":"25℃~32℃",
"weather":"多云",
"weather_id":{
"fa":"01",
"fb":"01"
},
"wind":"西风3-5级",
"week":"星期日",
"date":"20180916"
},
"day_20180917":{
"temperature":"25℃~32℃",
"weather":"多云",
"weather_id":{
"fa":"01",
"fb":"01"
},
"wind":"西风3-5级",
"week":"星期一",
"date":"20180917"
}
}
},
"error_code":0
}