今回はTwitterで自分のフォロワーの最新ツイートを自動でいいねする方法を解説したいと思います。
Pythonのモジュールであるtweepyを使った方法を紹介します。私自身、勉強がてらはじめてtweepyを使用したので、もっと効率の良い方法があるかもしれませんが、ご了承ください。
なお、Twitter APIの各種キーおよびトークンは既に取得済みという前提で、コードのみに焦点をあてて解説していきます。
仕様としては、自分のフォロワーの中で、一週間以内に誰かにいいねをしている人の最新のツイートをいいねするというようになっています。一週間以内に誰かをいいねしているというフィルターをつけたのはアクティブユーザーのみを抽出するためです。これに関してももっと別の方法があるかと思いますので、あくまでtweepyの機能に触れるための勉強用だと考えていただければ幸いです。
tweepyをインストール
tweepyを利用するためにはまずtweepyをインストールする必要があります。私はpipでインスト―ルしました。それぞれ環境にあった方法でターミナルからインストールしてください。
pip install tweepy
API設定ファイルを作成する
まずはPythonからtweepyを利用してTwitter APIを使用できるようにするためにAPIキーなどを記録するためのconfig.pyを作成します。
# config.py
CONFIG = {
"CONSUMER_KEY":"アプリのAPIキー(CONSUMER KEY)",
"CONSUMER_SECRET":"アプリのAPIシークレット(CONSUMER SECRET)",
"ACCESS_TOKEN":"アプリのアクセストークン",
"ACCESS_SECRET":"アプリのアクセスシークレット",
}
こちらのファイルでは後にメイン処理を記述するファイルからAPIを利用するために、APIを利用するアプリの情報をCONFIGという辞書型に記録していきます。
各種キーに対応する値はこれから作成するアプリ独自のものになりますので、Twitter開発者ポータルから取得した値を入力してください。
自動いいねする処理を記述
ここまででAPIを利用する各種準備が整ったので、実際に自動いいねをする処理を記述するファイルを作成していきます。
今回はlike_tweet.pyというファイル名で作成します。
import tweepy
from config import CONFIG
import datetime
CONSUMER_KEY = CONFIG["CONSUMER_KEY"]
CONSUMER_SECRET = CONFIG["CONSUMER_SECRET"]
ACCESS_TOKEN = CONFIG["ACCESS_TOKEN"]
ACCESS_SECRET = CONFIG["ACCESS_SECRET"]
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)
# 指定したツイートをいいねするメソッド
def make_favorite(tweet_id, Api):
try:
Api.create_favorite(tweet_id)
print("成功")
except Exception as e:
print(e)
# フォロワーのIDのリストを取得するメソッド
def getFollowers_ids(Api, Id):
followers_ids = tweepy.Cursor(Api.get_follower_ids, id = Id, cursor = -1).items()
followers_ids_list = []
for followers_id in followers_ids:
followers_ids_list.append(followers_id)
return followers_ids_list
# フォロワーの最終いいねの日付を取得するメソッド
def get_users_last_favorite_date(user_id):
results = api.get_favorites(user_id=user_id, count=1)
last_favorite_date = 0
for result in results:
last_favorite_date = result.created_at
return last_favorite_date
# ここからメインの処理
screen_name = "あなたのTwitterのアカウント名(@マーク以降の文字列)"
today = datetime.datetime.today().date()
f_list = getFollowers_ids(Api = api, Id = screen_name)
for follower_id in f_list:
last_faborite_date = get_users_last_favorite_date(follower_id).date()
# 7日以内に誰かをいいねしているかチェック
if last_faborite_date > today + datetime.timedelta(days=-7):
# ユーザーの最新のツイートを取得
results = api.user_timeline(id=follower_id, count=1)
for result in results:
make_favorite(tweet_id=result.id, Api=api)
print(result.user.name + 'さんのツイート\n' + result.text + '\nをいいねしました')
コードの記述順に沿って簡単に解説していきます。基本的にはコード中のコメントに残してある通りです。
import tweepy
from config import CONFIG
import datetime
今回はフォロワーが過去7日以内に誰かにいいねをしているかをチェックするためにdatetimeを使用しますので、tweepyと合わせてインポートします。
また前段階で作成したconfig.pyからCONFIGもインポートして利用できるようにします。
CONSUMER_KEY = CONFIG["CONSUMER_KEY"]
CONSUMER_SECRET = CONFIG["CONSUMER_SECRET"]
ACCESS_TOKEN = CONFIG["ACCESS_TOKEN"]
ACCESS_SECRET = CONFIG["ACCESS_SECRET"]
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)
インポートしたCONFIGを利用して各種情報を設定したら、tweepyを利用するためのauth変数、api変数を作成します。これらはtweepyを利用するにあたっての定型文ですので、完全に理解する必要はありません。
# 指定したツイートをいいねするメソッド
def make_favorite(tweet_id, Api):
try:
Api.create_favorite(tweet_id)
print("成功")
except Exception as e:
print(e)
特定のツイートをいいねするためのmake_favoriteというメソッドを定義しました。それぞれのツイートにはIDが付与されていますので、それを引数に渡してあげることでいいねするようにしています。このIDについては後に取得しています。
実際にいいねをする処理はtweepyによって作成したapi変数のcreate_favoriteというメソッドを使用しています。
# フォロワーのIDのリストを取得するメソッド
def getFollowers_ids(Api, Id):
followers_ids = tweepy.Cursor(Api.get_follower_ids, id = Id, cursor = -1).items()
followers_ids_list = []
for followers_id in followers_ids:
followers_ids_list.append(followers_id)
return followers_ids_list
次にフォロワーのIDのリストを取得するためのメソッドを定義しています。ここでいうIDとは普段Twitter上で利用しているID(@~~)とは異なり、プログラム内部で使用されている一意性のある数値になります。
IDが色々あって混乱の原因になってしまっていますが、getFollowers_idsの引数IdにはあなたのTwitterアカウントID(@以降の文字列)を渡します。
# フォロワーの最終いいねの日付を取得するメソッド
def get_users_last_favorite_date(user_id):
results = api.get_favorites(user_id=user_id, count=1)
last_favorite_date = 0
for result in results:
last_favorite_date = result.created_at
return last_favorite_date
get_favoritesメソッドは引数に渡したユーザーIDに紐づくアカウントのいいね情報を取得するためのメソッドです。count引数を指定してあげることで取得するいいねの情報の上限を指定することができます。
今回は最新のいいねがいつなのかを取得するだけなので、1に設定しています。
get_favoritesの戻り値はStatus型というオブジェクトのリストなので、今回は値が一つしか入っていませんがfor文で回しています。created_atというキーを指定することでそのいいねがいつされたものなのかを取得することができます。
# ここからメインの処理
screen_name = "あなたのTwitterのアカウント名(@マーク以降の文字列)"
today = datetime.datetime.today().date()
f_list = getFollowers_ids(Api = api, Id = screen_name)
for follower_id in f_list:
last_favorite_date = get_users_last_favorite_date(follower_id).date()
# 7日以内に誰かをいいねしているかチェック
if last_favorite_date > today + datetime.timedelta(days=-7):
# ユーザーの最新のツイートを取得
results = api.user_timeline(id=follower_id, count=1)
for result in results:
make_favorite(tweet_id=result.id, Api=api)
print(result.user.name + 'さんのツイート\n' + result.text + '\nをいいねしました')
ここが実際の処理の中身です。
screen_nameという変数にあなたのアカウント名を代入しています。フォロワーのリストを取得するために後で使います。
today変数にはdatetime型の今日の日付を代入しています。後にいいねされた日を比較するためです。
先ほど定義したgetFollowers_idsメソッドにapi変数とscreen_name変数を渡して、取得したフォロワーのIDのリストをf_list変数に代入します。
フォロワーIDのリストの中身をfor文でまわし、その中で先ほど定義したget_users_last_favorite_dateにフォロワーのIDを渡すことで、そのフォロワーの最終いいねがいつなのかを取得しています。
その結果が本日の日付から一週間前の日付より大きい(一週間以内)場合は、その user_timelineメソッドでフォロワーのタイムラインを取得し、最新のツイートをいいねしています。
まとめ
今回はtweepyを利用したフォロワーの最新ツイートのいいね方法の解説でした。
改善の余地がまだまだあるコードですが、tweepyでできることを理解する一助になれば幸いです。
コメント