Yelp V2 API Query Loop в R

Я использую Yelp API в R, чтобы разрушить некоторые компании. Из того, что я прочитал в документации, вы можете использовать до 20 предприятий на один вызов API, однако, если вы используете параметр 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 ответ

Общий подход к вашему "циклу запросов" может состоять в том, чтобы прочитать эти 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). Например, выберите интересующие вас столбцы. Но это была бы другая история.

Другие вопросы по тегам