R中的Yelp V2 API查询循环

时间:2015-02-09 20:34:02

标签: r yelp jsonlite

我在R中使用Yelp API来推卸一些业务。根据我在文档中阅读的内容,每个API调用最多可以下载20个业务,但是如果使用offset =参数,则基本上可以提取更多记录。

我尝试做的是创建一个简单的循环来创建多个API调用,并使用offset =参数的递增值。

例如 - 第一个API调用如下所示:

yelpURL <- paste0("http://api.yelp.com/v2/search/?limit=20&offset=20&sort=0&term=food&location=Chicago")

下一个调用的偏移量为20,然后是40,60,80,依此类推。我不知道怎么写这个。我想降低我认为的1000个企业的最大数量,并将它们添加到单个数据框中。以下是我的完整代码:

# yelp credentials
consumerKey = "xxxxxxx"
consumerSecret = "xxxxxxx"
token = "xxxxxxx"
tokenSecret = "xxxxxxx"

require(httr)
myApp <- oauth_app("YELP", key=consumerKey, secret=consumerSecret)
mySignature <- sign_oauth1.0(myApp, token=token, token_secret=tokenSecret)


yelpURL <- paste0("http://api.yelp.com/v2/search/?limit=20&offset=20&sort=0&term=food&location=Chicago")
locationData <- GET(yelpURL, mySignature)

require(jsonlite)
locationDataContent = content(locationData)
locationList=jsonlite::fromJSON(toJSON(locationDataContent))
results <- data.frame(locationList)

1 个答案:

答案 0 :(得分:1)

您的&#34;查询循环的一般方法&#34;可能是将这些URL读入列表,将每个json输入转换为数据帧,最后将所有列出的数据帧合并到一个组合数据框中:

locationDataList.raw <- lapply(sprintf("http://api.yelp.com/v2/search/?limit=20&offset=%d&sort=0&term=food&location=Chicago", 
                                       seq(0, 60, 20)), 
                               GET, mySignature)
locationDataList <- lapply(locationDataList.raw, function(locationData) {
  locationDataContent = content(locationData)
  locationList=jsonlite::fromJSON(toJSON(locationDataContent))
  return(data.frame(locationList))
})
result <- do.call(rbind, locationDataList)

然而,要将它们添加到单个数据框中并且#34;在合并(rbind)之前,您可能必须展平/整理数据。例如。选择感兴趣的列。但这将是另一个故事。