PythonでTwitterのいいねの多いバズったツイートをいいね数順に表示させる

Python

Twitterでは、どんなツイートがバズっているのでしょう?
いいねやRTの数が見ればわかりますが、いちいち手作業で遡るのは面倒ですよね。

いいねが多い順(降順)にツイートを並び替えるプログラムを使えば、バズったツイートを簡単に調べることができます。

プログラムのソースコード

# ①ライブラリをインポート
import tweepy
# ②TwitterAPIの認証情報
api_key = 'APIキーを入力'
api_secret = 'APIシークレットを入力'
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)

# ④ツイートを一覧で取得
tweets = tweepy.Cursor(api.user_timeline, id="調べたいユーザー").items()
# ⑤空の辞書dicを用意
dic = {}
# ⑥ツイートを1つずつ取り出す
for status in tweets:
        ids = status.id # ⑦ツイートのID
        url = 'https://twitter.com/調べたいユーザー/status/' + str(ids) # ⑧ツイートのURL
        # text = status.text ツイッターの本文
        fav = status.favorite_count # ⑨ツイートのいいね数
        fav = int(fav) # ⑪いいね数を文字列→数値に変換
        dic[url]=fav # ⑫『本文:いいね数』のセットで辞書に追加
# ⑬いいね数が多い順にTwitterの本文をソート
dic2 = sorted(dic.items(), key=lambda x:x[1])

for tweet in dic2: # ⑭いいね数が多い順でツイートを取り出す
    print("いいね数:", tweet[1]) # ⑭ツイートのいいね数を表示
    print(tweet[0]) # ⑮ツイートのURLを表示
    

プログラム実行前の準備

Tweepyモジュールは外部ライブラリなので、インストールが必要です。

!pip install tweepy

↑を実行して、今回のプログラムを実行する前にインストールしておきます。

TwitterAPIの認証キーを入力

3~7行目:

api_key = 'APIキーを入力'
api_secret = 'APIシークレットを入力'
access_token = 'アクセストークンを入力'
access_token_secret = 'アクセストークンシークレットを入力'

↑部分の4箇所のコードを、自分のTwitterAPIの認証情報に書き換えます。
TwitterAPIの認証キーは各自異なるので、それぞれ自分のものを入力してください。

 

※TwitterAPIの取得は下記のツイートを参考にしてみて下さい

ツイートを調べたいユーザーを指定

14行目:
tweets = tweepy.Cursor(api.user_timeline, id="調べたいユーザー").items()

20行目:
url = 'https://twitter.com/調べたいユーザー/status/' + str(ids)

↑の「調べたいユーザー」部分を、調べたいユーザーのスクリーンネームに書き換えます。
スクリーンネームは、ユーザーのプロフィール画面で確認できます。(@は除きます。)

この3つを済ませれば、プログラムを実行する準備はOKです。
ソースコードをもう一度確認する

ソースコードの解説

ここからはソースコードについて具体的に解説していきます。

プログラムで使うライブラリをインポートする

1行目:
import tweepy

1行目では、今回のプログラムに必要なライブラリをインポートしています。
tweepyモジュールは、PythonでTwitterAPIを操作するための外部ライブラリです。

TwitterAPIの認証キーを準備

3〜7行目:
api_key = '自分のAPIキー'
api_secret = '自分のAPIシークレット'
access_token = '自分のアクセストークン'
access_token_secret = '自分のアクセストークンシークレット'

TwitterAPIへのアクセスに必要な認証キーを4つの変数に準備します。
これは外部からTwitterにアクセスする際、ドアを開ける鍵のようなものです。

認証キーを使って、TwitterAPIにアクセス

9行目:
auth = tweepy.OAuthHandler(api_key, api_secret)

APIキーを使って、OAuthHandlerインスタンスを作成します。

10行目:
auth.set_access_token(access_token, access_token_secret)

アクセストークンをセットして、OAuthHandlerを再構築します。

11行目:
api = tweepy.API(auth)

OAuthHandlerにアクセストークンを設定して、apiインスタンスを作成します。
OAuth認証をおこない、TwitterAPIを操作する準備ができました。

TwitterAPIからツイートを取得

14行目:
tweets = tweepy.Cursor(api.user_timeline, id="調べたいユーザー").items()

api.user_timelineで、指定したユーザーのツイートを取得します。
返り値はリスト型で、変数tweetsはそのユーザーのツイートの一覧リストになります。

ただしapi.user_timelineでは、一度に持ってこれるツイート数に上限があります。
そこでcursorを使うことでツイート数の制限を回避しています。

空の辞書を用意

16行目:

dic = {}

dicという空の辞書を定義します。

ツイートを1つずつ取り出す

18行目:

for status in tweets:

for文で、一覧リスト(変数tweets)にあるツイートを、1つずつ(変数status)に取り出します。
そして取り出したツイート(statusオブジェクト)を使って、いいね数を調べていきます。

ツイートのURLを取得

19行目:
ids = status.id

statusオブジェクトのid属性から、ツイートのIDを取得します。
そして取得したツイートIDを変数idsに代入します。

