Pythonを使ってTwitterでいいねを自動化する

Python

みなさんTwitterのフォロワーを伸ばそうとしたときに、いいねをとにかくし続けたことはありませんか?

指が動かなくなるくらいいいねを押した経験がある人はわかると思いますが、めちゃくちゃ大変です。

いいねを押すためにTwitterを始めたわけではないですよね?

それでしたらいいねすることを自動化してしまいましょう!

Twitter Developer で申請

まずは「Twitter Developer」で「API」の利用申請をしましょう。

Twitter Developer Platform

上記にアクセスしてください。

このゆうな画面が出てくるので、右上の「Apply」を押してください。

そうすると次のような画面になるので、赤枠の「Apply for a developer account」を押してください。

上記のようにTwitterへのログインを求められるので、ログインしてください。

(Twitterアカウントがないひとは作成してください。)

ログインすると上記のような画面になります。

使用目的を聞かれるので、適しているものを押してください。

僕はこのようにしました。

Get started」を押してください。

自分にあったように上記を入力したら、「Next」を押してください。

(Twitterに電話番号登録をしていないと次に進めないので、手順に沿って電話番号を登録して食いださい。手順は表示してくれます。)

そうすると上記のようなものが表示されるのですが、ここが1番の難関です。

難関の理由はめんどくさいからです。

正直記入するのがめんどくさい方は、あまりよろしくありませんが、真似してしまいましょう。

2021年度版 Twitter API利用申請の例文からAPIキーの取得まで詳しく解説
Twitter APIを利用するためのデベロッパー申請から、APIキー、トークン取得方法を詳しく解説します。

こちらなどを参考に残りを進めていってください。

僕の場合はすぐにメールが届きましたが、人によるそうなのでメールがくるのを気長に待ちましょう。

メールが届いてメールに記載のURLにアクセスしたら登録は完了ですので、次のステップに進みましょう。

Developer Portalでアプリを作成

次にアプリを作成します。

右上の「Developer Portal」を押してください。

その後、左のメニューバーから「Projects & Apps」の「Overview」を選択してください。

Create App」を押して、アプリを作成していきます。

アプリ名を入れて「Complete」を押してください。

その後「API Key」などが表示されていますが、後で再生成するのでメモしなくて良いです。

次にアクセス権限を変更していきます。

App permissions」の「Edit」を押してください。

上記のように「Read + Write + Direct Messages」を選択して、「Save」を押してください。

変更できたら、「API KEY」などを再生成していきます。

上にある「Keys and tockens」をクリックしてください。

そうすると次のような画面が表示されるので、「API key & secret」、「Bearer token」、「Access token & secret」のそれぞれ「Regnerate」もしくは「Generate」を押して、再生成していきます。

この時生成したものはメモしておきましょう。(生成したキーの横のプラスボタンからコピーできます。)

これでアプリの作成は完了です。

次からは実際にプログラムを書いていきましょう。

Pythonコードを書いていく

全体の流れの確認

まずは全体の流れを確認していきたいと思います。

  • .envファイルからAPI Keyなどを取得。
  • ツイートにはIDがついていて、そのIDは数字が高いほど最新のツイートなので、そのID以降のツイートを取得。
  • いいねをしていく。
  • 決まった時間に実行していく。

これが大まかな全体の流れです。

必要なものをインストール

ターミナルで次のように実装してください。

# Anacondaで環境構築している人
conda install -c conda-forge tweepy
conda install -c conda-forge schedule
conda install -c conda-forge python-dotenv

# それ以外の人
pip install tweepy
pip install schedule
pip install python-dotenv

Anacondaで環境を作成している人は上を実行して、Anacondaを使用していない人、Anacondaって何?美味しいの?という人は下を実行してください。

必要ファイルの作成

ここから実際にPythonファイルを書いていきます。

まずは「.env」ファイルと「id.txt」ファイルを作成していきましょう。

touch .env
touch id.txt
touch tweet.py

まずは「.env」ファイルに次のように記述してください。

xxxの部分は先ほどコピーしたものをそれぞれ当てはめてください。

どれがどれだか忘れた人はもう1度再生成してください。

API_KEY=xxxxxxxxxxxxxxxx
API_SECRET_KEY=xxxxxxxxxxxxxxxx
ACCESS_TOKE=xxxxxxxxxxxxxxxx
ACCESS_TOKEN_SECRET=xxxxxxxxxxxxxxxx

次に「id.txt」に記述していくのですが、ここにはツイートIDを記述します。

