Yahoo Weather API

在拿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
select * from geo.placefinder where text="Guangzhou"

select * from geo.placefinder where text="北京"

select * from geo.placefinder where text="39.9919336,116.3404132"

Weather

这一步就简单了

1
select * from weather.forecast where woeid=2502265 and u="c"

这样就能拿到以摄氏度返回的天气了。

这里注意一点,天气的返回值里面有一个code,那个代表的是各种天气类型,暴风雨啊龙卷风啊冰雹啊之类的。

code 的 具体对照表可以参考 rss的雅虎天气api

Comments