【Python】tweepyでTwitterのツイートを検索して取得

Twitter

目的

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

きちんと想定通りのツイートを取得できていることが分かる。

ちなみに、今回抽出できたツイートは以下

 

次の目標

次はユーザーを指定してツイートを取得したり、embedコードを取得したりしたい。

 

コメント

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