我有一个我正在加入Google Places API的位置列表。有些地方有20多个结果。我在下面提供一个这样的位置示例。要获得超过前20个的结果,您必须对Google地方信息进行额外的API调用,并使用从第一个Google Places API调用获得的额外“令牌”参数。
使用以下有缺陷的函数,我正在尝试执行额外的API调用,具体取决于是否需要获取其他结果。当前函数生成NULL值。任何有关纠正此功能的帮助都将受到高度赞赏。
列入要加入Sapply:
LatLongList <- as.list("42.36354942,-71.06396087")
Sapply功能:
library(RCurl)
library(tidyjson)
library(magrittr)
library(dplyr)
PullFromPlaces <- function(x) {
url = paste0("https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=",x,"&radius=",radius_meters,"&types=",type,"&key=",key)
payload_json <- getURL(url)
next_page_token <- payload_json %>%
as.tbl_json %>%
enter_object("next_page_token")
next_page_token <- as.character(attr(next_page_token,"JSON"))
if (length(next_page_token) != 0) {
url = paste0("https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=",x,"&radius=",radius_meters,"&types=",type,"&pagetoken=",next_page_token,"&key=",key)
payload_json <- getURL(url)
}
}
执行:
Output <- sapply(LatLongList, PullFromPlaces)
答案 0 :(得分:1)
我在vignette of my googleway
package
library(googleway)
api_key <- 'your_api_key'
myLocation <- c(42.36354942, -71.06396078)
myPlaces <- google_places(location = myLocation,
radius = 500,
key = api_key)
nextPlaces <- google_places(location = myLocation,
radius = 500,
page_token = myPlaces$next_page_token,
key = api_key)
myPlaces$results$name
# [1] "Boston" "Kimpton Onyx Hotel"
# [3] "Holiday Inn Express Hotel & Suites Boston Garden" "Wyndham Boston Beacon Hill"
# [5] "The Boxer Boston Hotel" "Whole Foods Market"
# [7] "The Liberty, a Luxury Collection Hotel, Boston" "Massachusetts General Hospital"
# [9] "TD Garden" "Sugarman, Rogers, Barshak & Cohen, P.C."
# [11] "Dr. Richard J. Deasla, MD" "Massachussetts General Hospital"
# [13] "Massachusetts General Hospital: Temel Jennifer S MD" "Vrahas Mark Steven MD"
# [15] "Harry E. Rubash, MD" "Dr. Ziv Williams, MD"
# [17] "CCRM Boston" "Domino's Pizza"
# [19] "Massachusetts General Hospital: Yeh Sunu Susan MD" "North End"
nextPlaces$results$name
# [1] "Massachusetts General Hospital: Ryan Colleen MD" "Warshaw Andrew L MD"
# [3] "Massachusetts General Hospital: Althausen Anne M MD" "Massachusetts General Hospital: Shipley William MD"
# [5] "Massachusetts General Hospital: Feldman Adam S MD" "Massachusetts General Hospital: Packard Swift Alison MD"
# [7] "Dr. Nahel Elias, MD" "Dr. Steven L. Mcafee, MD"
# [9] "Dr. Charles A. Welch, MD" "Massachusetts General Hospital: Kilbride Ronan D MD"
# [11] "Massachusetts General Hospital: Garasic Joseph Mich MD" "Massachusetts General Hospital: Akins Cary W MD"
# [13] "Dr. Edwin C. Huang, MD" "Massachusetts General Hospital: Davis Benjamin T MD"
# [15] "Massachusetts General Hospital: Levins Paul C MD" "Massachusetts General Hospital: Passeri Jonathan MD"
# [17] "Massachusetts General Hospital: Weil Michelle MD" "Massachusetts General Hospital: Steele David John MD"
# [19] "Massachusetts General Hospital: Chae Claudia U MD" "Massachusetts General Hospital: Connolly Thomas Jose MD"
答案 1 :(得分:0)
我明白了。下面是投入sapply或lapply的函数。半径,类型和关键参数是预先定义的。
library(jsonlite)
library(RCurl)
library(tidyjson)
library(magrittr)
library(stringr)
library(plyr)
library(dplyr)
PullFromPlaces <- function(x) {
url = paste0("https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=",x,"&radius=",radius_meters,"&types=",type,"&key=",key)
payload_json <- getURL(url)
next_page_token <- payload_json %>%
as.tbl_json %>%
enter_object("next_page_token")
next_page_token <- as.character(attr(next_page_token,"JSON"))
if (length(next_page_token) == 0) {
payload_json <- data.frame(payload_json,stringsAsFactors = FALSE)
} else {
Sys.sleep(2)
url2 = paste0("https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=",x,"&radius=",radius_meters,"&types=",type,"&pagetoken=",next_page_token,"&key=",key)
payload_json2 <- getURL(url2)
next_page_token <- payload_json2 %>%
as.tbl_json %>%
enter_object("next_page_token")
next_page_token <- as.character(attr(next_page_token,"JSON"))
if (length(next_page_token) == 0) {
payload_json <- rbind_pages(list(data.frame(payload_json,stringsAsFactors = FALSE),data.frame(payload_json2,stringsAsFactors = FALSE)))
} else {
Sys.sleep(2)
url3 = paste0("https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=",x,"&radius=",radius_meters,"&types=",type,"&pagetoken=",next_page_token,"&key=",key)
payload_json3 <- getURL(url3)
payload_json <- rbind_pages(list(data.frame(payload_json,stringsAsFactors = FALSE),data.frame(payload_json2,stringsAsFactors = FALSE),data.frame(payload_json3,stringsAsFactors = FALSE)))
}
}
}