第15章 Twitterデータ

PCを使ってオンラインの情報を取得することをクローリング、そこから必要な情報を得ることをスクレイピングと呼びます(きっと)。 しかし、大抵の場合は両者は一緒に行われるので、断りがない限り合わせてスクレイピングと呼ぶこととします。

API (Application Programming Interface) とはプログラミングによってアプリケーションを利用するための機能です。 いまいちよく分かりませんが、今回はTwitterのスクレイピングを例にAPIの使い方を紹介します。 とは言ってもRで直接APIを叩くのは大変なので、Rのパッケージを使いたいと思います。

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.3     ✓ purrr   0.3.4
## ✓ tibble  3.1.0     ✓ dplyr   1.0.5
## ✓ tidyr   1.1.3     ✓ stringr 1.4.0
## ✓ readr   1.4.0     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(rtweet)
## 
## Attaching package: 'rtweet'
## The following object is masked from 'package:purrr':
## 
##     flatten

15.1 事前準備

15.1.1 Twitterアカウントの作成

Twitterアカウントが必要なので作成します。

15.1.2 認証

実は、これまではAPIを使うためのアカウント認証がめんどくさかったのですがrtweetだと自動でやってくれるらしいです。 具体的には最初にrtweetの関数を使うと認証を求められるので、許可するだけです。

15.2 単語によるツイートの取得

serch_tweet()で単語で検索してツイートをスクレイピングしてくれます。 今回は新型コロナで100件取得してみます。

  • 一回につき最大で18000件まで取得できるそうです。
    • retryonratelimit = TRUEのオプションを設定すると上限を越えることができるそうです。
  • 不適切なツイートがあったらすいません。
tweets <- search_tweets("コロナ", n = 100)
tweets %>% 
  select(text)

いろいろありますがtext変数にツイートがあることがわかります。

15.3 ユーザーによるツイートの取得

get_timelines()では特定のユーザーのタイムラインを取得することができます。 例えば、ジョー・バイデンの公式アカウント@JoeBidenのツイートを取得するにはこのようにします。

tweets <- get_timelines("JoeBiden", n = 100)
tweets %>% 
  select(text)
  • もともと、ドナルド・トランプのアカウントを使っていましたが、BANされたので変更しました。

15.4 言語によるツイートの取得

ツイ廃の間では周知の事実だとは思いますが、ツイッターの検索クエリは(例えばこのような)オプションを付けることでより細かい指定をすることができます。 例えば、日本語のツイートのみを取得する場合は次のようにします。

tweets <- search_tweets("lang:jp", n = 100)
tweets %>% 
  select(text)

15.5 地域によるツイートの取得

特定の地域でつぶやかれたツイートのみを取得することもできます。

そのためには東京の地理情報を得るためにGoogle MapsのAPIに登録する必要があります。 まずは、Google Maps Platformに行き、登録します。 クレジットカード情報を入力しますが、一年間は無料で使え、期限後に自動請求されることは無いはずです。

登録を完了するとGoogle Cloud PlatformAPIとサービス内の認証情報API keyが表示されているので、それをコピペして例えばapikeyのようなオブジェクトにします。

例えば、東京でつぶやかれたツイートのみを取得する場合は次のようにします。

tweets <- search_tweets("", geocode = lookup_coords("tokyo", apikey = apikey), n = 100)
tweets %>% 
  select(text)

15.6 ライブストリームの取得

今からつぶやかれる全てのツイートからランダムサンプリングする場合はstream_tweets()を使います。 デフォルトでは30秒間のツイートを取得します。

tweets <- stream_tweets("", timeout = 5)
## Streaming tweets for 5 seconds...
## Finished streaming tweets!
tweets %>% 
  select(text)

15.6.1 地域のライブストリームの取得

しかし、全世界のツイートを欲しいという状況は少ないと思います。 例えば、東京でつぶやかれるツイートのみを取得したいとします。

tweets <- stream_tweets(geocode = lookup_coords("tokyo, jp", apikey = apikey), timeout = 5)
## Streaming tweets for 5 seconds...
## Finished streaming tweets!
tweets %>% 
  select(text)
  • 他にもキーワードやユーザーIDでも取得することができます(その場合はGoogle MapsのAPIキーは必要ありません)。
  • ツイート時間created_atはグリニッジ標準時で記録されているので、日本時間にするには9時間だけ足す必要があります。

15.7 その他の情報の取得

  • get_friends():特定のユーザーがフォローしているユーザーを取得する。
  • get_followers():特定のユーザーをフォローしているユーザーを取得する。
  • get_favarites():特定のユーザーのいいねを取得する。