如何使用中国气象局API开发天气APP
前期的准备工作:一、申请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相关推荐
- 免费天气api适合商用吗_4个免费的天气提供商API开发天气应用
免费天气api适合商用吗 提供天气信息的Android应用在Play商店中很常见. 此外,Weather应用程序和小部件是下载次数最多的项目之一. 当需要开发天气应用程序时 ,有必要使用天气提供程序作 ...
- Android中应用百度地图API开发地图APP实例-显示百度地图
场景 效果 在使用百度地图API之前需要先在百度地图开放平台中申请API_KEY http://lbsyun.baidu.com/index.php 申请API_KEY 登录百度开放平台后找到控制台下 ...
- android应用控制百度地图,Android中应用百度地图API开发地图APP实例-显示百度地图...
场景 效果 在使用百度地图API之前需要先在百度地图开放平台中申请API_KEY 申请API_KEY 登录百度开放平台后找到控制台下的应用管理-创建应用 依次输入应用名,应用类型选择Android S ...
- Android实现-心知天气API接口开发(天气预报app)
自己开发app之心知天气APP程序代码粘贴即可用.完整代码附最后. 一.环境配置和素材准备 第一步:去知心天气注册开发者账号查看自己的token.注册好登录进去--控制台---免费版--秘钥.这里的秘 ...
- (更新源码)AndroidStudio新手开发:天气app(百度地图api+和风天气api+城市查询+折线展示)
AndroidStudio新手开发:天气app(百度地图api+和风天气api+城市查询+折线展示) 1.内容简介 2.环境配置 3.导入他人demo 4.AS项目分析 5.天气项目流程 6.数据探寻 ...
- 使用易客运提供的天气API开发IOS应用天气APP
目录 一.天气API官网 二.开发工具Xcode 三.教程开始(本片文章只介绍如何使用易客运API请求天气数据,演示项目仅一个获取天气功能) 3.1 注册登陆天气API后台(新用户会有2000个测试豆 ...
- Android 天气APP(一)开发准备
好天气APP(天气预报.空气质量.生活建议.灾害预警.出行建议.城市切换.城市搜索.世界国家/地区的城市.常用城市.背景更换.应用自动更新) (运用百度定位.百度地图与和风天气API制作) 演示视频地 ...
- 【高德地图API】那些年我们一起开发的APP—即LBS应用模式分享
2019独角兽企业重金招聘Python工程师标准>>> 摘要:利用地图API都能做些什么应用呢?应用商店里所有的分类,都可以结合上LBS来丰富应用.除了传统的生活服务应用,还有新潮的 ...
- 免费天气查询工具类源码,开箱即用,根据中国气象局API编写。高效稳定
文章目录 引言 相关依赖 WeatherUtil工具类代码 http工具类 测试 引言 使用Java语言,根据中国气象局API编写的查询天气工具类,代码引入就能用,代码中对异常做了处理,无论是否查询成 ...
最新文章
- java拖动组件,[小娱乐] 一个能拖动组件、改变组件大小的容器
- nanodet onnx踩坑记录
- 小技巧textbox的行数
- android webview 多文件上传,Android中的webview支持页面中的文件上传实例代码
- jdk170不支持注释_JDK 9 @不建议使用的注释增强功能
- mysql cluster 查看数据库表名称_MySQL Cluster如何创建磁盘表方法解读
- 张正友摄像机标定的研究(MATLAB+OpenCV)
- 2017.8.7 GT考试 思考记录
- MFC开发IM-字符串转换大全
- Canvas 数学、物理、动画学习笔记一
- 深度学习花书-2.9 伪逆矩阵
- 获取天气预报API_统计最容易生病时间段
- matlab pn码捕获,直扩系统PN码捕获和跟踪的FPGA实现
- ext2文件系统初步
- Qt Creator 使用教程
- Linux关闭桌面进程,Centos进入桌面和退出桌面的方法
- 搭建证书服务并配置Tomcat SSL服务器证书
- Flutter isolate应用
- 50个ospf经典问题
- oracle如何某个字段去重复的数据,Oracle 去重复的数据