天气预报接口IOS版OC:SmartWeather API中key的计算方法

  最近在做一个天气预报app,看见国家气象局有api接口提供,但是需要申请,网址 http://smart.weather.com.cn/wzfw/smart/weatherapi.shtml

审核大概需要一周左右,审核通过后,你会收到一封邮件

您好:
      欢迎使用SmartWeatherAPI测试接口
      恭喜您的申请已通过审核,以下是为您分配的鉴权信息:
      appid:XXXXXXXXXXXXXXXX
      private_key:XXXXXXXXXXXXXXXX
      接口使用说明请参考《SmartWeatherAPI_Lite_WebAPI 版产品使用说明书》,区域列表:请见附件areaid_list.xlsx。
      该鉴权信息仅限您个人或本公司使用,如有泄露我们将撤销您的使用权限,必要时将追究相关责任。
      最后,非常感谢您的参与。

  现在你有appid和private_key了,可以开始获取天气了。

  1. 接口说明

  接口的完整URL: http://open.weather.com.cn/data/?areaid=""&type=""&date=""&appid=""&key=".urlencode($key)

  输入参数:

  areaid: 区域id,审核通过后邮件中有个附件,提供的就是现有的所有区域的id号。

  type: 数据类型(实况: observe, 指数: index, 常规预报: forecast3d)。

  date: 客户端日期,按照格式yyyyMMddHHmm获取客户端当前时间。

  appid: 固定分配的型号标识,审核通过后邮件告知(传递参数时:截取 appid 的前 6 位; 生成公钥时:取完整的 appid)。

  key: 令牌,有公钥(public_key)和私钥(private_key)通过固定算法加密生成。

  2. 加密方式

  private_key: 审核通过后,邮件中会提供。private_key仅负责与 public_key 共同合成 key 传参,私钥不可见,客户端与服务端各存储一份;

  public_key: 不包含key在内的完整URL的其他部分(此处appid为完整appid);

  key的算法: 说明书中提供的是php中的算法代码,如下

  • key = base64_encode(hash_hmac(‘sha1‘, $public_key, $private_key, TRUE));

    key加密后,通过 urlencode 对其编码后传参。

这是官方的文件,加密方式是这个文章要探讨的重点,官方提供的是php中key的算法,关于IOS下HMAC_SHA1加密算法的网上找了很多也没找到,最后在stackoverflow里找到了,

这里共享一下。加密算法见这篇博文 IOS下HMAC_SHA1加密算法

  获取URL代码如下: 

   //获取当前时间
    NSDate *  senddate = [NSDate date];
    NSDateFormatter  *dateformatter = [[NSDateFormatter alloc] init];
    [dateformatter setDateFormat:@"YYYYMMddhhmm"];
    NSString *  timeStr = [dateformatter stringFromDate:senddate];

    //你的appid
    NSString *appid = @"你的appid";
    //你的appid前6位
    NSString *shortappid = @"你的appid前6位";

    //这里是获取常规预报 type=forecast3d
    NSString *base = @"http://open.weather.com.cn/data/?areaid=101010100&type=forecast3d&date=";

    //生成公钥时:取完整的 appid
    NSString *urlAppid = [NSString stringWithFormat:@"%@%@&appid=%@",base,timeStr,appid];

    //传递参数时:截取 appid 的前 6 位
    NSString *urlShortAppid = [NSString stringWithFormat:@"%@%@&appid=%@",base,timeStr,shortappid];
    //你的private_key
    NSString *privateKey = @"你的private_key";

    //得到了key
    NSString *key = [self hmacsha1:urlAppid key:privateKey
                     ];
    //IOS的URL中文以及符号转码
    key = [Utility encodeToPercentEscapeString:key];

    //接口的完整URL
    NSString *endUrl = [NSString stringWithFormat:@"%@&key=%@",urlShortAppid,key];

[self hmacsha1:urlAppid key:privateKey];

+ (NSString *)hmacsha1:(NSString *)text key:(NSString *)secret;
这方法见 : IOS下HMAC_SHA1加密算法
[Utility encodeToPercentEscapeString:key];+ (NSString *)encodeToPercentEscapeString: (NSString *) input;
这方法见 : IOS的URL中文以及符号转码。

就这样的得到了完整URL  http://open.weather.com.cn/data/?areaid=101010100&type=forecast3d&date=201409051055&appid=de76d3&key=S017pH00FeX%2FT658bf3DZPThKtg%3D

  3. 返回数据

  3.1 常规预报: forecast3d

  完整URL  http://open.weather.com.cn/data/?areaid=101010100&type=forecast3d&date=201409051055&appid=de76d3&key=S017pH00FeX%2FT658bf3DZPThKtg%3D

  输出实例:

{"c":{"c1":"101010100","c2":"beijing","c3":"北京","c4":"beijing","c5":"北京","c6":"beijing","c7":"北京","c8":"china","c9":"中国","c10":"1","c11":"010","c12":"100000","c13":"116.407526","c14":"39.904030","c15":"33","c16":"AZ9010","c17":"+8"},"f":{"f1":[{"fa":"00","fb":"01","fc":"30","fd":"18","fe":"0","ff":"0","fg":"0","fh":"0","fi":"05:45|18:40"},{"fa":"01","fb":"02","fc":"29","fd":"19","fe":"0","ff":"0","fg":"0","fh":"0","fi":"05:46|18:38"},{"fa":"02","fb":"00","fc":"29","fd":"20","fe":"0","ff":"0","fg":"0","fh":"0","fi":"05:47|18:37"}],"f0":"201409050800"}}

  

  3.2  实况: observe

  完整URL  http://open.weather.com.cn/data/?areaid=101010100&type=observe&date=201409051101&appid=de76d3&key=Z10wEjVXiTiZKEslx5WJGXV4B%2F4%3D

  输出实例:

