からっぽのしょこ

読んだら書く!書いたら読む!同じ事は二度調べ(たく)ない

rtweetパッケージを使ってツイートを収集しようとしたら何かエラーが出たのでその対処法など

はじめに

 Twitterの開発者アカウントを作成しAPIも無事取得できたのに、Rでツイートを集めようとしたら詰まってしまい、解決策を調べても日本語の記事があまり引っかからなかったので記事として残しておきます。

 rtweetパッケージを使ってR言語でツイートデータをスクレイピングします。と、エラーの回避策です。


ツイートを集める

・APIを取得する(エラー発生と対処)

詳しい記事がたくさんあるのでそっちを見てね。Twitter APIの仕様が変わったようなので、それ以降の記事を参考にするのが良いと思われる。
APIを利用するには、英語300文字以上で利用を目的を書き審査に通らなければ…と思っていたら、待ち時間ゼロで即取得できた。

しかし、記事の下半分でする説明のようにRでこのAPIを使おうとしたら、エラーが発生した。ので、まずはその対処から。

> twitter_token <- create_token(app, consumer_key, consumer_secret)
Error in twitter_init_oauth1.0(self$endpoint, self$app, permission = self$params$permission,  : 
  Unauthorized (HTTP 401).

色々調べたところ次のようにすればいいとのこと。
Twitter開発者ページ(https://developer.twitter.com/en.html)の右上のアカウント名のところから「Apps」>「Details」>「Edit」>「Callback URL1」を「http://127.0.0.1:1410」と設定する。(ところでこれって何なの??)

f:id:anemptyarchive:20190304185616p:plain
App detail編集画面
詳しくは下のサイトをご参照ください。(公式サイト??)
rtweet.info

・rtweetパッケージを使うための設定

まずはrtweetパッケージcreate_token()でAPIキーの設定を行う。

library(rtweet)

app <- "自分のApp name"
consumer_key <- "自分のAPI key"
consumer_secret <- "自分のAPI secret key"
create_token(app , consumer_key, consumer_secret)
# あるいはこう
create_token(app = "自分のApp name", consumer_key = "自分のAPI key", consumer_secret = "自分のAPI secret key")
# こうでもいい
create_token("自分のApp name", "自分のAPI key", "自分のAPI secret key")

自分が分かりやすいようにご自由にどうぞ!あとtwitter_token <- create_token()としてる場合もあったので、うまくいかなければ試してみてね。

すると

Waiting for authentication in browser...
Press Esc/Ctrl + C to abort

とコンソールに表示され、ブラウザが立ち上がる。(アプリなどでよく見るやつ。App云々の設定時に記入した内容が色々表示されている)

f:id:anemptyarchive:20190304162538p:plain
ブラウザ画面
他のアプリとの連携時と同様に、Twitterアカウントでログインして「連携アプリを認証」する。

Authentication complete.

R側のコンソールには上のように表示され、ブラウザには下のように表示される。

f:id:anemptyarchive:20190304163306p:plain
ブラウザ画面
これで設定はOK!

・ツイート収集

# 検索ワード指定でツイートを取得
tw_data <- search_tweets("検索ワード", n = 1000, include_rts = FALSE)

# アカウント指定でツイートを取得
tw_data <- get_timeline("アカウントID", n = 1000, include_rts = FALSE)

search_tweets()では指定した語句を含むツイートを拾ってくる。この関数でもアカウントを指定してツイートを取得できるが、投稿者としてだけでなくリプ先となっているツイートも拾ってくる模様。
get_timeline()では指定したアカウントのツイートを拾ってくる。
n =で集めるツイート数をinclude_rts =でリツイートを含めるか(デフォルトはTRUE)を指定できる。

f:id:anemptyarchive:20190304185925p:plain
取得データ
取得したデータにはツイート内容だけでなく、その投稿の日時やリツイート数なども含まれている。ので、

# テキストデータのみを抽出
tw_text <- tw_data$text

f:id:anemptyarchive:20190304191549p:plain
ツイートテキスト
として、テキストデータを抽出する。

以上!

おわりに

 抽出したテキストデータをどう活用するのかはまたいずれ、、
 最初はtwitteRパッケージを使うつもりだったのですが、似たようなエラーでうまくいかなかったのでどうすればいいのやら。パッケージの開発が終了するとか何とかということなので、このままrtweetの方を使えばいいのだろうか。時間をかけて解決できなかった時のもやもや感といったら…。
 その前にも、API取得には審査があると思っていたので、Google翻訳を駆使しつつ申請して数日間ドキドキ返信メールを待っていたのですが、何かおかしいと調べ直してみたら私は開発者アカウントとやらを作っただけで止まっており、数日ぶりに進めると特に審査もなく即発行されたとネタが尽きない右往左往っぷりでしたね。

 話は変わって、先月は色々あってブログ更新が丸1か月あいてしまいました…。勉強は進まずともやりたいことは増えていくのでもどかしい日々でした。何事ももっとうまくやりたいものです。
 暫く著者推定・文書分類的なことをやっていてシリーズ的に書いていた記事が現在ひと月止まっているわけですが、近頃トピックモデルの勉強を始めたり、そしてTwitter分析にも手を出してみたりとうまくできるわけがねー笑

 という訳で次は一体何を書くのでしょう??分かりません。最後まで読んでいただきありがとうございます!また次もよろしくお願いします。


  1. アプリ等の連携認証後に戻ってくるページのこと(ざっくり)