2017年6月4日 星期日

取得台北火車站附近最熱門的打卡點 (留給自己參考)

* 參考來源:苗栗最熱門的打卡點? Andrew Tang

  • 修改:
    • gcode將"台北車站"字串以iconv從big5編碼為utf8
    • 取得個地點打卡次數時,順便將location寫入fields取回lat, lng等地理座標資訊
install.packages("ggmap")
install.packages("leaflet")
install.packages("DT")
install.packages("jsonlite")
install.packages("curl")
install.packages("dplyr")

library(ggmap)
library(leaflet)
library(DT)
options(stringsAsFactors = F)

(myplace <- geocode(iconv("台北車站", "big5", "utf8")))
顯示台北火車站座標結果
      lon      lat
1 121.517 25.04774
繪製出台北火車站方圓5公里(radius=5000)的範圍
leaflet() %>% addTiles() %>% 
  fitBounds(0, 40, 10, 50) %>% 
  setView(myplace$lon, myplace$lat, zoom = 12) %>% 
  addCircles(myplace$lon, myplace$lat, radius = 5000)
台北火車站方圓5公里
至Facebook 圖形API測試工具 取得程式權杖(token)
library(jsonlite)
經緯度 <- paste(myplace$lat, myplace$lon, sep=",")
方圓幾公尺 <- 5 * 1000
token <- "EAACEdEose0(略)ppeaL"
url <- sprintf("https://graph.facebook.com/search?type=place¢er=%s&distance=%s&limit=50000&access_token=%s", 經緯度, 方圓幾公尺, token)

tmp <- fromJSON(url)
result <- tmp$data[c("category","name","id")]
while(!is.null(tmp$paging$`next`)){
  tmp <- fromJSON(tmp$paging$`next`)
  result <- rbind(result, tmp$data[c("category","name","id")])
}

datatable(result, 
          extensions = 'Scroller', options = list(
          deferRender = TRUE,
          scrollY = 500,
          scroller = TRUE
        ))
##執行結果

取得每個地點的 名稱(name)、打卡數(checkins)、地點類別(category)、和座標資料(location)
library(dplyr)
fields <- "name,checkins,category,location"
checkin <- sapply(result$id, function(id){
  url <- sprintf("https://graph.facebook.com/%s?fields=%s&access_token=%s", id, fields, token)
  #unlist(fromJSON(url))
  fromJSON(url)
})

mycheckin <- as.data.frame(t(checkin))
mycheckin$checkins <- as.integer(mycheckin$checkins)
mycheckin <- mycheckin[order(mycheckin$checkins, decreasing = T),]
row.names(mycheckin) <- NULL
datatable(mycheckin, 
          extensions = 'Scroller', options = list(
          deferRender = TRUE,
          scrollY = 200,
          scroller = TRUE
        ))
##執行結果
#