首页 > 代码库 > SmaterWeatherApi---签名加密和数据访问--简单粗暴一步搞定

SmaterWeatherApi---签名加密和数据访问--简单粗暴一步搞定

使用中国天气网接口的朋友们,大家(还有我)辛苦了可怜

有兴趣的可以去了解一下http://smart.weather.com.cn/wzfw/smart/weatherapi.shtml

年初的时候停用了之前的接口,改为申请使用,于是发个了申请邮件,中间各种曲折。。。一万字。。

总算是申请下来了,不过接口文档啊,看的我累觉不爱,文档上只有php版的kay生成方法,我在androi上使用,那些加密方法不知道用java如何实现

一怒之下,就写个php版的吧,本来是只想写个生成key的接口的,后来想了想 多写了几行 直接来个一步搞定,省去了客户端上多步网络操作和字符串拼接


叨叨了半天,直接看效果吧


示例:




完整代码:

<?php
/*----------这个文件需要传到自己的外网空间,没有的话 可以整个免费的云空间 我用的是魔泊网的 --------------*/
/*----------作用:访问这个文件 只需要传 type和areaid 这两个参数,就能得直接到 天气数据了/ 不用来来回回的签名拼接等等等一大堆麻烦的东西了--------------*/

//中国天气网SmartWeatherAPI签名接口
//签名生成完直接访问数据

// 参数type:请求数据类型;areaid: 城市ID

//appid
$app_id='你自己的appid';							
//privatekey
$privatekey='你自己的privatekey';		

if(isset($_REQUEST['type'])&&isset($_REQUEST['areaid'])){
//接收参数
$type=$_REQUEST['type'];
$areaid=$_REQUEST['areaid'];
//格式化当前时间yyyyMMddHHmm
$date=date('YmdHi', time());

//api请求固定部分
$api_head='http://open.weather.com.cn/data/?areaid='.$areaid.'&type='.$type.'&date='.$date;

//拼接publickey
$publickey=$api_head.'&appid='.$app_id;

//生成key
$sign_key=base64_encode(hash_hmac('sha1',$publickey,$privatekey,true));

//截取appid前6位
$api_url_appid=substr($app_id,0,6);

//拼接和urlencode处理最终url
$api_url=$api_head.'&appid='.$api_url_appid.'&key='.urlencode($sign_key);

//省事省到底,直接执行 生成的url 访问数据
echo file_get_contents($api_url);

}else{

echo 'error';

}
?>