20行目:
url = 'https://twitter.com/調べたいユーザー/status/' + str(ids)

文字列を連結して、取り出したツイートのURLを取得します。

それぞれのツイートのIDは、そのツイートのURLの末尾になっています。

↑こちらのツイートを例にすると、1240536411528257536がツイートIDになります。

ですので、URL前半の文字列ツイートID(変数ids)を連結して、URLを復元します。
しかし数値のままだと連結できないので、str()で文字列に変換してから連結します。

そして復元したツイートのURLを変数urlとします。

ツイートのいいね数を取得

22行目:
fav = status.favorite_count

statusオブジェクトのfavorite_count属性から、ツイートのいいね数を取得します。
そして取得したツイートのいいね数を変数favに代入します。

23行目:
fav = int(fav)

変数favはデフォルトは文字列としてみなされるので、数値が大きい順にソートすることができません。

そこでint()で数値に変換して、変数favに上書きしています。

ツイート本文といいね数をセットで辞書に追加

24行目:
dic[url]=fav

ツイートのURLをキー、いいね数を値としてセットで辞書dicの要素に追加します。

以下のような要素として、辞書(変数dic)に追加されます。

dic = [key = ツイートのurl(変数url):value = いいね数(変数fav)]

ツイートを辞書に追加したら、for文によって次のツイートを取り出します。
そしてツイート1つ1つに、処理を繰り返して辞書に格納していきます。

すべての取得したツイートを辞書に格納したら、for文のループ処理は終わりです。
ソースコードをもう一度確認する

ツイートをいいね数が多い順にソート

26行目:
dic2 = sorted(dic.items(), key=lambda x:x[1], reverse=True)

sorted()で辞書の値を降順でソートします。

昇順でソートする場合はreverse=True

を外します。

今回だといいね数でソートすることになります。

返り値は辞書ではなく、リストになります。

まずdic.items()で、辞書に含まれているキーと値のセットを一覧で取得します。
それからsorted()と引数のラムダ式を使って、値が大きい順に並び替えます。
そしてソート後のリストを変数dic2としました。

いいね数が多い順にツイートを表示

28行目:
for tweet in dic2:

ソート済のリストから、ツイートを1つずつ変数tweetに取り出します。
変数tweetは、(URL,いいね数)の2つの要素をもつタプル型になります。

30行目:
print(tweet[0])

取り出したツイート(変数tweet)のURLを表示します。
print()で、タプル型の1番目の要素(tweet[0])を出力しています。

29行目:
print("いいね数:", tweet[1])

取り出したツイート(変数tweet)のいいね数を表示します。
print()で、タプル型の2番目の要素(tweet[1])を出力しています。

プログラムを実行すると、出力結果は上の画像のようになります。
いいね数が多い順に、ツイートURL・いいね数のセットが表示されます。

いいね数順にツイッターの本文を並べるプログラム

こちらはいいね数順にツイートの本文を並べることができるプログラムです。

最初のコードを少し改変しています。

# ①ライブラリをインポート
import tweepy
# ②TwitterAPIの認証情報
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)

# ④ツイートを一覧で取得
tweets = tweepy.Cursor(api.user_timeline, id="スクリーンネーム", exclude_replies = True, tweet_mode='extended').items(30)
# ⑤空の辞書dicを用意
dic = {}
# ⑥ツイートを1つずつ取り出す
for status in tweets:
    if (status.favorite_count + status.retweet_count >= 30) and (not status.retweeted) and ('RT @' not in status.full_text):
        ids = status.id # ⑦ツイートのID
        url = 'https://twitter.com/スクリーンネーム/status/' + str(ids) # ⑧ツイートのURL
        text = status.full_text
        fav = status.favorite_count # ⑨ツイートのいいね数
        fav = int(fav) # ⑪いいね数を文字列→数値に変換
        dic[text]=fav # ⑫『本文:いいね数』のセットで辞書に追加
# ⑬いいね数が多い順にTwitterの本文をソート
dic2 = sorted(dic.items(), key=lambda x:x[1])

for tweet in dic2: # ⑭いいね数が多い順でツイートを取り出す
    print('_________________________________________')
    print("fav", tweet[1]) # ⑭ツイートのいいね数を表示
    print('             ')
    print(tweet[0]) # ⑮ツイートのURLを表示
    print('             ')

14行目の

tweet_mode='extended'

はツイート本文全体を取得する為に必要です。

この場合Statusオブジェクトでの本文はtextではなく、full_textで取得する形になります。

exclude_replies = True

はリプライを除くという意味です。

19行目の

if (status.favorite_count + status.retweet_count >= 30) and (not status.retweeted) and ('RT @' not in status.full_text):

の部分はいいね数とリツイート数を足して30以上であり、リツイートを除くという条件を表しています。

実行すると下のように本文がいいね数順に表示されます。

 

まにゃpy
まにゃpy

プログラムを実行していただいたり、改良して@uury112をつけてメンション付きのツイートをしていただければ(https://twitter.com/uuyr112)でリツイートさせていただきます。

コメント

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