👋

どうせ起動してるPCを使って、宣伝ツイートを自動でRTする

2021/01/05に公開

概要

いちいちリツイートボタンを押しに行くのがめんどくさいので、
せや!自動化したろ!というおはなし。

リツイート何度も繰り返すのは案外めんどくさい

僕は音楽とかそういったのを作るのがすきなんですけど、
先日、新曲を発表しました。
宣伝になりますが、ぜひ聞いてみてください。

これ何度も宣伝するのめんどくさくね?

とふと思いました。
めんどくさいので、じゃあ自動化しましょう。

Twitter API使えるように準備

Twitter API使用権限を用意する

このへんを参考に取得してください。

取得したものを、とりあえずわかりやすくkey.pyにぶちこんでおきましょう。

key.py
API_KEY = 'hoge'
API_SECRET = 'hoge'
ACCESS_TOKEN = 'hoge'
ACCESS_TOKEN_SECRET = 'hoge'

次にTwitter_API.pyを作成して、APIを使えるようにしましょう。

Twitter_api.py

import key

API_KEY = key.API_KEY
API_SECRET = key.API_SECRET
ACCESS_TOKEN = key.ACCESS_TOKEN
ACCESS_TOKEN_SECRET = key.ACCESS_TOKEN_SECRET


def api_proc():
    # TwiterのAPIを使えるようにする
    api = OAuth1Session(
        API_KEY,
        API_SECRET,
        ACCESS_TOKEN,
        ACCESS_TOKEN_SECRET
    )

    return api

これで Twitter_api.api_proc()を実行すると返り値としてTwitterのAPI使用権限が渡されます。

実際にAPIを動かしてみよう

やりたいことをまとめる

したいことをわかりやすくまとめるとこうなります。

  • 指定したツイートIDを、自分のアカウントでRT解除する。
  • 指定したツイートIDを、自分のアカウントでRTする。

なぜ解除が必要か?と言うと、同じツイートを2回リツイートすることはできないので、
同じツイートをリツイートしたい場合は一度解除する必要があるからです。
ちなみに、エラーなどは一切発生しません。(厳密にはexceptionが発生しない)

当該ツイートのIDを取得する

Twitterの当該ツイートのページへ飛びます。
PCなら適当なツイートのどこでもいいのでクリックすれば飛ぶと思います。
そうでない場合、だいたい日付をクリックすれば当該ツイートへ移動できます。

そのページのURLは以下の通りになっていると思います。

https://twitter.com/MushroomRecord/status/1346128262871744512

これのstatusの右側、つまりこのURLだと1346128262871744512が該当IDとなります。
これを使用するので控えておきましょう。

APIを動かす

今回はPOSTでAPIを動かすだけで簡単に終わるので、
スクリプトも簡単になります。

main.py
import Twitter_API


def main(tweet_id: int):
    TWITTER = Twitter_API.api_proc()
    URL_TWITTER = 'https://api.twitter.com/1.1/statuses'
    URL_RT = f'{URL_TWITTER}/retweet/{tweet_id}.json'
    URL_UNRT = f'{URL_TWITTER}/unretweet/{tweet_id}.json'

    TWITTER.post(URL_UNRT)
    TWITTER.post(URL_RT)


if __name__ == '__main__':
    tweet_id = 1346128262871744512
    main(tweet_id)

これを実行すると、僕の宣伝ツイートがRTされると思います。
tweet_idを変更すれば非公開アカウントでない限りどんなツイートもRTすることができるはずです。

どうせ起動しているPCを使って定期的に実行する

僕はずっとPCもといMacをつけっぱなしにしているので、
このズボラな点を使って定期的に実行できるようにします。

cronとかあったよなーと思いつつも調べたら、
MacだとLaunchdのほうが良いみたいです、よくわからんけど。

というわけでLaunchdを使って定期実行を行います。

autoself_retweet.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>autoself_retweet</string>

        <key>ProgramArguments</key>
        <array>
            <string>pythonのパス</string>
            <string>スクリプトのパス</string>
        </array>

        <key>StartInterval</key>
        <integer>3600</integer>

    </dict>
</plist>

keyなんかの属性がセットになっていると考えながら構築します。

  • Labelは任意の名前をセットします。
    Labelファイル名は同一である必要があります。

  • ProgramArgumentsに実行したいコマンドとパラメータを入れます。

ここがよくわからなくて、本当は「cdで移動して、そこのスクリプトを読み込んで〜」と汎用性ある記述にしたかったんですが、
うまく行かなかったので、実用性重視でコマンドとして一行にまとめるような記述になってるんですが、
詳しい方いたらご教授いただけると幸いです。

  • StartIntervalで何秒おきに実行するかを決めます。

定期実行できるようにセットする

これでn秒おきにPythonスクリプトを実行する環境が整ったので、実際にMacに仕込みます。

  • ~/Library/LaunchAgentsautoself_retweet.plistを設置します。
  • ターミナルで以下コマンドを入力すると、定期実行が開始されます。
Terminal
$ launchctl load ~/Library/LaunchAgents/autoself_retweet.plist
  • もし、上記手順を踏んでもスクリプトが実行されない、テストに失敗していると思ったときは以下コマンドでunloadします。
Terminal
$ launchctl unload ~/Library/LaunchAgents/autoself_retweet.plist

それでは、良い定期実行ライフを。

参考

launchdで定期的にスクリプトを実行 - Qiita

Discussion