在拿inSysu做实验的时候,发现以前一直在用的腾讯天气的API关闭了。就去找了一下其他的天气API,然后发现大家推荐的中国天气网的API太不科学了。我想请求一次天气需要:
- 拿到经纬度
- 地理反查询拿到城市
- 查表获取地区代号
- 用代号调用API查询天气。
看起来还好,但是那个查表的过程,实在是太猎奇了,也没什么文档。
之后去对比了一下国外服务,看到的要么就是严重不准确,要么就是收费的如Google、Weather.com,我一个公益项目这样太不值了。
选来选去,就使用和iOS一样的数据提供商雅虎吧,虽说也不怎么省事。
Yahoo Query Language
雅虎天气的API有两套,我们这里选择这个看起来高大上的YQL API。
实际上就是把SQL URLEncode一下,扔到了HTTP GET的参数中。
一个Query的结构参数如下
参数名 | 参数值 | |
---|---|---|
q | YQL 查询语句 | |
Diagnostics | true/false | |
format | json/xml |
可以在雅虎提供的控制台里面模拟操作
Where On Earth IDentifier
雅虎天气是通过 WOEID来返回天气的,那么首先我们先要知道我们所在地点的WOEID。
雅虎也提供了这个查询机制,而且很方便对应的终端是http://developer.yahoo.com/yql/console/?debug=true#h=select+*+from+geo.placefinder+where+text%3D%22sfo%22
这里text键值可以用 中文、英文、经纬度。如
1 2 3 4 5 | |
Weather
这一步就简单了
1
| |
这样就能拿到以摄氏度返回的天气了。
这里注意一点,天气的返回值里面有一个code,那个代表的是各种天气类型,暴风雨啊龙卷风啊冰雹啊之类的。
code 的 具体对照表可以参考 rss的雅虎天气api…