382
388

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-07

概要

__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 Key__と__Consumer Secret__は以下の画面から確認することが可能です。

screencapture- 2018-01-07 19.16.54.png

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

初期では、Access Token__と__Access 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__とかいう、__地獄__のようなエンドポイントもあるので色々楽しそうですね。

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

382
388
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
382
388

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?