適当に自分のでも良いので、昨日くらいのツイートのIDを記述してください。

ツイートIDは上記のようにツイートのURLの「1365632959122915330」の部分にあたります。

なので

1365632959122915330

のように記述しておいてください。

Pythonファイル

では次にPythonファイルを編集していきます。

さきほど作成した「tweet.py」に以下をコピペしてください。

# -*- coding: utf-8 -*-
import os
import tweepy
from dotenv import load_dotenv
import datetime


def main():
    # .envファイルの内容を読み込み
    # load_dotenv()
    load_dotenv(override=True)

    # os.environを用いて環境変数を表示
    API_KEY = os.environ['API_KEY']
    API_SECRET_KEY = os.environ['API_SECRET_KEY']
    ACCESS_TOKE = os.environ['ACCESS_TOKE']
    ACCESS_TOKEN_SECRET = os.environ['ACCESS_TOKEN_SECRET']

    # tweepy settings
    auth = tweepy.OAuthHandler(API_KEY, API_SECRET_KEY)
    auth.set_access_token(ACCESS_TOKE, ACCESS_TOKEN_SECRET)
    api = tweepy.API(auth)

    # ツイート検索数
    count = 200
    # 検索をかけるIDを取得
    with open("id.txt", "r") as file:
        ID = file.read()

    # 検索
    tweets = api.search(q="#駆け出しエンジニアと繋がりたい OR #プログラミング初心者",
                        since_id=int(ID),  # ID以降のツイート(そのIDより後にツイートされたもの)
                        include_entities=True,
                        tweet_mode="extended",  # テキスト全文
                        lang="ja",  # 日本語のツイートのみ
                        count=count   # countで設定した分のツイートを取得
                        )

    # ファイルに記述し直すID
    last_id = ID

    # いいねと出力
    for tweet in tweets:
        id = tweet.id  # id取得
        last_id = id   # 記述し直すIDを更新
        # いいねするツイート内容を改行なしで取得
        text = tweet.full_text.replace('\n', '')
        # ツイート内容を出力
        print(text)
        # いいねをする。(いいねがされているものをもう一度いいねするとエラーが出るので、例外処理)
        try:
            api.create_favorite(id)
        except:
            pass

    # 更新したIDを保存し直す
    with open("id.txt", "w") as file:
        file.write(str(last_id))


if __name__ == '__main__':
    main()

コピペで終わってしまうのもあれなので、1つずつ解説していきます。

解説

それでは解説を始めていきましょう。

import os
import tweepy
from dotenv import load_dotenv
import datetime

ここでは色々インポートしています。

# .envファイルの内容を読み込み
# load_dotenv()
load_dotenv(override=True)

# os.environを用いて環境変数を表示
API_KEY = os.environ['API_KEY']
API_SECRET_KEY = os.environ['API_SECRET_KEY']
ACCESS_TOKE = os.environ['ACCESS_TOKE']
ACCESS_TOKEN_SECRET = os.environ['ACCESS_TOKEN_SECRET']

ここでは「.env」ファイルから先ほど記述した「API Key」などをとってきています。

# tweepy settings
auth = tweepy.OAuthHandler(API_KEY, API_SECRET_KEY)
auth.set_access_token(ACCESS_TOKE, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)

ここではアカウントを先ほど「.env」ファイルからとってきたものを使用して、アカウントを取得しています。

# ツイート検索数
count = 200
# 検索をかけるIDを取得
with open("id.txt", "r") as file:
    ID = file.read()

# 検索
tweets = api.search(q="#駆け出しエンジニアと繋がりたい OR #プログラミング初心者",
                    since_id=int(ID),  # ID以降のツイート(そのIDより後にツイートされたもの)
                    include_entities=True,   # countで設定した分のツイートを取得
                    tweet_mode="extended",  # テキスト全文
                    lang="ja",  # 日本語のツイートのみ
                    count=count
                    )

count」で取得ツイート数を用意します。

その後「id.txt」からツイートIDを取得します。

その後条件をつけて検索をかけ、その結果をtweetsに入れています。

q」に検索キーワードを入れています。(自分なりに変更して問題ないです。ORで繋ぐことでもっと増やせます。)

since_id」は、指定したID以降のツイートを取得するという設定です。

# ファイルに記述し直すID
last_id = ID

