R:从 Tidyverse 中的 Google 地点中提取信息



我有一个包含位置的数据框,我想在管道解决方案中将电话号码和网站从 Google 地方信息附加到这些位置。

我最接近这样做的是使用 googleway ,取消列出 JSON 并使用正则表达式提取地点 ID,然后再次对电话号码和电子邮件地址执行相同的操作。有没有更有针对性的方法?

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 调用。

相关内容

  • 没有找到相关文章

最新更新