先日太宰府に梅を見に行ったので記録を残したのだが、画像を表示できてないなど悔いが残った。 ということで画像を表示できるように改良した。 (@kazutanさんアドバイスありがとうございました!)

まずtwitterから位置情報をつけたtweetを抜き出す。

library("twitteR")
setup_twitter_oauth(options()$CONSUMER_KEY_AI, 
                    options()$CONSUMER_SECRET_AI,
                      options()$ACCESS_TOKEN_AI,
                      options()$ACCESS_SECRET_AI)
## [1] "Using direct authentication"
n_tweet <- 200
Tw <- userTimeline("dichika", n=n_tweet)
Gps <- do.call("rbind", lapply(Tw, 
                                     function(x)data.frame(
                                       id=x$id,
                                       text=x$text,
                                       time=x$created,
                                       lng=ifelse(length(x$longitude)>0, as.numeric(x$longitude), NA),
                                       lat=ifelse(length(x$latitude)>0, as.numeric(x$latitude), NA)
                                                                     ))
                     )

また画像も抜き出したいがtwitteRパッケージではinclude_entitiesパラメータを設定できないので関数を作る。

userTimelineEnt = function(user, n=20, maxID=NULL, sinceID=NULL, ...) {
  uParams <- parseUsers(user)
  cmd <- 'statuses/user_timeline'
  params <- twitteR:::buildCommonArgs(max_id=maxID, since_id=sinceID)
  params[['user_id']] <- uParams[['user_id']]
  params[['screen_name']] <- uParams[['screen_name']]
  params[["include_entities"]] <- "true"
  res <- doPagedAPICall(cmd, n, params, ...)
}
environment(userTimelineEnt) <- getNamespace("twitteR")

res <- userTimelineEnt("dichika", n_tweet)
Imgs <- do.call("rbind", lapply(res, function(x)data.frame(id=x$id,
                                          image_url=ifelse(length(x$entities$media[[1]]$media_url)>0,
                                                     x$entities$media[[1]]$media_url,
                                                     NA)
               ))
               )

GPSのあるデータに絞り、画像URLデータを結合する。

Gps <- subset(Gps, complete.cases(Gps))
Gps <- merge(Gps, Imgs)

popupにtweetを組み込み、リンクをを有効にする。

Gps$text <- as.character(Gps$text)
Gps$image_url <- as.character(Gps$image_url)

Gps$url <- gsub("(http://.+[[:alnum:]])", 
                      "<a href='\\1' target='_blank'>\\1</a>", 
                      Gps$text)
Gps$url <- sprintf('<html><body>%s<p><img border="0" src="%s" width="128" height="128" alt="hoge"><p>%s</body></html>', 
                   Gps$url,
                   Gps$image_url,
                   as.character(Gps$time)
                   )

leafletパッケージで可視化する。 popup内に画像を表示できたのでよしとする。

library("leaflet")
leaflet() %>% 
  addPolylines(data=Gps,
             lat= ~lat, 
             lng= ~lng) %>%
  addCircles(data=Gps,
             lat= ~lat, 
             lng= ~lng,
             radius=5, 
             popup=Gps$url
             ) %>% 
  addTiles()