因为要做个天气应用。须要找个天气的API。上网上搜了下都是那几个,并且基本都过时了。百度有个天气API,只是貌似仅仅能提供当天的。网上提到的中国气象接口的文章,大都用的时旧API,有的被封了,有的永远停到了2014年3月24不更新了。

后来找到了中国天气的新接口,已经升级成气象数据开放平台了http://openweather.weather.com.cn/。没有开发人员社区或论坛什么的,仅仅能自己琢磨他的文档了(感觉没人维护。。)。

经过几个疑难点卡住后。总算调通了。

现分享给大家。

1.申请keys

首先注冊账号。然后填资料等审核(还要身份证。

。。)。话说审核真是慢,我等了一个星期才审核通过,之后就有了自己的Key了,这个请求天气数据时会用到。

2.申请服务

审核通过后,就能够去产品中心那申请接口了。眼下有两种:常规气象数据接口与基础气象数据接口。

差别在于常规的比基础的城市多。至于价钱么,不要300/年,不要30/年,如今大优惠仅仅需0/年,常规气象数据接口带回家:P。

3.研读API文档

有JAVA的演示样例代码能够參考,主要包括key加密的内容。能够直接用,其它请求等须要自己写。

请求用get,解析用json,没什么难点,主要是加密这。。。

这个加密之前也没怎么太上心看,结果看晕了,卡了不少时间。

主要加密由public_key与private_key结合,作为key这个參数,一起传递过去。

传递URL格式例如以下:

http://open.weather.com.cn/data/?areaid="areaid"&type="type"&date="date"&appid="appid_six"&key="key"

參数介绍:

areaid:城市地区代码,官方有表格提供。能够考虑用101010100(北京)

type:请求数据的类型:指数:index_f(基础接口);index_v(常规接口); 3天预报:forecast_f(基础接口);forecast_v(常规接口);我用的forecast_v

date:当前时间  格式yyyyMMddHHmm  如201506051423

appid:这是个坑。这块正式请求时,用的是appid的前六位,我在这卡了非常久。。

。仅仅有作为public_key时才用完整的appid,后边会说

key:到了这个复杂的东西了。这块用到三个东西来完毕,首先:

private_key:申请到的那个key

public_key:格式例如以下。与传递的URL类似但不同,其一在于没有key參数,其二在于appid使用的是完整的appid。这非常重要

http://open.weather.com.cn/data/?areaid="areaid"&type="type"&date="date"&appid="appid_full"

然后有个这两个之后,使用提供的java演示样例代码中的standardURLEncoder(public_key。private_key),将公钥和私钥结合为key參数

之后基本就能够收到返回的天气信息了。

4.解析天气信息

返回的json信息就不多说了,官方提供的文档有相应的解释,就是參数都是c1,c2...fa,fb,fc之类的,太不人性化了。

在这遇到的主要问题是。返回的汉子乱码。。

。。

预计可能时因为和server端使用的编码不同,不是utf-8。。

。。。

并且官方啥都没说。。。。。

没办法,我就仅仅能苦逼的一个一个编码尝试,用了好多种方法解码总算是还原为汉字了。方法例如以下:

byte[] converttoBytes = weather.city.getBytes("ISO-8859-1");
String s1 = new String(converttoBytes);
System.out.println(s1);
weather.city = s1;

经过測试,传来的汉字格式竟然是ISO-8859-1的?(此处如理解有错误,请指正)好吧。感觉非常奇葩--!

到这大家基本就都能顺利调通了吧,相信小伙伴都没问题的

项目地址:https://github.com/rsy210/MyWeather

转载请注明出处哈http://blog.csdn.net/lqc1992/article/details/46375567

