概要
いちいちリツイートボタンを押しに行くのがめんどくさいので、
せや!自動化したろ!というおはなし。
リツイート何度も繰り返すのは案外めんどくさい
僕は音楽とかそういったのを作るのがすきなんですけど、
先日、新曲を発表しました。
宣伝になりますが、ぜひ聞いてみてください。
イロメガネの人生論 / Sotono
— MushroomRecord (Sotono) (@MushroomRecord) January 4, 2021
色だらけの世界で僕はどう生きるべきか?という曲です。
そして僕の人生もついでに歌いました。
Youtube : https://t.co/athRiiOjN5
Niconico: https://t.co/lwdPODf7mJ#vocaloPost #vocanew #vocaloid #Sotono pic.twitter.com/zgcoQD27O6
…
**これ何度も宣伝するのめんどくさくね?**とふと思いました。
めんどくさいので、じゃあ自動化しましょう。
Twitter API使えるように準備
Twitter API使用権限を用意する
このへんを参考に取得してください。
取得したものを、とりあえずわかりやすくkey.py
にぶちこんでおきましょう。
API_KEY = 'hoge'
API_SECRET = 'hoge'
ACCESS_TOKEN = 'hoge'
ACCESS_TOKEN_SECRET = 'hoge'
次にTwitter_API.py
を作成して、APIを使えるようにしましょう。
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を動かすだけで簡単に終わるので、
スクリプトも簡単になります。
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
を使って定期実行を行います。
<?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/LaunchAgents
にautoself_retweet.plist
を設置します。 - ターミナルで以下コマンドを入力すると、定期実行が開始されます。
$ launchctl load ~/Library/LaunchAgents/autoself_retweet.plist
- もし、上記手順を踏んでもスクリプトが実行されない、テストに失敗していると思ったときは以下コマンドでunloadします。
$ launchctl unload ~/Library/LaunchAgents/autoself_retweet.plist
それでは、良い定期実行ライフを。