Python
Twitter
OAuth
TwitterAPI
python3

PythonでTwitter API を利用していろいろ遊んでみる

概要

TwitterAPIを利用していろいろ遊んでみる!

ドキュメントはコチラ

以下の初心者向け記事も宜しければご覧ください♪
【随時追記】今夜寿命を迎えても良いようにPythonの基礎学習内容をメモしとく。

手順

Twtterアプリケーションの作成

まずはTwtterAPIを利用するために、対象のアカウントにて、アプリケーション登録をして、

  • Consumer Key
  • Consumer Secret
  • Access Token
  • Access Token Secret

発行する必要があります。

コチラにアクセスし、対象のアカウントでログインしましょう。

ログインすると、Create New Appボタンが表示されるのでクリックします。

screencapture- 2018-01-07 19.04.20.png

必須情報適当に入力後に同意し、Create your Twitter applicationボタンクリックします。

capture.png

Consumer情報の確認

Consumer KeyConsumer Secretは以下の画面から確認することが可能です。

screencapture- 2018-01-07 19.16.54.png

アクセス情報の生成及び確認

初期では、Access TokenAccess Token Secret発行されていないので、同ページ下部のCreate my access tokenボタンクリックして、生成する必要があります。

screencapture- 2018-01-07 19.19.27.png

生成されると以下のように確認出来るようになります。

screencapture- 2018-01-07 19.21.47.png

ライブラリのインストール

requestsとrequests-oauthlib

requests:
PythonでRest API操作簡単に行うためのライブラリ。
直感的で分かりやすいです!

requests-oauthlib:
PythonでOAuth認証簡単に行うためのライブラリ。
直感的で分かりやすいです!

以下のコマンドでまとめてインストールします。

command
pip install requests requests-oauthlib

ファイルの準備

階層

ファイル構成は以下のようになっています

tree
.
├── config.py #認証情報を管理
├── xxx.py #各スクリプト
└── ...
config.py
CONSUMER_KEY = "**************"
CONSUMER_SECRET = "**************"
ACCESS_TOKEN = "**************"
ACCESS_TOKEN_SECRET = "**************"

試しにタイムラインを取得

まずは、pythonスクリプトから正常にAPI通信が出来ているかの確認を含めてタイムラインを取得してみましょう。

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/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)

これを実行すると認証情報が正しければ、タイムラインの情報が取得されます。

command
python getTimelines.py

こんな感じ

screencapture- 2018-01-07 19.40.27.png

しゅごい(小並感)

ツイートをしてみよう!!

以下のファイルを作成します。

postTweet.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)

実行!!

command
python postTweet.py

こんな感じ

screencapture- 2018-01-07 19.47.38.png

screencapture- 2018-01-07 19.47.59.png

しゅごい(小並感)

注意

TwitterAPIは、ほぼすべての操作をAPI操作出来ますが、ゆえに各エンドポイントごとにリクエスト制限を設けています。

この値はレスポンスに含まれるので取得することが可能です。

response.py
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)

こんな感じ

screencapture- 2018-01-07 20.37.55.png

なるほど。

ちなみにエンドポイントによって上限やリセット時間は異なるらしいので気をつけましょう!
上限を超えてしまうと、429エラーが返るようになってしまいます。

詳しくはコチラコチラ(日本語訳)を参照下さい。

もちろん、フォローを解除するためのfriendships/destroyとかいう、地獄のようなエンドポイントもあるので色々楽しそうですね。

叩き尽くしてやりましょう!!!