Twitter APIを使ってみた

目的

今回の記事で実現したいことは以下の通りです。

  • Twitter API利用準備
  • Twitter APIを使ってIT勉強会に関する記事を取得

Twitter API利用準備

Twitter APIを利用する為に必要となる情報

Twitter APIを利用するには以下の4つの情報が必要になる

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

まずは上記を取得する

Twitterの開発者向けサイトにログイン

ここにアクセスし、右上の「Sign in」をクリック
※既にTwitterにログイン済の場合はログインは不要です。

Twitterにログイン

Twitterのアカウントとパスワードでログイン

ログイン

Twitter Applicationを作成

Twitter Application作成画面が開くので、「Create New App」ボタンをクリック

Create New App

必要項目を入力して、「Create your Twitter application」をクリック

Create New App

※今回は以下の値を入力します。

入力項目入力値備考
NameIT勉強会情報取得作成するアプリケーションの名前を入力
DescriptionTwitterからIT勉強会情報を取得するアプリ作成するアプリケーションの詳細を入力
Websitehttps://twitter.com/ユーザID本来はアプリケーションのURLを設定するとこですが、まだURL等は存在しないので、TwitterユーザURLを設定(ユーザIDは自身のTwitterユーザIDを設定)
Callback URL(空白)ユーザ認証後のCallback URLを設定するところですが、空白でもOK

注)この段階でTwitterアカウントに電話番号が設定されていなければエラーになります。電話番号を設定

アプリケーション作成完了

アプリケーション作成完了

Consumer Key、Consumer Secretの確認

「Keys and Access Tokens」タブをクリックすると「Consumer Key」「Consumer Secret」が確認できるので、どこかにメモっておく

Consumer Secret

「Access Token」「Access Token Secret」の取得、確認

「Create my access token」ボタンをクリック

Create my access token

「Access Token」「Access Token Secret」が確認できるので、どこかにメモっておく

Error

注)画面上部に「Error」が表示されるが、無視してOK

これでTwitter APIを利用する為の準備は完了

Twitter APIを使ってIT勉強会に関する記事を取得

環境情報

タイトル内容備考
OSmacOS High Sierra バージョン 10.13.2とりあえずは自分のマシンで実行
言語Python 2.7.10とりあえず使ってみたかったpythonで、macにデフォルトで入っていた2.7.10を利用
ライブラリrequestsRest API操作を簡単にするライブラリ
ライブラリrequests-oauthlibOAuth認証を簡単にするライブラリ

pipインストール

ライブラリを簡単にインストールする為に「pip」をインストール

command

sudo easy_install pip

バージョン確認

command

$ pip -V
pip 9.0.1 from /Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg (python 2.7)

ライブラリインストール

command

$ sudo pip install requests requests-oauthlib

ディレクトリ構成

tree

.
├── config.py #各種キー管理
├── myTimeline.py #自分のタイムラインを取得
└── getStudyEventInfo.py #勉強会情報取得

各種キーは別ファイルに格納

config.py

CONSUMER_KEY = "**********"
CONSUMER_SECRET = "**********"
ACCESS_TOKEN = "**********"
ACCESS_TOKEN_SECRET = "**********"

自分のタイムラインを取得

まずは各種キーが正しく取得できているかどうかを試すために自分のタイムラインを取得してみた

myTimeline.py

# -*- coding:utf-8 -*-
import json
import config
from requests_oauthlib import OAuth1Session
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS) #Twitter認証
url = "https://api.twitter.com/1.1/statuses/user_timeline.json" #エンドポイント
params ={'count' : 3} #タイムライン取得数
res = twitter.get(url, params = params)
if res.status_code == 200: #OKの場合
    tweets = json.loads(res.text) #タイムラインリスト取得
    for tweet in tweets: #タイムラインリストをループ処理
        print('name      : ' + tweet['user']['name'])
        print('text      : ' + tweet['text'])
        print('created_at: ' + tweet['created_at'])
        print('*******************************************')
else: #NGの場合
    print("Failed: %d" % res.status_code)

実行コマンド

command

$ python myTimeline.py

実行結果
きちんと自分のタイムラインが取得できた

タイムラインの取得

Twitter上のIT勉強会情報を取得

次はTwitter上のIT勉強会情報を取得するPGを作成

getStudyEventInfo.py

# -*- coding:utf-8 -*-
import json
import config
from requests_oauthlib import OAuth1Session
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS) #Twitter認証
url = "https://api.twitter.com/1.1/search/tweets.json"
params = {'q' : 'IT勉強会', 'count' : 3}
req = twitter.get(url, params = params)
if req.status_code == 200:
    tweets = json.loads(req.text)
    for tweet in tweets['statuses']:
        print('name: ' + tweet['user']['name'])
        print('text: ' + tweet['text'])
        print('created_at: ' + tweet['created_at'])
        print('----------------------------------------------------')
else:
    print("ERROR: %d" % req.status_code)

実行コマンド

command

$ python getStudyEventInfo.py

実行結果
「IT勉強会」にヒットするツイートが取得できた

「IT勉強会」にヒットするツイートが取得

Twitter APIを使う上での注意事項

Twitter APIを使う上での注意事項をまとめておきます。

APIを使う上で制限がある

Twitter APIには制限があります。制限を意識せずに開発してしまうと、エラー発生原因がわからずハマってしまうことがあるの注意が必要

  • 利用したい機能(エンドポイント)毎に制限が異なる
  • 15分間に~~回利用可能といった感じ
  • 詳細はここ
  • 投稿時には短い間隔で同じ文字列をツイートすると無視されます
アプリケーションはデベロッパーポリシーを守って利用しましょう。

ごく最近、有名なTwitterを利用したサービスが相次いで利用不可能状態になってしまいました。デベロッパーポリシーを守っていないと判断された為にアカウントを凍結されていたようです。ポリシーの内容もポリシー遵守の厳しさも随時変化していくので注意が必要

  • 複数のTwitter Applicationを作成して同一サービスの為に利用することはできない
  • 開発、ステージング、本番用のTwitter Applicationは特別に許可される(ただし、「1つのTwitterアカウントから申請」「アプリの名称と内容を明示するとともに、同一サービスに対する開発、ステージング、および本番環境作成である旨も明示」という条件有)
  • これを守らないといきなりアカウント凍結とかになって、数週間単位でサービスがとまってしまう
  • 詳細はここ
  • もちろんここも遵守しましょう
複数人で開発する時の注意点

最初は1人で開発していて、サービスが大きくなったら複数人での開発に移行することがあるかと思います。その場合は以下を注意しましょう。

  • 「Twitter Application」「Access Token」の権限は適切に絞る
  • 各種キーがわかると対象アカウントに対してなんでもできるようになるので、厳重な管理を心がける
  • 複数人でやると決まった時点で専用アカウントを準備し、開発者アカウントとは切り離す