はじめに
指定した時間になったらTwitterで呟く方法です。
Twitter自体には予約投稿という機能がありますが、APIを叩いて予約投稿はできなさそう(多分)だったので、Schedulerを用いて強引ですが予約投稿を実装しました。
TwitterAPIの取得方法などは様々な方が解説してくださっているので割愛しています。
実行環境
- windows10
- Python 3.8.3
コード
import tweepy
import sched
import time
import datetime
# API Keys
CK = "Consumer Key"
CS = "Consumer Secret"
AT = "Access Token"
AS = "Access Secret"
def tweet(text):
"""ツイートする"""
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
api = tweepy.API(auth)
api.update_status(text)
def tweet_sched(post_date, tweet_text):
"""時間を指定する"""
scheduler = sched.scheduler(time.time, time.sleep)
run_at = int(time.mktime(post_date.utctimetuple()))
scheduler.enterabs(run_at, 1, tweet, (tweet_text,))
scheduler.run()
#使用例
post_date = datetime.datetime(2021, 12, 9, 17, 0)
tweet_text = "testです"
tweet_sched(post_date, tweet_text)
時間になるまで待機させて、tweetを実行しています。
時間の精度については秒単位での誤差は出ないと思います。(多分)
post_dateで投稿する日時、tweet_textで投稿する文を指定すれば動きます。
ちなみに過去の日時を指定すると即ツイートされます。
終わりに
私がSchedulerの挙動をイマイチ理解していないので、もしかしたらバグるかもしれないです。
使用は自己責任でよろしくお願いします😉
もっといい方法があれば教えて頂けると助かります🙏