😀

【Python】TwitterAPIとtweepyでいいねの自動化をしてみた

2022/06/12に公開

今回は、検索したツイートに対していいねする処理を自動化するという実装を行いました。
勉強になりつつ楽しめると思うので、参考にしていただけますと幸いです。

実装準備

まず、「いいね自動化」を実装するにあたり、前提として、TwitterAPIで「プロジェクト」登録を行い、API_KEYACCESS_TOKENを取得している必要があるので、取得できていない方は、APIの設定から始めてください。

Twitter Developers

実装

以下が実装した内容です。
順次、解説します。

auto_fav_tweet.py
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にリクエストを送信するための認証を行う必要があります。
以下が、認証情報を設定しているコードです。

auto_fav_tweet.py
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_keyapi_secret_keyを渡します。

さらに、認証情報にトークンを設定する必要があるので、そちらもset_access_token()で行います。
これでTwitter・TwitterAPIにリクエストを送ることができます。

APIにもよりますが、基本的にログインが必要なサービスが提供しているAPIOAuth等の認証が必要になります。

次に、すべてのリクエストで設定した認証情報を使用するためtweepy.API(auth)とし、APIに認証情報を渡します。

②ツイートを検索する

認証情報の設定が完了したので、次にTwitterに検索をかけ、条件に合致するツイートを取得します。
以下が、それを実装しているコードです。

auto_fav_tweet.py
# すべてのリクエストでauthを認証情報に使う
api = tweepy.API(auth)

# "エンジニア"を含む最近の投稿を5件取得
tweets = api.search_tweets(q="エンジニア", result_type="recent", count=5)

tweepyのAPI情報が持つsearch_tweets()関数使用して、条件に合致する投稿を取得します。
条件の指定は引数で行います。

第一引数のqqueryとして検索ワードを設定します。
次にresult_typeですが、recentを指定し、直近の投稿を取得するよう指定します。第三引数のcountは文字通り、取得件数を指定しています。

これで条件に合致するツイートを取得できます。

③ツイートにいいねをする

最後に、実際に取得した投稿に対して、いいねを行います。

auto_fav_tweet.py
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を使用して、例外処理を実装します。

auto_fav_tweet.py
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の承認後「+」ボタンを押下します。
スクリーンショット 2022-06-12 14.02.53.png

アプリケーションの選択画面で[command]+[shift]+[G]を押し、検索欄に/usr/sbin/cronと入力し、cronを追加します。
スクリーンショット 2022-06-12 14.09.11.png

②ターミナルで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で自動でツイッターフォロワーを伸ばすプログラムを書いてみた

API — tweepy 4.10.0 documentation

【Python】macOSのcronでpythonを自動実行してみた

Discussion