中国气象网 气象数据开放平台 API用法 (Android)的更多相关文章

  1. 基于MaxCompute的媒体大数据开放平台建设

    摘要:随着自媒体的发展,传统媒体面临着巨大的压力和挑战,新华智云运用大数据和人工智能技术,致力于为媒体行业赋能.通过媒体大数据开放平台,将媒体行业全网数据汇总起来,借助平台数据处理能力和算法能力,将有 ...

  2. 百度AI开放平台- API实战调用

    百度AI开放平台- API实战调用 一.      前言 首先说一下项目需求. 两个用户,分别上传了两段不同的文字,要计算两段文字相似度有多少,匹配数据库中的符合条件的数据,初步估计列出来会有60-1 ...

  3. Java对接拼多多开放平台API(加密上云等全流程)

    前言 本文为[小小赫下士 blog]原创,搬运请保留本段,或请在醒目位置设置原文地址和原作者. 作者:小小赫下士 原文地址:Java对接拼多多开放平台API(加密上云等全流程) 本文章为企业ERP(I ...

  4. 微博开放平台api使用

    前言:微博开放平台提供了微博数据的api接口,不仅可以直接通过api调用微博服务发布微博查询微博,更重要的是,可以在自己的网站上获得新浪微博api的授权,调用微博的某些内容,就好像我们再网站中看到好文 ...

  5. 微信小程序,天气预报(百度地图开放平台API)

    小程序看似一种全新的东西,但好在基本上就是曾经HTML,CSS,JS的一个微变版本. 语法和之前一样.只是一些用法和名字(标签)发生了一些变化. 小程序主要就四种扩展名的文件:js,json,wxml ...

  6. 互联网开放平台API安全设计

    互联网开放平台设计1.需求:现在A公司与B公司进行合作,B公司需要调用A公司开放的外网接口获取数据,如何保证外网开放接口的安全性.2.常用解决办法:2.1 使用加签名方式,防止篡改数据2.2 使用Ht ...

  7. 开放平台API接口安全策略汇总

    在设计开放平台接口过程中,往往会涉及接口传输安全性相关的问题,本文对接口加密及签名的相关知识做了一个总结,在方便自己查阅的同时也分享给大家做一些参考. 接口安全性问题思考 接口安全性问题主要来源于几方 ...

  8. 如何使用OLAMI自然语言理解开放平台API制作自己的智能对话助手小程序

    我们经常在电影中看到机器和人对答如流,随着越来越多自然语言开放平台的出现,IT爱好者制作一个自己的APP或者小玩具等逐渐可以变为现实. 自然语言对话即你的APP或者你制作的工具.机器人等能够对用户输入 ...

  9. 微信开放平台API开发资料

    微信大概两年前开启了微信公众平台的API供开发者使用,从账号登陆.消息发送.用户账号管理.公众号菜单.客服接口.微信商店接口.用户卡券接口 以及微信支付接口.可以说是全方面覆盖了电商所需要的要素,与阿 ...

随机推荐

  1. vue生命周期理解

    https://segmentfault.com/a/1190000008010666?utm_source=tag-newest

  2. 解决移动端touch事件(touchstart/touchend) 的穿透问题

    情景: 我们在移动端点击事件click对比touchend会有很明显的300ms的延迟,为啥? 浏览器在 click 后会等待约300ms去判断用户是否有双击行为(手机需要知道你是不是想双击放大网页内 ...

  3. 杀死进程-LeetCode-582

    英文版 582. Kill ProcessGiven n processes, each process has a unique PID (process id) and its PPID (par ...

  4. window 命令行

    清屏 cls 启动服务 net start 服务名(nexus.mysql) 关闭服务 net stop 服务名(nexus.mysql) 删除服务 sc delete 服务名 如果服务名有空格,加引 ...

  5. Oracle AP更新供应商

    /*l_return_status:S l_msg_count:0 l_msg_data: l_vendor_id:133003 l_party_id:236055  */ DECLARE    l_ ...

  6. [翻译] NSRegexTester

    NSRegexTester This is a very simple Mac OS X application that allows you to test regular expressions ...

  7. @private、@protected与@public三者之间的区别

    @private.@protected与@public三者之间的区别 类之间关系图 @private只能够使用在声明的类当中,其子类也不能够使用用@private声明的实例变量 @protected只 ...

  8. consul日常操作命令

    #开发模式运行agent consul agent -dev #查看consul 集群成员 consul members [-detailed] members命令的输出基于gossip协议,并最终一 ...

  9. magento2 重置后台密码

    项目根目录:运行如下命令 bin/magento admin:user:create --admin-user="admin" --admin-password="123 ...

  10. November 20th 2016 Week 47th Sunday

    Learn from yesterday, live for today, look to tomorrow. 学习昨天,活在今天,展望明天. There is always room at the ...