2017-07-21 11 views
1

Google Places APIを使用している場所のリストがあります。場所によっては20以上の結果があります。そのような場所の例を以下に示します。最初の20日を超えて結果を得るには、最初のGoogle Places API呼び出しから取得した追加の「トークン」パラメータを使用して、GoogleプレイスへのAPI呼び出しを追加する必要があります。Sapply関数内で複数の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) 

     } 
} 

Sapply実行:

Output <- sapply(LatLongList, PullFromPlaces) 

答えて

0

でこのようなクエリの例を持っています。以下は、サプリまたはラップリーに投げる機能です。 radius、type、およびkeyパラメータはあらかじめ定義されています。

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

     } 

     } 
    }  
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" 
+0

ありがとうございましたSymbolixAU。これは良い最初のステップですが、40-60の結果の3番目のAPIプルと一緒に、1番目と2番目のAPIプルを組み合わせる方法についての提案があるのでしょうか?私はすべてを一度に引き出すことができるようにしたいと思います。 – Bdude11383

+0

@ Bdude11383 - 私はそれをまだ完全にはテストしていませんが、 'page_token'がなくなるまで繰り返し実行される何らかのループは有効ですか? – SymbolixAU

関連する問題