R:从 Tidyverse 中的 Google 个地方提取信息
R: Extracting information from Google Places within the Tidyverse
我有一个包含位置的数据框,我想从 管道 解决方案中的 Google 位置向它们附加 phone 数字和网站。
我最接近的做法是使用 googleway
,取消列出 JSON 并使用正则表达式提取地点 ID,然后对 phone 再次执行相同操作号码和电子邮件地址。有没有更有针对性的方法呢?
library(googleway)
library(tidyverse)
set_key("api")
index_no <- c(1,2,3,4)
landmark<- c("Sydney Opera House","Eiffel Tower","Empire State Building","Big Ben")
df <- data.frame(index_no,landmark, stringsAsFactors = F)
df %>%
rowwise() %>%
# Place IDs are required for the function beneath
do(data.frame(., place_id = unlist(google_places(search_string = .$landmark)))) %>%
# Place IDs are 27 chars
filter(grepl("^\S{27}$", place_id )) %>%
do(data.frame(., details = unlist(google_place_details(place_id = .$place_id )))) %>%
unique() %>%
# Gets non-Google URls and Phone Numbers
filter(grepl("(?!.*(google|maps))(^https?.*|^\+\d)", details, perl = T )) %>%
group_by(landmark) %>%
mutate(seq = 1:n()) %>%
spread(seq, details) %>%
rename(phone_number = `1`, website = `2`) %>%
select(-place_id) %>%
ungroup()
我怀疑有。这是 Google API 旁边的两步过程(请参阅文档:https://developers.google.com/places/web-service/details):
您需要:
- 获得唯一
placeid
(通过地点搜索调用)
- 获取您的
placeid
的详细联系信息(通过地点详情电话)
如果您自己粘贴 url 并通过 httr 执行它,您可能会更好地控制该过程(Google API 以破坏性更改而闻名,而 R 很难包来跟上),你可以将丑陋的代码片段包装在你自己的函数中,使调用整洁——但最终它必须是 2 API 次调用。
我有一个包含位置的数据框,我想从 管道 解决方案中的 Google 位置向它们附加 phone 数字和网站。
我最接近的做法是使用 googleway
,取消列出 JSON 并使用正则表达式提取地点 ID,然后对 phone 再次执行相同操作号码和电子邮件地址。有没有更有针对性的方法呢?
library(googleway)
library(tidyverse)
set_key("api")
index_no <- c(1,2,3,4)
landmark<- c("Sydney Opera House","Eiffel Tower","Empire State Building","Big Ben")
df <- data.frame(index_no,landmark, stringsAsFactors = F)
df %>%
rowwise() %>%
# Place IDs are required for the function beneath
do(data.frame(., place_id = unlist(google_places(search_string = .$landmark)))) %>%
# Place IDs are 27 chars
filter(grepl("^\S{27}$", place_id )) %>%
do(data.frame(., details = unlist(google_place_details(place_id = .$place_id )))) %>%
unique() %>%
# Gets non-Google URls and Phone Numbers
filter(grepl("(?!.*(google|maps))(^https?.*|^\+\d)", details, perl = T )) %>%
group_by(landmark) %>%
mutate(seq = 1:n()) %>%
spread(seq, details) %>%
rename(phone_number = `1`, website = `2`) %>%
select(-place_id) %>%
ungroup()
我怀疑有。这是 Google API 旁边的两步过程(请参阅文档:https://developers.google.com/places/web-service/details):
您需要:
- 获得唯一
placeid
(通过地点搜索调用) - 获取您的
placeid
的详细联系信息(通过地点详情电话)
如果您自己粘贴 url 并通过 httr 执行它,您可能会更好地控制该过程(Google API 以破坏性更改而闻名,而 R 很难包来跟上),你可以将丑陋的代码片段包装在你自己的函数中,使调用整洁——但最终它必须是 2 API 次调用。