前期的准备工作:一、申请API(拿好appid和private_key)二、解读《SmartWeatherAPI<Lite> WebAPI版接口使用说明书》三、准备好areaid、type、date、appid、urlencode($key)(注意,这里经加密的key是需要encodeurl之后的才能成为接口链接的一部分)
好了下面的编码开始:
1、从附件中的areaid_list中找到你想要的地方的areaid,并且选择要查询天气的类型NSString *areaid = @"101010100";NSString *type =
@"index_f";/**
*  官方文档更新的数据类型号
*  指数:index_f(基础接口);index_v(常规接口)
3天预报:forecast_f(基础接口);forecast_v(常规接口)
*
*/ 2、获得当前天气dateNSDate
*_date = [NSDate date];NSDateFormatter *dateFormatter =
[[NSDateFormatter alloc] init];[dateFormatter
setDateFormat:@"yyyyMMddHHmmss"];//注意日期的格式NSString *date =
[[dateFormatter stringFromDate:_date]
substringToIndex:12];//用到的精确到分,24小时制60分钟制3、申请的appid,和private_keyNSString *appid =
@"15ds45s13a465s";//这里是楼主随便输入的,瞎编的
NSString *private_key =
@"46s4ds_SmartWeatherAPI_45s44d6";//也是瞎编的4、算出经过urlencode后的key,这步比较重要,步骤也多,请耐心看完。
在原来的的基础上是在PHP的环境中算出的,代码如下,可在“
http://writecodeonline.com/php/ ”下进行算法的检验
echo
urlencode(base64_encode(hash_hmac('sha1', " http://open.weather.com.cn/data/?areaid=101010100&type=index_f&date=201409041509&appid=15ds45s13a465s",
"46s4ds_SmartWeatherAPI_45s44d6",
TRUE)));首先定义得到public_key和API的方法,还有就是对key进行encodeurl操作的方法
注意,这里的方法都是被我定义在getTime的类里面,后面是在main中实例化出来的//获得publicky
- (NSString*)
getPublicKey:(NSString*)areaid :(NSString*)type :(NSString*)date
:(NSString*)appid {NSString *Key = [[NSString alloc]
initWithFormat:@"http://open.weather.com.cn/data/?areaid=%@&type=%@&date=%@&appid=%@",
areaid, type, [date substringToIndex:12], appid];return
Key;
}//获得完整的API
- (NSString*) getAPI:(NSString*)areaid
:(NSString*)type :(NSString*)date :(NSString*)appid :(NSString*)key
{NSString *API = [[NSString alloc]
initWithFormat:@"http://open.weather.com.cn/data/?areaid=%@&type=%@&date=%@&appid=%@&key=%@",
areaid, type, [date substringToIndex:12], [appid substringToIndex:6],
key];//-------------这里需要主要的是只需要appid的前6位!!!return
API;}//将获得的key进性urlencode操作
- (NSString
*)stringByEncodingURLFormat:(NSString*)_key{NSString *encodedString
= (__bridge NSString
*)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)_key,
nil, (CFStringRef) @"!$&'()*+,-./:;=?@_~%#[]",
kCFStringEncodingUTF8);//由于ARC的存在,这里的转换需要添加__bridge,原因我不明。求大神讲解return
encodedString;}重点来了,在oc下的算法如下,记得把附件的Base64.h
加进来并引用到工程里面//对publickey和privatekey进行加密
- (NSString *)
hmacSha1:(NSString*)public_key :(NSString*)private_key{NSData*
secretData = [private_key
dataUsingEncoding:NSUTF8StringEncoding];NSData* stringData = [public_key
dataUsingEncoding:NSUTF8StringEncoding];const void* keyBytes =
[secretData bytes];const void* dataBytes = [stringData
bytes];///#define CC_SHA1_DIGEST_LENGTH   20          /* digest
length in bytes */void* outs =
malloc(CC_SHA1_DIGEST_LENGTH);CCHmac(kCCHmacAlgSHA1, keyBytes,
[secretData length], dataBytes, [stringData length], outs);//
Soluion 1NSData* signatureData = [NSData dataWithBytesNoCopy:outs
length:CC_SHA1_DIGEST_LENGTH freeWhenDone:YES];return
[signatureData
base64EncodedString];}这里只是初步算出来的key,还未encodeurl,链接不能被浏览器识别,所以现在经过算法得到的_key还有一步操作才能的到真正的key。NSString *_key = [getTime hmacSha1:[getTime
getPublicKey:areaid :type :date :appid] :private_key];NSString *key =
[getTime
stringByEncodingURLFormat:_key];最后一步了吧!拼接APINSString *weatherAPI = [getTime getAPI:areaid :type :date
:appid
:key];//OK,我们的API就可以用啦。最后,通过API返回的值是JSON文件,通过解析,就能得到我们想要的数据了,下面拿一个开发的接口举例NSDictionary *weatherDic = [getTime
getWeatherDic:@"http://www.weather.com.cn/data/cityinfo/101010100.html"];//    weatherDic字典中存放的数据也是字典型,从它里面通过键值取值NSDictionary
*weatherInfo = [weatherDic
objectForKey:@"weatherinfo"];NSLog(@"今天是 %@ %@ %@ 的天气状况是:%@ %@ -
%@",[newDateOne substringWithRange:NSMakeRange(0, 4)],[newDateOne
substringWithRange:NSMakeRange(4, 2)] ,[newDateOne
substringWithRange:NSMakeRange(6, 2)],[weatherInfo
objectForKey:@"weather"],[weatherInfo objectForKey:@"temp1"],[weatherInfo
objectForKey:@"temp2"]);输出:2014-09-04 23:40:23.243
WeatherAPP[5688:201108] 今天是 2014-09-04 的天气状况是:晴 17℃ - 30℃ weatherInfo字典里面的内容是--->{"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"17℃","temp2":"30℃","weather":"晴","img1":"n0.gif","img2":"d0.gif","ptime":"18:00"}}

如何使用中国气象局API开发天气APP相关推荐

  1. 免费天气api适合商用吗_4个免费的天气提供商API开发天气应用

    免费天气api适合商用吗 提供天气信息的Android应用在Play商店中很常见. 此外,Weather应用程序和小部件是下载次数最多的项目之一. 当需要开发天气应用程序时 ,有必要使用天气提供程序作 ...

  2. Android中应用百度地图API开发地图APP实例-显示百度地图

    场景 效果 在使用百度地图API之前需要先在百度地图开放平台中申请API_KEY http://lbsyun.baidu.com/index.php 申请API_KEY 登录百度开放平台后找到控制台下 ...

  3. android应用控制百度地图,Android中应用百度地图API开发地图APP实例-显示百度地图...

    场景 效果 在使用百度地图API之前需要先在百度地图开放平台中申请API_KEY 申请API_KEY 登录百度开放平台后找到控制台下的应用管理-创建应用 依次输入应用名,应用类型选择Android S ...

  4. Android实现-心知天气API接口开发(天气预报app)

    自己开发app之心知天气APP程序代码粘贴即可用.完整代码附最后. 一.环境配置和素材准备 第一步:去知心天气注册开发者账号查看自己的token.注册好登录进去--控制台---免费版--秘钥.这里的秘 ...

  5. (更新源码)AndroidStudio新手开发:天气app(百度地图api+和风天气api+城市查询+折线展示)

    AndroidStudio新手开发:天气app(百度地图api+和风天气api+城市查询+折线展示) 1.内容简介 2.环境配置 3.导入他人demo 4.AS项目分析 5.天气项目流程 6.数据探寻 ...

  6. 使用易客运提供的天气API开发IOS应用天气APP

    目录 一.天气API官网 二.开发工具Xcode 三.教程开始(本片文章只介绍如何使用易客运API请求天气数据,演示项目仅一个获取天气功能) 3.1 注册登陆天气API后台(新用户会有2000个测试豆 ...

  7. Android 天气APP(一)开发准备

    好天气APP(天气预报.空气质量.生活建议.灾害预警.出行建议.城市切换.城市搜索.世界国家/地区的城市.常用城市.背景更换.应用自动更新) (运用百度定位.百度地图与和风天气API制作) 演示视频地 ...

  8. 【高德地图API】那些年我们一起开发的APP—即LBS应用模式分享

    2019独角兽企业重金招聘Python工程师标准>>> 摘要:利用地图API都能做些什么应用呢?应用商店里所有的分类,都可以结合上LBS来丰富应用.除了传统的生活服务应用,还有新潮的 ...

  9. 免费天气查询工具类源码,开箱即用,根据中国气象局API编写。高效稳定

    文章目录 引言 相关依赖 WeatherUtil工具类代码 http工具类 测试 引言 使用Java语言,根据中国气象局API编写的查询天气工具类,代码引入就能用,代码中对异常做了处理,无论是否查询成 ...

最新文章

  1. java拖动组件,[小娱乐] 一个能拖动组件、改变组件大小的容器
  2. nanodet onnx踩坑记录
  3. 小技巧textbox的行数
  4. android webview 多文件上传,Android中的webview支持页面中的文件上传实例代码
  5. jdk170不支持注释_JDK 9 @不建议使用的注释增强功能
  6. mysql cluster 查看数据库表名称_MySQL Cluster如何创建磁盘表方法解读
  7. 张正友摄像机标定的研究(MATLAB+OpenCV)
  8. 2017.8.7 GT考试 思考记录
  9. MFC开发IM-字符串转换大全
  10. Canvas 数学、物理、动画学习笔记一
  11. 深度学习花书-2.9 伪逆矩阵
  12. 获取天气预报API_统计最容易生病时间段
  13. matlab pn码捕获,直扩系统PN码捕获和跟踪的FPGA实现
  14. ext2文件系统初步
  15. Qt Creator 使用教程
  16. Linux关闭桌面进程,Centos进入桌面和退出桌面的方法
  17. 搭建证书服务并配置Tomcat SSL服务器证书
  18. Flutter isolate应用
  19. 50个ospf经典问题
  20. oracle如何某个字段去重复的数据,Oracle 去重复的数据

热门文章

  1. 实现字符和Unicode码互换 (Java经典编程案例)
  2. jmockit抛NullPointer异常,initialize failed异常
  3. 全景地图是什么?怎么用有什么作用!
  4. 企业网站被黑客攻击了怎么办
  5. 计算机教师读56 号教室体会,《第56号教室的奇迹》读后感(精选7篇)
  6. 服务器上显示存储脱机,服务器硬盘脱机状态
  7. 6_商品 SPU 与 SKU
  8. ubuntu linux 下使用google eather
  9. 一维表和交叉表的转化
  10. hexo个人博客搭建(二)butterfly主题配置