用RJSONIO包挪用天气数据
当前位置:以往代写 > 其他教程 >用RJSONIO包挪用天气数据
2019-06-14

用RJSONIO包挪用天气数据

用RJSONIO包挪用天气数据

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,输入的都市名双方要加引号)

    # 加载所需扩展包 library(RCurl)library(RJSONIO)library(XML)# 成立一个按照网址提取天气预报的子函数fromurl<- function(finalurl) {  # 先读取网页,再理会JSON数据存在raw中    web <- getURL(finalurl)  raw <-fromJSON(web)  high <- raw$forecast$simpleforecast$forecastday[[2]]$high[‘celsius’]  low <- raw$forecast$simpleforecast$forecastday[[2]]$low[‘celsius’]  condition <- raw$forecast$simpleforecast$forecastday[[2]]$conditions  currenttemp <- raw$current_observation$temp_c  currentweather <- raw$current_observation$weather  city <- as.character(raw$current_observation$display_location[‘full’])  result <-list(city=city,current=paste(currenttemp,’°C ‘,currentweather,sep=”),    tomorrow=paste(high,’°C’,’-‘,low,’°C ‘,condition,sep=”))  names(result) <-c(‘都市’,’当前’, ‘来日诰日’)  return(result)    }# 提取天气预报的主函数getweather <- function(city=”) {  # 假如用户输入为空,则按照IP地点来查询  if (city == ”) {    finalurl <- ‘http://api.wunderground.com/api/yourkey/conditions/      forecast/lang:CN/q/autoip.json’   return(fromurl(finalurl))  # 不然就挪用google API,这时需要用XML包来理会数据获得经纬度    } else {    requestUrl<-paste(“http://maps.googleapis.com/maps/api/geocode/xml?address=”      ,city,”&sensor=false”, sep=””)   xmlResult<-xmlTreeParse(requestUrl,isURL=TRUE)   root <- xmlRoot(xmlResult)   lat <-xmlValue(root[[‘result’]][[‘geometry’]][[‘location’]][[‘lat’]])   lon <-xmlValue(root[[‘result’]][[‘geometry’]][[‘location’]][[‘lng’]])   url <- ‘http://api.wunderground.com/api/yourkey/conditions/forecast/lang:CN/q/’   # 将经纬度与其它信息相团结,形成查询地点    finalurl <- paste(url,as.character(lat),’,’,as.character(lon),’.json’,sep=”)   return(fromurl(finalurl))  }}

      关键字:

    在线提交作业