目的
Pythonを使ってTwitterのつぶやきを取得したい。
とりあえずは検索結果を取得したい。
TwitterAPIについて
Twitterを外部のプログラムからあれこれするには、TwitterAPIを利用する必要がある。
TwitterAPIを利用する権限(Keyコード)をTwitter社にもらう必要があるのだが、今回はその過程は省略する。
※すでにTwitterAPIを利用できるという前提で話を進める。
もしAPI KEYを持っていないのであれば、このあたりのサイトを参考にして取得しておく。
tweepyモジュールを利用する
PythonでTwitterAPIを利用するためのモジュールはいくつか存在するが、今回はtweepyというものを利用することとする。
tweepyのインストール
$ pip install tweepy
いつも通りpipでインストール可能。
実践
早速テストプログラムを書いてみた。
twitterTest.py
# coding:utf-8
import tweepy
### Twitter API KEY
Consumer_key = '************************'
Consumer_secret = '************************************************'
Access_token = '************************************************'
Access_secret = '************************************************'
### TwitterAPI認証用関数
def authTwitter():
auth = tweepy.OAuthHandler(Consumer_key, Consumer_secret)
auth.set_access_token(Access_token, Access_secret)
api = tweepy.API(auth, wait_on_rate_limit = True) # API利用制限にかかった場合、解除まで待機する
return(api)
### Tweetの検索結果を標準出力
def printTweetBySearch(s):
api = authTwitter() # 認証
tweets = tweepy.Cursor(api.search, q = s, \ # APIの種類と検索文字列
include_entities = True, \ # 省略されたリンクを全て取得
tweet_mode = 'extended', \ # 省略されたツイートを全て取得
lang = 'ja').items() # 日本のツイートのみ取得
for tweet in tweets:
if tweet.favorite_count + tweet.retweet_count >= 100:
print('==========')
print('twid : ',tweet.id) # tweetのIDを出力。ユニークなもの
print('user : ',tweet.user.screen_name) # ユーザー名
print('date : ', tweet.created_at) # 呟いた日時
print(tweet.full_text) # ツイート内容
print('favo : ', tweet.favorite_count) # ツイートのいいね数
print('retw : ', tweet.retweet_count) # ツイートのリツイート数
def main():
printTweetBySearch('python exclude:retweets')
if __name__ == "__main__":
main()
解説
それぞれのブロックについて解説。
tweepyのインポート
import tweepy
tweepyをインポートしているだけ。
今回はtweepyを利用してTwitterAPIを利用するため必須。
TwitterAPI KEYの情報
Consumer_key = '************************'
Consumer_secret = '************************************************'
Access_token = '************************************************'
Access_secret = '************************************************'
TiwtterAPIを使うためのKEYの情報を入力する。
API KEYの情報は持っているものを各自利用すること。
KEY確認方法などはググって。
API認証
def authTwitter():
auth = tweepy.OAuthHandler(Consumer_key, Consumer_secret)
auth.set_access_token(Access_token, Access_secret)
api = tweepy.API(auth, wait_on_rate_limit = True)
return(api)
認証用関数。
上記で入力したTwitterAPI KEYの情報が正しければ正常にインスタンス化される。
Twitter APIには利用制限があって、例えば1回に100件以上(だっけ?)のツイートを取得しようとした場合、100件取得したら7分間の利用禁止期間がある。
wait_on_rate_limit = True しておくと、利用禁止期間の解除を待機してくれるようになる。
つけてないと利用禁止になったらエラーが返る(はず)
ツイートの取得
def printTweetBySearch(s):
api = authTwitter() # 認証
tweets = tweepy.Cursor(api.search, q = s, \ # APIの種類と検索文字列
include_entities = True, \ # 省略されたリンクを全て取得
tweet_mode = 'extended', \ # 省略されたツイートを全て取得
lang = 'ja').items() # 日本のツイートのみ取得
インスタンス化したAPIで実際にツイートを取得する。
tweepy.Cursor カーソルを使用できる。こうするとツイッターのページの概念を考えずにツイートを取得できるようになる。
api.search 実際に利用するAPIの指定。今回は検索なのでsearchを指定。
q = s 検索するワード。関数の引数で指定
include_entities = True t.coで短縮されたリンクの表示用URLが取得できるようになる。よくわからないけどとりあえずつけとく。
tweet_mode = ‘extended’ リンク貼り付けなどで144文字を超えそうになった場合、ツイートが省略されてしまうことがあるが、省略前のものを取得するようにする。
lang = ‘ja’ 日本のツイートのみを取得する。
取得したツイートの表示
for tweet in tweets:
if tweet.favorite_count + tweet.retweet_count >= 100:
print('==========')
print('twid : ',tweet.id)
print('user : ',tweet.user.screen_name)
print('date : ', tweet.created_at)
print(tweet.full_text)
print('favo : ', tweet.favorite_count)
print('retw : ', tweet.retweet_count)
tweepyにて取得したツイートはStatusオブジェクトとなっている。
そのまま出力することはできない(というか意味不明な出力になる)ので、表示させたいパラメータを指定して表示するようにする。
tweet.id ツイートのID。ユニークなもので絶対に重複しない。ツイートの識別として利用できる。
tweet.user.screen_name ユーザーネーム(英字のやつ)
tweet.created_at ツイートされた時間
tweet.full_text ツイート内容。核。tweet_mode = ‘extended’をつけていないと、fill_textではなくtextとなるため注意。
tweet.favorite_count ツイートのいいねの数
tweet.retweet_count ツイートのリツイートされた数
他にもいろいろなパラメータがあるが、今回は割愛。別途紹介する(かも)
ちなみに、今回は人気のあるツイートのみ表示させたかったので以下のif処理にて「いいね+リツイート数」が100を超えているもののみ抽出した。
if tweet.favorite_count + tweet.retweet_count >= 100:
出力結果(例)
今回は「python exclude:retweets」というワードで検索した。
exclude:retweets はtweepyの機能ではなくTwitter側の機能で、検索結果からリツイートを削除することができる。
よって、「python」というワードかつリツイートではないツイートを抽出している。
========== twid : 1138637041745313794 user : DJIJAPAN date : 2019-06-12 02:40:00 楽しみながら学べる先進的な教育用ロボット「RoboMaster S1」を発表!没入型のFPVによる操縦や白熱の対戦モードに加え、ScratchとPythonによるプログラミングに対応し、専用アプリには学習機能も搭載しています。 製品詳細: https://t.co/wuf152YCGQ RobomasterS1 https://t.co/fx87uTfdxS favo : 1946 retw : 943 ========== twid : 1138601720844439552 user : Linda_pp date : 2019-06-12 00:19:39 GitHub 上で Go, JavaScript, Python, Ruby, TypeScript の関数呼び出しやメソッド呼び出しの定義の確認と定義元 へのジャンプができるようになってる.OctoLinker みたいにインポートからパッケージに飛べるようにもならないか な | 'Navigating code on GitHub - GitHub Help' https://t.co/7CP1a4KWST favo : 171 retw : 76 ========== twid : 1138586636860583937 user : yuichielectric date : 2019-06-11 23:19:42 GitHubの画面上で関数やメソッドの定義に飛べるように!対応言語はGo, Python, JavaScript, Ruby, TypeScript https://t.co/FM65M0MuN6 favo : 434 retw : 242
きちんと想定通りのツイートを取得できていることが分かる。
ちなみに、今回抽出できたツイートは以下
楽しみながら学べる先進的な教育用ロボット「RoboMaster S1」を発表!没入型のFPVによる操縦や白熱の対戦モードに加え、ScratchとPythonによるプログラミングに対応し、専用アプリには学習機能も搭載しています。
— DJI JAPAN (@DJIJAPAN) 2019年6月12日
製品詳細:https://t.co/wuf152YCGQ#RobomasterS1 pic.twitter.com/fx87uTfdxS
GitHub 上で Go, JavaScript, Python, Ruby, TypeScript の関数呼び出しやメソッド呼び出しの定義の確認と定義元へのジャンプができるようになってる.OctoLinker みたいにインポートからパッケージに飛べるようにもならないかな | 'Navigating code on GitHub – GitHub Help' https://t.co/7CP1a4KWST
— ドッグ (@Linda_pp) 2019年6月12日
GitHubの画面上で関数やメソッドの定義に飛べるように!対応言語はGo, Python, JavaScript, Ruby, TypeScript https://t.co/FM65M0MuN6
— 田中裕一(Yuichi Tanaka) (@yuichielectric) 2019年6月11日
次の目標
次はユーザーを指定してツイートを取得したり、embedコードを取得したりしたい。
コメント