用RJSONIO包调用天气数据

May 1, 2012
By

This post was kindly contributed by 数据科学与R语言 - go there to comment and to read the full post.


JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于阅读和编写,同时也易于机器解析和生成。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。目前有许多API服务提供了JSON的数据格式。

如果我们要在R语言中处理json数据,可以采用的扩展包有rjson和rjsonio两个包。从本人感觉来看,rjsonio包要更为友好一些,读取之后可以直接转为简单的list格式,方便调用数据。rjson的话也可以转为list,但其中层次关系复杂,不大方便处理。下面我们用一个例子来看看如何用RJSONIO包调用数据。我们希望编一个函数从wunderground的API调用本地城市的天气预报。其基本步骤如下:
  • 若用户未输入城市名,则根据本机IP地址来返回当地天气;
  • 若用户输入了城市名,则先用google API得到城市经纬度;
  • 再用经纬度作查询参数,来返回该城市天气。

运行函数的结果看起来就象下面这样:

> getweather('wuhan')
$城市
[1] "武漢市, Hubei"

$当前
[1] "20°C 晴"

$明天
[1] "27°C-18°C 可能有雨"

Google也有提供天气预报的API,但是数据不是很丰富。wunderground提供的数据则相当丰富,它的天气API也被数据源手册所推荐。该API也可以采用城市名称作为输入,但有时候不大灵光,所以转而用经纬度作输入参数。使用这个API还要注意一点,其免费账户的限制是每分钟10次调用,超出会有警告邮件发出来。

R代码如下:(RSS用户看不到代码,是因为代码存放在gist.github.com上,然后以js形式放在博客中,你可以点这里观看。另外如果要运行这个程度,需要将yourkey换成你自己申请的key,输入的城市名两边要加引号)

Tags: ,

Comments are closed.