[Python]Twitter APIを使ってみる

Python

Twitter APIを利用できるようになったので、PythonからAPIを実行してみます。プログラミング言語と組み合わせることでツイートなども自動化できます。

Twitter APIの利用申請方法はこちらを参照ください。

tweepyをインストール

Pythonにtweepyをインストールします。pipコマンドで簡単にインストールできます。

例によってConoHa Wing環境のPythonにインストールしていますので–userを指定していますが、必須ではありません。

$ pip install --user tweepy
Collecting tweepy
  Downloading tweepy-4.1.0-py2.py3-none-any.whl (62 kB)
     |################################| 62 kB 2.2 MB/s
Collecting requests-oauthlib<2,>=1.0.0
  Downloading requests_oauthlib-1.3.0-py2.py3-none-any.whl (23 kB)
Collecting requests<3,>=2.11.1
  Downloading requests-2.26.0-py2.py3-none-any.whl (62 kB)
     |################################| 62 kB 4.1 MB/s
Collecting oauthlib>=3.0.0
  Downloading oauthlib-3.1.1-py2.py3-none-any.whl (146 kB)
     |################################| 146 kB 22.3 MB/s
Collecting certifi>=2017.4.17
  Downloading certifi-2021.10.8-py2.py3-none-any.whl (149 kB)
     |################################| 149 kB 101.8 MB/s
Collecting urllib3<1.27,>=1.21.1
  Downloading urllib3-1.26.7-py2.py3-none-any.whl (138 kB)
     |################################| 138 kB 107.9 MB/s
Collecting idna<4,>=2.5; python_version >= "3"
  Downloading idna-3.3-py3-none-any.whl (61 kB)
     |################################| 61 kB 31.8 MB/s
Collecting charset-normalizer~=2.0.0; python_version >= "3"
  Downloading charset_normalizer-2.0.7-py3-none-any.whl (38 kB)
Installing collected packages: certifi, urllib3, idna, charset-normalizer, requests, oauthlib, requests-oauthlib, tweepy
Successfully installed certifi-2021.10.8 charset-normalizer-2.0.7 idna-3.3 oauthlib-3.1.1 requests-2.26.0 requests-oauthlib-1.3.0 tweepy-4.1.0 urllib3-1.26.7
$

とりあえず動かしてみる

tweepyを使って自分のツイートを表示する簡単なプログラムを作ってみます。

import tweepy

# 認証に必要なキーとトークン
API_KEY = '********************'
API_SECRET = '********************'
ACCESS_TOKEN = '********************'
ACCESS_TOKEN_SECRET = '********************'

# APIの認証
auth = tweepy.OAuthHandler(API_KEY, API_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)

# ユーザタイムライン(デフォルトでは自身のタイムライン)からツイートを60件取得
for tweet in tweepy.Cursor(api.user_timeline).items(60):
    print(tweet.text)

「認証に必要なキーとトークン」はDeveloper Portalでのアプリケーション作成時に生成されていると思いますが、忘れていても以下の「Keys and tokens」タブから再取得(Regenerate)可能です。

Tweet/tweepy APIの使い方

もう少しAPIの使い方を見てみます。とりあえず情報ソースはこちら。

tweepy APIのドキュメントはこちらにあります。
https://kurozumi.github.io/tweepy/index.html

tweepyで利用できるTwitter APIはこのページに載っています。
https://github.com/tweepy/tweepy/blob/master/docs/api.rst#id43

tweepy.Cursor

tweepy.Cursorについては、使い方のチュートリアルがあります。 tweepy.Cursorに対して、itemsまたはpagesメソッドを指定して、自身のタイムラインのツイートを取得することができます。引数には件数、または、ページ数を指定できます。pagesを指定した場合、1ページあたりのツイート数は20件です。

# Only iterate through the first 200 statuses
for status in tweepy.Cursor(api.user_timeline).items(200):
    process_status(status)

# Only iterate through the first 3 pages
for page in tweepy.Cursor(api.user_timeline).pages(3):
    process_page(page)

