【问题标题】:Yelp V2 API Query Loop in RR 中的 Yelp V2 API 查询循环
【发布时间】:2015-02-09 20:34:01
【问题描述】:

我正在使用 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,依此类推。我不知道该怎么写。我想减少我相信的最大企业数量 1,000,并将它们添加到单个数据框中。下面是我的完整代码:

# 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)

【问题讨论】:

    标签: r yelp jsonlite


    【解决方案1】:

    “查询循环”的一般方法是将这些 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)
    

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

    【讨论】:

    • 谢谢。看起来扁平化数据会有点痛苦。我想单独的数据框会很好。您建议我如何组织每个 API 调用的结果?
    • Tbh,我会保存locationDataList.rawlocationDataList,将文件放在保管箱或某处,然后发布一个引用数据的新问题并询问如何rbind 数据帧。我偶然发现了类似的 json 问题,但从未找到完美的解决方案。但是,我相信专业人士已经得到了一个。
    猜你喜欢
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多