先日太宰府に梅を見に行ったので記録を残したのだが、画像を表示できてないなど悔いが残った。 ということで画像を表示できるように改良した。 (@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()