自身のタイムラインではなく、自身のホームのタイムライン上からツイートを取得したい場合は、api.user_timelineをapi.home_timelineに置き換えます。

for tweet in tweepy.Cursor(api.home_timeline).items(60):
    print(tweet.text)

api.search_tweets

ツイートを検索するためのAPIです。使い方も簡単で「api.search_tweets」に検索したい単語、例えば「q=’Python’」を指定するだけです。日本語でも大丈夫です。

for tweet in tweepy.Cursor(api.search_tweets, q='Python').items(60):
    print(tweet.text)

デフォルトでは全世界のツイートが検索対象となりますので、「Python」といった単語で検索すると、やはり英語のツイートが多くヒットします。手っ取り早く日本語のTweetを検索する場合は「lang=’ja’」を追加してください。

for tweet in tweepy.Cursor(api.search_tweets, q='Python', lang='ja').items(60):
    print(tweet.text)

さらに細かいオプションも色々あるのですが、詳細はSearch Tweets: Standard v1.1を参照してください。

Tweet Object

tweepy.Cursorで取得した結果はTweet Objectとなります。 Tweet Objectの属性(内容)はこちらに纏められています。
https://developer.twitter.com/en/docs/twitter-api/v1/data-dictionary/object-model/tweet

ツイート内容を取得したいだけなら、text属性で取得できますし、ツイートを呟いたユーザやリツイートの数など、色々な情報を取得することができます。

使用制限

Twitter APIには使用制限が掛けられています。ユーザタイムラインのツイートを取得する場合、アプリ単位だと15分間で上限が1,500件となっています。ですので、非常に多くのツイートを短期間で取得することはできないようになっています。

こちらも詳しくはRate limitsを参照してください。

ストリーミング機能

Tweepyでストリーミング」というチュートリアルがあり、実際に動かしてみました。

サンプルコードが動かない問題

import tweepy
#override tweepy.StreamListener to add logic to on_status
class MyStreamListener(tweepy.StreamListener):
    def on_status(self, status):
        print(status.text)

myStreamListener = MyStreamListener()
myStream = tweepy.Stream(auth = api.auth, listener=myStreamListener)
myStream.filter(track=['python'])

何も考えずにサンプルのままに実行してみると、AttributeError: module ‘tweepy’ has no attribute ‘StreamListener'(StreamListenerなんて無いよ)というエラーに遭遇します。

調べてみると、こちらのページに情報がありました。
https://githubmemory.com/repo/tweepy/tweepy/issues/1531

どうやらStreamListenerクラスはStreamクラスに吸収されたみたいで、最新版のtweepyにはStreamsListenerクラスが存在しなくなっています。

サンプルコード書き換え&実行

class MyStream(tweepy.Stream):
    def on_status(self, status):
        print(status.text)
        
myStreamObj = MyStream(API_KEY, API_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
myStreamObj.filter(track=['python'])

ソースを見ながら、とりあえずエラーが出ないように書き換えて実行してみました。正しく動作したようで、「python」という単語が含まれるツイートをリアルタイムに出力することができました。

myStreamObj = MyStream(API_KEY, API_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
myStreamObj.filter(track=['python']) ※実行後、画面上は待機状態になる

  :
#CyberSecurity #technology #Cloud #techno #Digital #MachineLearning #AI #Python…
Mimi nikila hivi naeza nona kuliko nguruwe
Who writes Ole’s scripts ?? It’s like a Monty Python sketch.. ‘ What is wrong with biggess dickus ‘
RT @Khulood_Almani: How #ArtificiallIntelligence impacts #business #transformation?

Ctrl-Cで強制的に止めることができます。

このサンプルコードではツイートを垂れ流しにすることしかできませんが、ツイートを受け取って分析できれば、特定の単語に反応してツイートを投稿したりできそうです。

コメント

  1. […] 【Python】Twitter APIを使ってみるTwitter APIを利用できるようになったので、Pyt… […]

タイトルとURLをコピーしました