用python获取气象数据开放平台信息
2015-10-24 11:45
633 查看
缘由
前端时间在练手做一个Android天气预报的App,然后就去找现有的公共API,发现找到的大部分的网址都是失效的,最后发现了 聚合数据 和 气象数据开放平台,
由于感觉后者的操作优点麻烦,所以选择了使用前者。
现在呢,就是想试试后者。
介绍
气象数据平台 是由中国天气网提供的,需要注册+实名验证才能够使用,而且好像现在都还是能够免费购买一年的使用,提供了
* 基础气象数据接口: 包含国内369个地级市未来3天常规预报以及三个气象指数(穿衣指数,舒适度指数,晨练指数)等天气服务数据。
* 常规气象数据接口: 包含国内全站2566个县级以上城市未来3天常规预报以及三个气象指数(穿衣指数,舒适度指数,晨练指数)等天气服务数据。
但是调用起来还是比较麻烦的。
使用说明
调用规范 规范用于指导三方合作伙伴合理调用指数、3天常规预报(24小时)预报服务数据。请求方式:http get
接口组成:由固定URL加5个不同的参数组成,完整URL需客户端经过固定方式加密后使用。
数据返回:json
完整的URL: http://open.weather.com.cn/data/?areaid=“”&type=”“&date=”“&appid=”“&key=”.urlencode($key);
固定URL:http://open.weather.com.cn/data/
参数名称 | 参数含义 | 参数样例 |
---|---|---|
Areaid | 区域id | 单区域:101010100;多区域:101010100|101010200 |
Type | 数据类型 | 指数:index_f(基础接口);index_v(常规接口); 3天预报:forecast_f(基础接口);forecast_v(常规接口); |
Date | 客户端日期 | 按照格式yyyyMMddHHmm获取客户端当前时间 |
Appid | 固定分配的型号标识 | 某某:004906671841487 传递参数时:截取appid的前6位 生成公钥时:取完整的appid |
Key | 令牌 | 由公钥(public_key)和私钥(private_key)通过固定算法加密生成 |
private_key
某某:793ffb_SmartWeatherAPI_662cbc7
private_key仅负责与public_key共同合成key传参,私钥不可见,客户端与服务端各存储一份;
public_key为不包含key在内的完整URL其它部分(此处appid为完整appid)
示例:
http://open.weather.com.cn/data/?areaid=101010100&type=index_f&date=201410230335&appid=22290667181111
key的算法
key=base64_encode(hash_hmac(‘sha1’,publickey,private_key,TRUE));
key加密后通过urlencode对其编码后传参
注:每一个产品使用用户分配一个唯一标识appid,用于统计用户访问情况、区分用户提供差异服务,终端用户按照终端型号分配,一个型号对应一个标识。
示例代码
示例这里我只看了php的代码:::PHP <!--?php set_time_limit(0); $private_key = 'xx'; $appid='xx'; $appid_six=substr($appid,0,6); $areaid = '101010100'; $type='forecast_v'; $date=date("YmdHi"); $public_key="http://open.weather.com.cn/data/?areaid=".$areaid."&type=".$type."&date=".$date."&appid=".$appid; $key = base64_encode(hash_hmac('sha1',$public_key,$private_key,TRUE)); $URL="http://open.weather.com.cn/data/?areaid=".$areaid."&type=".$type."&date=".$date."&appid=".$appid_six."&key=".urlencode($key); echo $URL."<br /-->"; $string=file_get_contents($URL); echo $string; ?>
使用python转化上诉代码
其中前面的转化成python代码都很容易,遇到困难的是Key加密那里$key = base64_encode(hash_hmac('sha1',$public_key,$private_key,TRUE));
我查找了很多资料才知道加密的方法,原因是对加密函数这一块不是很熟悉。
转发的方法为
// PHP版 // HMAC-SHA1加密 $hmac_sha1_str = base64_encode(hash_hmac("sha1", $string_to_sign, $secret_access_key)); # Python版: import hmac import hashlib import base64 hmac.new(Token,data,hashlib.sha1).digest().encode('base64').rstrip()
所以最终的代码为
import urllib import datetime import base64 import hmac import hashlib private_key = 'XXXXXX_SmartWeatherAPI_XXXXXX' #你申请的private_key appid = 'XXXXXX' # 你申请的appid appid_six = appid[:6] area_id = '101010100' # 区域代码 type_ = 'forecast_v' # 接口类型 date = datetime.datetime.now().strftime("%Y%m%d%H%M") # 日期时间 public_key = "http://open.weather.com.cn/data/?areaid=" + area_id + "&type=" + type_ +"&date=" + date + "&appid=" + appid key = urllib.quote( hmac.new(private_key, public_key, hashlib.sha1).digest().encode('base64').rstrip() ) url = "http://open.weather.com.cn/data/?areaid=" + area_id + "&type=" + type_ + "&date=" + date + "&appid=" + appid_six + "&key=" + key
相关文章推荐
- Android Manifest 用法
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- Spark RDD API详解(一) Map和Reduce
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例