まえまえから思っていたんですが、まったく手をつけられていませんでした。ただ、年末という非常にツイートデータが大量に手に入る時期なのでやるのは今だと思ってやります。ただいろいろやっている人もいるので、大した違いはないかなと思います。
Twitterアプリの作成
【注意】もしすでに作成済みのアプリがあるようであれば、そちらを使ったほうが時間がかなり短縮できるのでオススメです。
以前にもTwitterアプリを作成したのでそれが参考になるかなと思います。
ただ、UIがちょっと変わっているかなと思いますので久しぶりに作成してみます。
Twitterにログインしている状態で以下のURLへいくと新規アプリ作成(アプリ一覧)ページに遷移します。 過去エントリの参考のURLからでも行けるようになっていますが、URLは今後変わるので新しいものを記載しています。
https://developer.twitter.com/en/apps
ページにはこれまでに作成したTwitterアプリの一覧が表示されます。
画面右上にある【Create an app】ボタンをクリックすると
確認のダイアログが表示されるので【Apply】ボタンをクリックします。
以前はアカウントに携帯電話番号の登録することなくアプリの作成ができましたが、現在ではできないようなので以下の画面が出た場合には登録する必要があります。 【Add a valid phone number】ボタンをクリックして登録を行います。
クリックするとダイアログが表示されるので【Country/region】と【Phone/number】のプルダウンご自身の設定値を適切に入力して【Next】ボタンをクリックします。
確認用コードの送信ダイアログになります。この時点で携帯電話のSMS経由で確認用コードが送信されるので、そこで表示された数字列を【Verification code】の入力ボックスに 入力して【Verify】ボタンをクリックします。
確認が成功すると以下のような通知が表示されます。
携帯での本人確認が終了したら画面表示がもとに戻るので【Continue】ボタンをクリックして作業を続けます。 ここからアプリの設定になります。
Who are you requesting access for?
の質問には【I am requesting access for my own personal use】のラジオボタンにチェックし、
残りの項目へ入力していきます。
設定が完了したら、画面下の方にある【Continue】ボタンをクリックします。
続くページでも作成の理由などを詳細に書く必要があります。 特に自由記述の文面を各部分もありハードルは上がっています。
設定が終わったら【Continue】ボタンをクリックします。
画面が利用許諾のページになるので、文面を確認してチェックボックスにチェックを入れます。 ※許諾の文面をスクロールさせてすべて閲覧しないとチェックボックスが押せないので注意です。
チェックができると【Submit application】ボタンがアクティブになるので、クリックします。
これで設定が終わったので、確認用のメールが送信されるので【Confirm your email】をクリックしてください。
ここからレビューして作成が可能になるとのことです。
アプリ作成で手順がかなり増えたような… これでメールが返送されてきたらアプリの作成作業に入ります。
以下のURLをクリックして https://developer.twitter.com/en/apps
アプリ一覧の画面に遷移して画面上の方にある【Create an app】ボタンをクリックします。
アプリ名などを入力する詳細設定の画面に遷移するのでデータを入力していきます。
必要な項目に入力をしたら、画面下方にある【Create】ボタンをクリックします。
クリックするとダイアログが表示されるかもしれませんが、内容に問題がなければ【Create】ボタンをクリックします。
うまく処理が行われるとブラウザに通知が行われます。
アプリができたら
以下のURLからアプリ一覧を選択して
https://developer.twitter.com/en/apps
該当のアプリの【Details】ボタンをクリックします。
するとアプリの詳細設定画面に移るので【Keys and tokens】をクリックします。
すると、APIのアクセスに必要な
4つのキーを表示する画面になります。Access token
、Access token secret
の値が表示されていない場合には【Create】ボタンをクリックして生成をおこなってください。
この4つの値がコーディングに必要になるのでこれをメモしておきます。
コーディング
ようやくコーディングになります。長かった…
ツイッターでキーワードサーチをしてデータを収集するプログラムを作成します。
これまではTweepy
を使用していましたが、今回は新しい取り組みとしてrequests_oauthlib
を使用してみます。(Tweepy
でも処理はあんまり変わらないのですが新しいものを使ってみたかったのでこちらにしています。)詳細は以下のページを御覧ください。
Tweepy
ではTwitterに特化した処理ですが、requests_oauthlib
は他のOAuth認証を使った処理でも使用可能なので、これを使えるほうがいいことがありそうです。
【参考】 pypi.org
というかもう結構まとまっている記事がありましたので、そちらを参考にしてコードを組みました。
【参考】 qiita.com
先程メモしておいた - API key - API secret key - Access token - Access token secret の値に関しては*で伏せています。
下準備
パッケージのインストール
$ pip install requests_oauthlib $ pip install pytz $ pip install python-dateutil
サンプルのコーディング
このサンプルではハッシュタグが#nhk
でリツイートではないものを最大20件取得するものを作っています。
#!/usr/bin/env python # -*- coding:utf-8 -*- import json from requests_oauthlib import OAuth1Session from pytz import timezone from dateutil import parser CONSUMER_KEY = '****************' CONSUMER_SECRET = '****************' ACCESS_TOKEN = '****************' ACCESS_TOKEN_SECRET = '****************' twitter = OAuth1Session(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET) url = "https://api.twitter.com/1.1/search/tweets.json" query = '#nhk exclude:retweets' params = { 'q': query, 'count': 20 } print('----------------------------------------------------') req = twitter.get(url, params = params) if req.status_code == 200: search_timeline = json.loads(req.text) for tweet in search_timeline['statuses']: print('name::\n' + tweet['user']['name']) print('text::\n' + tweet['text']) jst_time = parser.parse(tweet['created_at']).astimezone(timezone('Asia/Tokyo')) print('date::') print(jst_time) print('----------------------------------------------------') else: print("ERROR: %d" % req.status_code)
このコードはそんなに難しくないのですが、返されるJSONに含まれる値のcreate_at
(ツイートがされた時刻)がタイムゾーンがUTCで扱われているので、
ローカルタイムゾーンに合わせるためpytz
とdateutil
のパッケージを使用しています。
終わりに
2018年の年末まで1日しかありませんが、出来上がるのでしょうか。
すくなくともデータの取得までは完成させてwordcloud
への出力が遅れるのもやむなしかなと思ってがんばります。