如何在R中迭代url?

如何在R中迭代url?,r,google-maps,search,google-api,logic,R,Google Maps,Search,Google Api,Logic,我正在尝试遍历具有不同坐标的url。我想迭代的url是GoogleAPI文本搜索 这是TextSearchURL及其参数的示例。我需要迭代location参数 我有一个包含纬度和经度列的数据框。假设它被称为绳索 使用语言R,我想做如下事情: for i in 1:length(Cords$lat){ lat = Cords$lat[i] lon = Cords$lon[i] https://maps.googleapis.com/maps/api/place/text

我正在尝试遍历具有不同坐标的url。我想迭代的url是GoogleAPI文本搜索

这是TextSearchURL及其参数的示例。我需要迭代location参数

我有一个包含纬度和经度列的数据框。假设它被称为绳索

使用语言R,我想做如下事情:

for i in 1:length(Cords$lat){
    lat = Cords$lat[i]
    lon = Cords$lon[i] 
    https://maps.googleapis.com/maps/api/place/textsearch/json?query=123+main+street&location=lat,lon&radius=10000&key=YOUR_API_KEY
}

我将每次迭代存储在另一个数据框中,但没有包含该代码。

您可以使用
粘贴功能构建URL

Coords <- data.frame(lat = c(1.234, 2.456, 3.456), lon = c(5.678, 6.789, 7.890))

for (i in 1:length(Coords$lat)){
  lat = Coords$lat[i]
  lon = Coords$lon[i] 
  url <- paste('https://maps.googleapis.com/maps/api/place/textsearch/json?query=123+main+street&location=',
lat, ',', lon, '&radius=10000&key=YOUR_API_KEY', sep = "")
  print(url)
}

[1] "https://maps.googleapis.com/maps/api/place/textsearch/json?query=123+main+street&location=1.234,5.678&radius=10000&key=YOUR_API_KEY"
[1] "https://maps.googleapis.com/maps/api/place/textsearch/json?query=123+main+street&location=2.456,6.789&radius=10000&key=YOUR_API_KEY"
[1] "https://maps.googleapis.com/maps/api/place/textsearch/json?query=123+main+street&location=3.456,7.89&radius=10000&key=YOUR_API_KEY"

Coords您可以使用
paste
功能构建URL

Coords <- data.frame(lat = c(1.234, 2.456, 3.456), lon = c(5.678, 6.789, 7.890))

for (i in 1:length(Coords$lat)){
  lat = Coords$lat[i]
  lon = Coords$lon[i] 
  url <- paste('https://maps.googleapis.com/maps/api/place/textsearch/json?query=123+main+street&location=',
lat, ',', lon, '&radius=10000&key=YOUR_API_KEY', sep = "")
  print(url)
}

[1] "https://maps.googleapis.com/maps/api/place/textsearch/json?query=123+main+street&location=1.234,5.678&radius=10000&key=YOUR_API_KEY"
[1] "https://maps.googleapis.com/maps/api/place/textsearch/json?query=123+main+street&location=2.456,6.789&radius=10000&key=YOUR_API_KEY"
[1] "https://maps.googleapis.com/maps/api/place/textsearch/json?query=123+main+street&location=3.456,7.89&radius=10000&key=YOUR_API_KEY"

Coords这只是在乞求一个函数包装器。此外,这个答案使用了
sprintf()
vs
paste()
,并将API视为实际的API与粘贴的URL字符串,并试图帮助避免在脚本中使用裸API键:

library(httr)
library(jsonlite)
library(purrr)

find_places <- function(query, lon, lat, radius, api_key=Sys.getenv("GOOGLE_API_KEY")) {

  res <- GET("https://maps.googleapis.com/maps/api/place/textsearch/json",
             query=list(query=query,
                        location=sprintf("%s,%s", lat, lon),
                        radius=radius,
                        key=api_key))

  fromJSON(content(res, as="text"), flatten=TRUE)

}

df <- data.frame(lat=c(42.3675294, 43.6615, 43.2081),
                 lon=c(-71.186966, -70.2553, 71.5376))

map2(df$lon, df$lat, ~find_places("123 Main St", .x, .y, 10000)) %>% 
  map_df(out, "results") -> places

dplyr::glimpse(places)
## Observations: 11
## Variables: 18
## $ formatted_address               <chr> "123 Main St, Watertown, MA 02472, USA"...
## $ icon                            <chr> "https://maps.gstatic.com/mapfiles/plac...
## $ id                              <chr> "b2ac1cc162773261571dd4b939b2e6c7ce4cb0...
## $ name                            <chr> "123 Main St", "123 Main St", "123 Main...
## $ place_id                        <chr> "ChIJ3aqMmgZ444kRgD5YevF7_tc", "EioxMjM...
## $ reference                       <chr> "CmRbAAAAo1HUpDIAKtCjc1DCe366g0ehMA_Od5...
## $ types                           <list> ["street_address", "street_address", "...
## $ geometry.location.lat           <dbl> 42.36753, 43.63520, 43.67802, 42.36753,...
## $ geometry.location.lng           <dbl> -71.18697, -70.28722, -70.33530, -71.18...
## $ geometry.viewport.northeast.lat <dbl> 42.36771, 43.63521, 43.67804, NA, 41.98...
## $ geometry.viewport.northeast.lng <dbl> -71.18689, -70.28721, -70.33529, NA, -8...
## $ geometry.viewport.southwest.lat <dbl> 42.36698, 43.63519, 43.67801, NA, 41.98...
## $ geometry.viewport.southwest.lng <dbl> -71.18720, -70.28724, -70.33530, NA, -8...
## $ photos                          <list> [NULL, NULL, NULL, <2112, <a href="htt...
## $ rating                          <dbl> NA, NA, NA, 4.7, 4.6, 4.5, 4.2, NA, 4.5...
## $ price_level                     <int> NA, NA, NA, NA, NA, 2, NA, NA, NA, NA, NA
## $ opening_hours.open_now          <lgl> NA, NA, NA, FALSE, FALSE, FALSE, NA, NA...
## $ opening_hours.weekday_text      <list> [NULL, NULL, NULL, [], [], [], NULL, N...
库(httr)
图书馆(jsonlite)
图书馆(purrr)

find_places这只是在乞求一个函数包装器。此外,这个答案使用了
sprintf()
vs
paste()
,并将API视为实际的API与粘贴的URL字符串,并试图帮助避免在脚本中使用裸API键:

library(httr)
library(jsonlite)
library(purrr)

find_places <- function(query, lon, lat, radius, api_key=Sys.getenv("GOOGLE_API_KEY")) {

  res <- GET("https://maps.googleapis.com/maps/api/place/textsearch/json",
             query=list(query=query,
                        location=sprintf("%s,%s", lat, lon),
                        radius=radius,
                        key=api_key))

  fromJSON(content(res, as="text"), flatten=TRUE)

}

df <- data.frame(lat=c(42.3675294, 43.6615, 43.2081),
                 lon=c(-71.186966, -70.2553, 71.5376))

map2(df$lon, df$lat, ~find_places("123 Main St", .x, .y, 10000)) %>% 
  map_df(out, "results") -> places

dplyr::glimpse(places)
## Observations: 11
## Variables: 18
## $ formatted_address               <chr> "123 Main St, Watertown, MA 02472, USA"...
## $ icon                            <chr> "https://maps.gstatic.com/mapfiles/plac...
## $ id                              <chr> "b2ac1cc162773261571dd4b939b2e6c7ce4cb0...
## $ name                            <chr> "123 Main St", "123 Main St", "123 Main...
## $ place_id                        <chr> "ChIJ3aqMmgZ444kRgD5YevF7_tc", "EioxMjM...
## $ reference                       <chr> "CmRbAAAAo1HUpDIAKtCjc1DCe366g0ehMA_Od5...
## $ types                           <list> ["street_address", "street_address", "...
## $ geometry.location.lat           <dbl> 42.36753, 43.63520, 43.67802, 42.36753,...
## $ geometry.location.lng           <dbl> -71.18697, -70.28722, -70.33530, -71.18...
## $ geometry.viewport.northeast.lat <dbl> 42.36771, 43.63521, 43.67804, NA, 41.98...
## $ geometry.viewport.northeast.lng <dbl> -71.18689, -70.28721, -70.33529, NA, -8...
## $ geometry.viewport.southwest.lat <dbl> 42.36698, 43.63519, 43.67801, NA, 41.98...
## $ geometry.viewport.southwest.lng <dbl> -71.18720, -70.28724, -70.33530, NA, -8...
## $ photos                          <list> [NULL, NULL, NULL, <2112, <a href="htt...
## $ rating                          <dbl> NA, NA, NA, 4.7, 4.6, 4.5, 4.2, NA, 4.5...
## $ price_level                     <int> NA, NA, NA, NA, NA, 2, NA, NA, NA, NA, NA
## $ opening_hours.open_now          <lgl> NA, NA, NA, FALSE, FALSE, FALSE, NA, NA...
## $ opening_hours.weekday_text      <list> [NULL, NULL, NULL, [], [], [], NULL, N...
库(httr)
图书馆(jsonlite)
图书馆(purrr)

查找@hrbrmstr暗指的位置/链接,您可以使用我的
谷歌之路
软件包,它为您包装了谷歌位置API(以及其他各种API)


正如@hrbrmstr所暗示/链接到的,您可以使用我的
googleway
包,它为您包装了googleplaces API(以及其他各种API)