# いいねと出力
for tweet in tweets:
    id = tweet.id  # id取得
    last_id = id   # 記述し直すIDを更新
    # いいねするツイート内容を改行なしで取得
    text = tweet.full_text.replace('\n', '')
    # ツイート内容を出力
    print(text)
    # いいねをする。(いいねがされているものをもう一度いいねするとエラーが出るので、例外処理)
    try:
        api.create_favorite(id)
    except:
        pass

# 更新したIDを保存し直す
with open("id.txt", "w") as file:
    file.write(str(last_id))

先ほど取得したツイートを1つずつfor文で出力しながら、いいねを押しています。

last_idには、次にこのファイルを実装した時に指定するIDになります。

そのため、「id.txt」に上書きしています。

実行

では実行していきましょう。

エディタを使っている人はそこで実行しても良いですし、次のようにターミナルから実行しても良いです。

python ファイル名.py

ツイート内容が出力され、いいねが押せているか確認してください。

無事できていれば完璧です!

定期実行

では最後に定期実行していきましょう。

tweet.py」に次のように追記してください。

# -*- coding: utf-8 -*-
import os
import tweepy
from dotenv import load_dotenv
import datetime


def main():
    # .envファイルの内容を読み込み
    # load_dotenv()
    load_dotenv(override=True)

    # os.environを用いて環境変数を表示
    API_KEY = os.environ['API_KEY']
    API_SECRET_KEY = os.environ['API_SECRET_KEY']
    ACCESS_TOKE = os.environ['ACCESS_TOKE']
    ACCESS_TOKEN_SECRET = os.environ['ACCESS_TOKEN_SECRET']

    # tweepy settings
    auth = tweepy.OAuthHandler(API_KEY, API_SECRET_KEY)
    auth.set_access_token(ACCESS_TOKE, ACCESS_TOKEN_SECRET)
    api = tweepy.API(auth)

    # ツイート検索数
    count = 200
    # 検索をかけるIDを取得
    with open("id.txt", "r") as file:
        ID = file.read()

    # 検索
    tweets = api.search(q="#駆け出しエンジニアと繋がりたい OR #プログラミング初心者",
                        since_id=int(ID),  # ID以降のツイート(そのIDより後にツイートされたもの)
                        include_entities=True,
                        tweet_mode="extended",  # テキスト全文
                        lang="ja",  # 日本語のツイートのみ
                        count=count   # countで設定した分のツイートを取得
                        )

    # ファイルに記述し直すID
    last_id = ID

    # いいねと出力
    for tweet in tweets:
        id = tweet.id  # id取得
        last_id = id   # 記述し直すIDを更新
        # いいねするツイート内容を改行なしで取得
        text = tweet.full_text.replace('\n', '')
        # ツイート内容を出力
        print(text)
        # いいねをする。(いいねがされているものをもう一度いいねするとエラーが出るので、例外処理)
        try:
            api.create_favorite(id)
        except:
            pass

    # 更新したIDを保存し直す
    with open("id.txt", "w") as file:
        file.write(str(last_id))


if __name__ == '__main__':
    # 定期実行
    import schedule
    import time

    # 毎日12時, 18時, 22時に定期実行
    schedule.every().day.at("12:00").do(main)
    schedule.every().day.at("18:00").do(main)
    schedule.every().day.at("22:00").do(main)
    
    while True:
        schedule.run_pending()
        time.sleep(1)

最後の方を少し編集して、追記しました。

if __name__ == '__main__':
    # 定期実行
    import schedule
    import time

    # 毎日12時, 18時, 22時に定期実行
    schedule.every().day.at("12:00").do(main)
    schedule.every().day.at("18:00").do(main)
    schedule.every().day.at("22:00").do(main)
    
    while True:
        schedule.run_pending()
        time.sleep(1)

ここでは定期実行の設定をしています。

詳しいことはこちらを参考にしてください。

【Python】Scheduleライブラリでタスクスケジュールを管理する
Pythonでcronのようにタスクスケジュールする方法について説明します。 Pythonでタスクスケジュールを管理する方法はいくつかありますが、今回紹介する方法は「schedule」ライブラリを使用

では実行していきましょう!

python ファイル名.py

実行すると実行しっぱなしになりますが、問題ありません。

指定した時間になると実行されるので、気長に待ちましょう。

※実行を停止してしまうと定期実行できなくなるので、注意してください。

最後に

今回はPythonを使ってTwitterいいねを自動化する手順をみてきました。

Twitterを頑張りたい人にとっては必ず役立つので、ぜひ活用してください。

続き…

それでは!

コメント

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