R: Извлечение информации из Google Мест в пределах Tidyverse - PullRequest
0 голосов
/ 12 июня 2019

У меня есть фрейм данных с местоположениями, и я хочу добавить к ним номера телефонов и веб-сайты из Google Мест на карте в подходящем решении.

Самым близким, что я получил для этого, было использование googleway, распечатка JSON и использование регулярных выражений для извлечения идентификатора места, и повторение того же для телефонных номеров и адресов электронной почты.Есть ли более целевой способ сделать это?

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()

1 Ответ

0 голосов
/ 12 июня 2019

Я сомневаюсь, что есть.Это двухэтапный процесс на стороне Google API (см. Документацию: https://developers.google.com/places/web-service/details):

Вам необходимо:

  • получить уникальный placeid (с помощью вызова поиска места))
  • получить контактную информацию для вашего placeid (с помощью вызова "Сведения о месте")

Возможно, у вас будет больше контроля над процессом, если вы вставили свой URL-адрес и выполнили его через httr(Google API известен тем, что вносит изменения, и R-пакетам трудно идти в ногу с этим), и вы можете обернуть некрасивый кусок кода в свою собственную функцию, сделав вызов аккуратным - но в конечном итоге это должны быть 2 вызова API.

...