今回は、検索したツイートに対していいねする処理を自動化するという実装を行いました。
勉強になりつつ楽しめると思うので、参考にしていただけますと幸いです。
実装準備
まず、「いいね自動化」を実装するにあたり、前提として、TwitterAPI
で「プロジェクト」登録を行い、API_KEY
やACCESS_TOKEN
を取得している必要があるので、取得できていない方は、APIの設定から始めてください。
実装
以下が実装した内容です。
順次、解説します。
import tweepy
import config
api_key = config.TWEETER_API_KEY
api_secret_key = config.TWEETER_API_SECRET_KEY
access_token = config.TWEETER_ACCESS_TOKEN
access_secret_token = config.TWEETER_ACCESS_SECRET_TOKEN
# 認証を行う
auth = tweepy.OAuthHandler(api_key, api_secret_key)
auth.set_access_token(access_token, access_secret_token)
# すべてのリクエストでauthを認証情報に使う
api = tweepy.API(auth)
# "エンジニア"を含む最近の投稿を5件取得
tweets = api.search_tweets(q="エンジニア", result_type="recent", count=5)
for tweet in tweets:
try:
# ツイートのidを取得
favorite_id = tweet.id
# 指定したIDのツイートにいいねする
api.create_favorite(favorite_id)
# いいねした投稿を取得
favorite_text = tweet.text
print(favorite_text)
# tweepyの例外が発生した場合
except tweepy.TweepyException as e:
# エラー情報を出力する
print(e)
①認証情報の設定
まずはTwitter・TwitterAPIにリクエストを送信するための認証を行う必要があります。
以下が、認証情報を設定しているコードです。
api_key = config.TWEETER_API_KEY
api_secret_key = config.TWEETER_API_SECRET_KEY
access_token = config.TWEETER_ACCESS_TOKEN
access_secret_token = config.TWEETER_ACCESS_SECRET_TOKEN
# 認証を行う
auth = tweepy.OAuthHandler(api_key, api_secret_key)
auth.set_access_token(access_token, access_secret_token)
# すべてのリクエストでauthを認証情報に使う
api = tweepy.API(auth)
tweepyモジュールには、認証を行うOAuthHandler()
があるのでそちらに、api_key
とapi_secret_key
を渡します。
さらに、認証情報にトークンを設定する必要があるので、そちらもset_access_token()
で行います。
これでTwitter・TwitterAPIにリクエストを送ることができます。
APIにもよりますが、基本的にログインが必要なサービスが提供しているAPIはOAuth等
の認証が必要になります。
次に、すべてのリクエストで設定した認証情報を使用するためtweepy.API(auth)
とし、APIに認証情報を渡します。
②ツイートを検索する
認証情報の設定が完了したので、次にTwitterに検索をかけ、条件に合致するツイートを取得します。
以下が、それを実装しているコードです。
# すべてのリクエストでauthを認証情報に使う
api = tweepy.API(auth)
# "エンジニア"を含む最近の投稿を5件取得
tweets = api.search_tweets(q="エンジニア", result_type="recent", count=5)
tweepyのAPI情報が持つsearch_tweets()関数
使用して、条件に合致する投稿を取得します。
条件の指定は引数で行います。
第一引数のq
はquery
として検索ワードを設定します。
次にresult_type
ですが、recent
を指定し、直近の投稿を取得するよう指定します。第三引数のcount
は文字通り、取得件数を指定しています。
これで条件に合致するツイートを取得できます。
③ツイートにいいねをする
最後に、実際に取得した投稿に対して、いいねを行います。
for tweet in tweets:
# ツイートのidを取得
favorite_id = tweet.id
# 指定したIDのツイートにいいねする
api.create_favorite(favorite_id)
# いいねした投稿を取得
favorite_text = tweet.text
print(favorite_text)
これは取得したツイートに対して順に行う処理のためfor文
を使用します。
その中で、どのツイートにいいねするか
という識別子として、検索したツイートのIDを取得します。
そして、APIのcreate_favorite()
に上記で取得したIDを渡し、いいねするツイートを特定し、いいねを実行します。
ここままでで、いいねの実行処理の実装は完了ですが、「どんなツイートにいいねしたかを確認したい」といった場合には、tweet.text
とすることでツイート内容を取得できるので、それを出力してあげればOKです。
④例外処理の実装
最後に、既にいいねしている等の事由によって、例外がでることがあるので、try-except
を使用して、例外処理を実装します。
for tweet in tweets:
try:
# ツイートのidを取得
favorite_id = tweet.id
# 指定したIDのツイートにいいねする
api.create_favorite(favorite_id)
# いいねした投稿を取得
favorite_text = tweet.text
print(favorite_text)
# tweepyの例外が発生した場合
except tweepy.TweepyException as e:
# エラー情報を出力する
print(e)
実装は簡単で、for文内の処理をtryにネストし、exceptで実際に発せられる例外を指定し、エラー情報を出力するだけで実装できます。
ここまで実装できたら、pyファイルを実行してみてください。
いいねができているはずです。
自動化の設定
ただ、ここまで実装しても定時的な自動化はできていません。
そこで、cron
を使用して、定時的な自動化の設定を行います。
※ 私の場合は、Macでの環境なので、cronを使用しますが、Windows環境の方は「タスクマネージャー」で簡単に設定できます。
①cronにアクセス権を付与
まず、cronにアクセス権を付与しないと、macのセキュリティに弾かれるので、アクセス権を付与します。
[システム環境設定>セキュリティとプライバシー>プライバシー>フルディスクアクセス]を指定し、鍵マークを押下します。
macの承認後「+」ボタンを押下します。
アプリケーションの選択画面で[command]+[shift]+[G]を押し、検索欄に/usr/sbin/cron
と入力し、cronを追加します。
②ターミナルでcronに自動化処理を登録
続いてターミナルで自動化したい処理をcronに登録するのですが、その前に、cronに記述する内容を見てみましょう。
"分 時 日 月 曜日 /Python3のフルパス /実行したいプログラム"
時間を指定しない場合は * を入れる
分 0〜59
時 0〜23
日 1〜31
月 1〜12
曜日 0〜7(0,7=日曜、1=月曜、2=火曜、3=水曜、4=木曜、5=金曜、6=土曜)
上記を入力するので、Python3のフルパス
と実行プログラムのパス
を取得します。
Python3のフルパスの取得はターミナルで以下を実行します。
その際に、返却されたパスを控えておいてください。
% which python3
実行したいプログラムのパスは各自で取得しておいてください。
最後にcronに登録します。
以下を実行して、cronに記述していきます。
% crontab -e
ターミナルのエディタが開くのでi
と入力しINSERTモードで、最初に見たcronの記述を書いていきます。
例えば、毎朝9時に実行したい場合は以下を記述します。
0 9 * * * /python3のフルパス /実行したいプログラムのフルパス
毎朝8時30分の場合
30 8 * * * /python3のフルパス /実行したいプログラムのフルパス
毎時30分の場合
30 * * * * /python3のフルパス /実行したいプログラムのフルパス
ここまでできたら:wq
でエディタを閉じ保存します。
注意点
cronの記述をすると、よく以下のエラーが出ることがあります。
crontab: errors in crontab file, can't install
Do you want to retry the same edit?
上記のエラーが出たら、 「y」を押し、cronのエディタにエラーがないか確かめます。
よくあるのは半角スペースの多い・少ないが原因というものです。
時間の指定は値ごとに半角区切りですし、python3と実行するプログラムのフルパスの間にも半角スペースが必要です。
これで定時的な処理の自動化の実装が完了です。
参考文献
・Pythonで自動でツイッターフォロワーを伸ばすプログラムを書いてみた