提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
如何使用中国气象局API开发天气APP
前期的准备工作:
一、申请API(拿好appid和private_key)
二、解读《SmartWeatherAPILite 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、获得当前天气date
NSDate
*_date = [NSDate date];
NSDateFormatter *dateFormatter =
[[NSDateFormatter alloc] init];
[dateFormatter
setDateFormat:@"yyyyMMddHHmmss"];//注意日期的格式
NSString *date =
[[dateFormatter stringFromDate:_date]
substringToIndex:12];//用到的精确到分,24小时制60分钟制
3、申请的appid,和private_key
NSString *appid =
@"15ds45s13a465s";//这里是楼主随便输入的,瞎编的
NSString *private_key =
@"46s4ds_SmartWeatherAPI_45s44d6";//也是瞎编的
4、算出经过urlencode后的key,这步比较重要,步骤也多,请耐心看完。
在原来的的基础上是在PHP的环境中算出的,代码如下,可在“
”下进行算法的检验
echo
urlencode(base64_encode(hash_hmac('sha1', " ;type=index_fdate=201409041509appid=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:@";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:@";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 1
NSData* 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];
最后一步了吧!拼接API
NSString *weatherAPI = [getTime getAPI:areaid :type :date
:appid
:key];
//OK,我们的API就可以用啦。
最后,通过API返回的值是JSON文件,通过解析,就能得到我们想要的数据了,下面拿一个开发的接口举例
NSDictionary *weatherDic = [getTime
getWeatherDic:@""];
// 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"}}
相关问答
Q1: 什么天气预报比较准确
现在比较常用也比较出名的天气预报软件有:中国气象、墨迹天气、彩云天气、2345天气预报、中国天气通、360天气、知天气、最美天气、天气通、Yahoo天气、黄历天气、彩云天气等。而比较准确的就是当地的气象预报软件,大家可以在自己的应用商店搜索「市名+气象」或「市名+天气」,比如南京气象、深圳天气之类的,这些地方的气象局数据是最准确的。
相关信息:
1、墨迹天气:墨迹天气手机版2017是全球4.7亿人都在用的天气APP,墨迹天气手机版2017支持3000国内城市及70万海外城市及地区天气查询,准确率较高。
2、中国天气通:中国天气通2017最新版是由中国气象局公共气象服务中心开发团队推出的一款专业的天气服务软件,中国天气通2017最新版内容全面详实,是国内最权威的天气软件。
3、最美天气:最美天气app是一款手机天气服务软件。最美天气app除了天气信息的准确性不错之外,界面也很美观。
4、和天气:和天气是中国移动通信推出的天气信息查询软件,采取权威的数据源,信息准确度高;安装包小巧灵活,节省空间。
Q2: 最精准的天气软件是哪个?
1、小兵天气天气app开发:精准定位及时推送,分钟级、公里级天气预报,实时监测阴晴雨雪。提供15天天气预报,5天空气质量预报,实时空气质量及空气质量等级预报。特殊天气提前发送预警信息,帮助用户更好做出生活决策。
2、停课铃天气app开发:软件能向公众第一时间发布所定制地区天气app开发的权威停课信号以及天气预警信息。另外,停课铃可以很方便查看天气实况、空气质量、逐天预报,还可以查询精细至街道级别的天气信息,轻松预约自己需要的灾害天气预警信息。
3、心心天气:心心天气是一款全中文桌面天气预报查询软件。随时随地,全国天气,尽在掌握。ip自动定位判断城市,迅速连接显示国内2348个县级以上城市天气,包括温度,适度,风向等。
4、最美天气:最美天气是宇龙酷派公司研发的一款免费的天气预报应用。准确的数据源,人性化设计,漂亮的城市背景,简洁的操作布局,查询天气信息的同时,还能轻松掌控更全面的生活指数,支持多城市查询管理。
5、天气盒子:“天气盒子”是由中国气象局公共气象开发团队推出的一款专业的天气服务软件,可提供三天预报、气象预警等多种功能,气象信息来源于中国气象局中央气象台。
Q3: 有没有那种人性化的可以根据温度提示穿衣的天气预报app?
MIUI天气就可以。
MIUI天气是小米系统的官方app,一款MIUI开发的天气软件,界面时尚大方美观,功能强大,支持全国城市,支持周边城市天气预报,支持天气提醒,支持污染指数等功能。
软件特点:有雨、雪、降温等突发天气时自动通知,也可以转发当地天气给关心的亲人和朋友;周到详细的天气详情指数,帮助您制定一天的出行计划;跟随天气变化的桌面widget,支持4x2、4x1大小;动态天气效果,炫丽的设计让你即使在雨天也能有好心情;高精度的天气效果,高品质的体验。
相关拓展
人性化:指的是一种理念,具体体现在 美观的同时能根据消费者的生活习惯,操作习惯,方便消费者,既能满足消费者的功能诉求,又能满足消费者的心理需求。人性化的理念在多个领域都有应用场景。
人性化是指让技术和人的关系协调,即让技术的发展围绕人的需求来展开。这里所指的技术是广义上的技术,不单单指的是某一领域。
以上内容参考 百度百科-人性化
Q4: 天气软软什么App妤
《墨迹天气》全国4.7亿人都在使用的天气 APP,支持海内外地区天气查询,出国旅行更方便。更有实时空气质量预报,特殊天气预警,让你分分钟躲避坏天气!《雅虎天气》是一款超级老牌的天气应用。提供了未来五天的 天气预报,以及每天的详细天气。和大多数天气软件不同的是,根据不同的季节,天气情况,你的位置信息和你喜欢的地点,雅虎天气会从Flickr上为你挑选精美的照片。精湛的画面设计和精美的风景照,尽显你所在之处、四时变化和当前天气状况的特性。详尽的天气信息,包括 10 日的天气预报和 24 小时的温度预报。互动式雷达图、卫星图、高温图和风向图。《GO天气》最简洁最漂亮的天气应用。覆盖全球数万个地区和城市,引用最精确的气象数据,在任何时间任何地点,为您提供最精确的天气信息。提供体感温度、风向、湿度、露点、降雨概率等多种详细天气信息,更有24小时7天天气预报,为您的出行做好准备。可通过搜索,GPS定位和浏览查找等多种方式添加城市。提供趋势图和列表两种展现方式,满足不同用户的不同查阅习惯。50+套小部件皮肤,10+套 动态背景,数百万用户使用,为您美化您的屏幕。提前预警恶劣天气,支持用户定制单位制、设置动画与壁纸、以及插件响应显示等多种个性化设置。
Q5: 我负责的app要实现天气预报实时功能,用什么接口好
气象数据开放平台 气象数据开放平台是中国气象局面向网络媒体、手机厂商、第三方气象服务机构等用户,通过web方式提供数据气象服务的官方载体。是国内首个面向个人网站、开发爱好者和服务机构的气象服务API.
之前做过的项目就是采用的这一个
天气app开发的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于天气程序下载、天气app开发的信息别忘了在本站进行查找喔。





