概要
TwitterAPIを利用していろいろ遊んでみる!
ドキュメントはコチラ
以下の初心者向け記事も宜しければご覧ください♪
【随時追記】今夜寿命を迎えても良いようにPythonの基礎学習内容をメモしとく。
手順
Twtterアプリケーションの作成
まずはTwtterAPIを利用するために、対象のアカウントにて、アプリケーション登録をして、
- Consumer Key
- Consumer Secret
- Access Token
- Access Token Secret
を発行する必要があります。
コチラにアクセスし、対象のアカウントでログインしましょう。
ログインすると、Create New Appボタンが表示されるのでクリックします。
必須情報を適当に入力後に同意し、Create your Twitter applicationボタンをクリックします。
Consumer情報の確認
Consumer KeyとConsumer Secretは以下の画面から確認することが可能です。
アクセス情報の生成及び確認
初期では、Access TokenとAccess Token Secretは発行されていないので、同ページ下部のCreate my access tokenボタンをクリックして、生成する必要があります。
生成されると以下のように確認出来るようになります。
ライブラリのインストール
requestsとrequests-oauthlib
requests:
PythonでRest API操作を簡単に行うためのライブラリ。
直感的で分かりやすいです!
requests-oauthlib:
PythonでOAuth認証を簡単に行うためのライブラリ。
直感的で分かりやすいです!
以下のコマンドでまとめてインストールします。
pip install requests requests-oauthlib
ファイルの準備
階層
ファイル構成は以下のようになっています
.
├── config.py #認証情報を管理
├── xxx.py #各スクリプト
└── ...
CONSUMER_KEY = "**************"
CONSUMER_SECRET = "**************"
ACCESS_TOKEN = "**************"
ACCESS_TOKEN_SECRET = "**************"
試しにタイムラインを取得
まずは、pythonスクリプトから正常にAPI通信が出来ているかの確認を含めてタイムラインを取得してみましょう。
import json, config #標準のjsonモジュールとconfig.pyの読み込み
from requests_oauthlib import OAuth1Session #OAuthのライブラリの読み込み
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS) #認証処理
url = "https://api.twitter.com/1.1/statuses/user_timeline.json" #タイムライン取得エンドポイント
params ={'count' : 5} #取得数
res = twitter.get(url, params = params)
if res.status_code == 200: #正常通信出来た場合
timelines = json.loads(res.text) #レスポンスからタイムラインリストを取得
for line in timelines: #タイムラインリストをループ処理
print(line['user']['name']+'::'+line['text'])
print(line['created_at'])
print('*******************************************')
else: #正常通信出来なかった場合
print("Failed: %d" % res.status_code)
これを実行すると認証情報が正しければ、タイムラインの情報が取得されます。
python getTimelines.py
こんな感じ
しゅごい(小並感)
ツイートをしてみよう!!
以下のファイルを作成します。
import json, config #標準のjsonモジュールとconfig.pyの読み込み
from requests_oauthlib import OAuth1Session #OAuthのライブラリの読み込み
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS) #認証処理
url = "https://api.twitter.com/1.1/statuses/update.json" #ツイートポストエンドポイント
print("内容を入力してください。")
tweet = input('>> ') #キーボード入力の取得
print('*******************************************')
params = {"status" : tweet}
res = twitter.post(url, params = params) #post送信
if res.status_code == 200: #正常投稿出来た場合
print("Success.")
else: #正常投稿出来なかった場合
print("Failed. : %d"% res.status_code)
実行!!
python postTweet.py
こんな感じ
しゅごい(小並感)
注意
TwitterAPIは、ほぼすべての操作をAPI操作出来ますが、ゆえに各エンドポイントごとにリクエスト制限を設けています。
この値はレスポンスに含まれるので取得することが可能です。
import config
from requests_oauthlib import OAuth1Session
import datetime, time
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS) #認証処理
url = "https://api.twitter.com/1.1/statuses/user_timeline.json" #タイムライン取得エンドポイント
res = twitter.get(url)
limit = res.headers['x-rate-limit-remaining'] #リクエスト可能残数の取得
reset = res.headers['x-rate-limit-reset'] #リクエスト叶残数リセットまでの時間(UTC)
sec = int(res.headers['X-Rate-Limit-Reset']) - time.mktime(datetime.datetime.now().timetuple()) #UTCを秒数に変換
print ("limit: " + limit)
print ("reset: " + reset)
print ('reset sec: %s' % sec)
こんな感じ
なるほど。
ちなみにエンドポイントによって上限やリセット時間は異なるらしいので気をつけましょう!
上限を超えてしまうと、429エラーが返るようになってしまいます。
もちろん、フォローを解除するためのfriendships/destroyとかいう、地獄のようなエンドポイントもあるので色々楽しそうですね。
叩き尽くしてやりましょう!!!