0
Help us understand the problem. What are the problem?

posted at

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

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

実装準備

まず、「いいね自動化」を実装するにあたり、前提として、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を自動実行してみた

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?