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
). Например, выберите интересующие вас столбцы. Но это была бы другая история.