{"l":{"l1":"25","l2":"57","l3":"1","l4":"2","l7":"10:50"}}

   3.3  指数: index

  完整URL  http://open.weather.com.cn/data/?areaid=101010100&type=observe&date=201409051101&appid=de76d3&key=Z10wEjVXiTiZKEslx5WJGXV4B%2F4%3D

  输出实例:

{"i":[{"i1":"ct","i2":"穿衣指数","i3":"","i4":"热","i5":"天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。"},{"i1":"zs","i2":"中暑指数","i3":"","i4":"无","i5":"温度不高,其他各项气象条件适宜,中暑机率极低。","i6":"无","i7":"温度不高,其他各项气象条件适宜,中暑机率极低。","i8":"无","i9":"温度不高,其他各项气象条件适宜,中暑机率极低。","i10":""}]}

  

ps:除了国家气象局的天气api接口,还有百度的天气api挺好用的,假如嫌这个api接口麻烦的话,就用百度的吧,直接申请一个key就可以了,不要加密什么的,而且一申请就可以用了,气象局的要审核一周左右,废话少说,上链接。

百度ak申请地址:http://lbsyun.baidu.com/apiconsole/key接口说明:http://developer.baidu.com/map/carapi-7.htm
 
时间: 2024-10-09 14:55:15

天气预报接口IOS版OC:SmartWeather API中key的计算方法的相关文章

编程语言如何置入天气预报接口api

天气预报预报接口在网页中应用的多,一般在discuz网站打开后台可以添加,然而编程语言如何实现呢? 可以申请到SmartWeatherAPI天气预报接口的使用权限,开始着手我的实时天气预报系统的开发,主要开发的版本使用的是Python脚本,成果将于近期以系列文章与大家见面.今天在这里我和大家探讨一下SmartWeatherAPI中key的计算方法,并提供C++程序源码供大家参考. SmartWeatherAPI(简称"SWA接口")是中国气象局面向网络媒体.手机厂商.第三方气象服务机构

开发腾讯移动游戏平台SDK ios版Ane扩展 总结

本文记录了在开发 腾讯移动游戏平台SDK(MSDK) ios版Ane扩展 过程中所遇到的问题 文中非常多问题都是基础的问题.对object c和xcode配置了解不深入导致的.(没办法,开发ane的程序猿大部分都是做ActionScript的,一般对c/c++都没有开发经验) 问题一.编译报错:Unexpected '@' in program 代码例如以下: @try{ } @catch{ } 原因是高版本号xcode代码放在低版本号xcode下跑,低版本号ios 不支持这样的写法(ios 7

移动应用微信图像接口开发指南 (iOS版)

使用说明 本文档主要介绍微信图像SDK(iOS版)使用方法,利用SDK可以准确搜索到用户上传的图像. 本文属于入门级文档,旨在帮助开发者快速学习iOS SDK的使用并应用到自身开发工作.具体 API 可到"资源下载 "页下载<微信图像SDK(iOS版)开发手册>进行查询. 准备工作 第一步 创建移动应用 请到"管理中心"创建移动应用,点击"创建移动应用",填写相关资料,然后将该应用提交审核,只有审核通过的应用才能进行开发. 注册完毕,

iOS开发OC基础:OC中的分类(类目)

//分类,category,(类目) //为没有源代码的类添加方法 //一定要注意,只能添加方法,不能添加实例变量 /** *  分类 类的定义也是分为接口部分和实现部分 接口部分:以@interface开头 + 类名 后跟小括号,小括号内填写的是分类名 @end结束 在@interface 与@end 之间添加方法. */ //分类为原类添加的方法,就相当于原类具有该方法,可以正常调用 因为涉及到几个分类的创建,所以就直接上传代码了,其实代码也不多,只是怕大家在建立分类的时候会混淆,所以直接把

天气预报接口api(中国天气网)

中国天气weather.comhttp://m.weather.com.cn/data/101110101.html(六天预报) http://www.weather.com.cn/data/sk/101110101.html(实时天气信息) 其中101110101是城市的代码,获得城市代码进入 http://www.weather.com.cn在搜索框上输入你要需要获得天气的城市,点击查询,即可在地址栏获得相应城市编号,然后替换http://m.weather.com.cn/data/1011

开源免费天气预报接口API以及全国全部地区代码!!(国家气象局提供)

国家气象局提供的天气预报接口 接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data/cityinfo/101010100.html http://m.weather.com.cn/data/101010100.html 对于第三个接口,返回信息比較全面,也是以json格式提供,格式例如以下 {"weatherinfo": { //基本信息; "city&quo

开源免费的天气预报接口API以及全国所有地区代码(国家气象局提供)

天气预报一直是各大网站的一个基本功能,最近小编也想在网站上弄一个,得瑟一下,在网络搜索了很久,终于找到了开源免费的天气预报接口API以及全国所有地区代码(国家气象局提供),具体如下: 国家气象局提供的天气预报接口 http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data/cityinfo/101010100.html http://m.weather.com.cn/data/101010100.

开源免费天气预报接口API以及全国所有地区代码!!(国家气象局提供) 【转】

国家气象局提供的天气预报接口 接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data/cityinfo/101010100.html http://m.weather.com.cn/data/101010100.html 对于第三个接口,返回信息比较全面,也是以json格式提供,格式如下 {"weatherinfo": { //基本信息; "city"

iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误

在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握. expression:表达式assignable:赋值variable:变量redefinition:重复定义type:类型conflicting:冲突项invalid:无效的conversion:转换specifier:说明符indent:缩进operands:运算对象.操作数binary:二