あくまで個人の感想です

・英語のTips ・読書メモ ・気に入ったもの紹介 ・たまにコード

tweepyを常時稼働させるための外側。

ツイッターAPIを利用しようと思ったから、とりあえず外側だけ作ったぜ。 デフォルトの設定で毎時59分00秒に落ちる。以前while Trueやったときにおもらしで困ったのでちゃんと落とす。 OSの設定で毎時0分0秒にキックする前提。 アクセスキーとかトークンとかの設定は他の方のを参考にしてください。

from datetime import datetime
import time

import tweepy


'''
ツイッターAPIを利用しようと思ったから、とりあえず外側だけ作ったぜ。
デフォルトの設定で毎時59分00秒に落ちる。以前`while True`やったときにおもらしで困ったのでちゃんと落とす。
OSの設定で毎時0分0秒にキックする前提。
アクセスキーとかトークンとかの設定は他の方のを参考にしてください。
'''


# アクセスキーとトークン
KEY = '*********************************'
KEY_SECRET = '*************************************'
TOKEN = '*******************************************'
TOKEN_SECRET = '****************************************'


# このapiにログインしたやつが入る
api = None


# 各行動回数の1時間あたりの限界値。余裕を殆ど見てないので凍結されたくないなら下げる。
# 以下のサイトを元に上限値を設定した。
# https://www.itmedia.co.jp/news/articles/1807/26/news079.html#:~:text=%E3%82%AD%E3%83%A3%E3%83%AA%E3%82%A2-,Twitter%E3%80%81API%E4%BD%BF%E7%94%A8%E6%9D%A1%E4%BB%B6%E3%82%92%E5%8E%B3%E6%A0%BC%E5%8C%96%20%E3%80%8C%E5%8E%B3%E3%81%97%E3%81%99%E3%81%8E%E3%82%8B%E3%80%8D,%E9%96%8B%E7%99%BA%E8%80%85%E3%81%8B%E3%82%89%E6%82%B2%E9%B3%B4%E3%82%82&text=%E7%B1%B3Twitter%E3%81%AF7%E6%9C%88,%E3%81%AA%E3%81%A9%E5%88%B6%E9%99%90%E3%81%8C%E5%8E%B3%E3%81%97%E3%81%8F%E3%81%AA%E3%82%8B%E3%80%82
FAV_LIMIT = 41  # 0.666の余裕あり
FLW_LIMIT = 41  # 0.666の余裕あり
TWT_LIMIT = 100  # 余裕なし。ツイートとリツイートの合算。
MSG_LIMIT = 625  # 余裕なし。


# 回数の初期化
fav_count = 0
flw_count = 0
twt_count = 0
msg_count = 0


def favorite() -> None:
    '''この関数を編集してね。編集されていないと何もしないよ。'''
    return


def follow() -> None:
    '''この関数を編集してね。編集されていないと何もしないよ。'''
    return


def tweet() -> None:
    '''この関数を編集してね。編集されていないと何もしないよ。'''
    return


def message() -> None:
    '''この関数を編集してね。編集されていないと何もしないよ。'''
    return


def login() -> None:
    '''tweepyで使うapiを設定する。名前変えるときはグローバルの変数も変えてね。'''
    global api
    auth = tweepy.OAuthHandler(KEY, KEY_SECRET)
    auth.set_access_token(TOKEN, TOKEN_SECRET)
    api = tweepy.API(auth)


def routine() -> None:
    '''限界値に達していなければfavorite, follow, tweet, messageを呼び出す。'''
    global fav_count, flw_count, twt_count, msg_count
    if fav_count < FAV_LIMIT:
        favorite()
        fav_count += 1

    if flw_count < FLW_LIMIT:
        follow()
        flw_count += 1

    if twt_count < TWT_LIMIT:
        tweet()
        twt_count += 1

    if msg_count < MSG_LIMIT:
        message()
        msg_count += 1

    return


def is_endtime(min_limit=59, sec_limit=0) -> bool:
    nowtime = datetime.now()
    '''指定時間を過ぎたらTrueを返す。今回は59分00秒を過ぎた場合に落とすために利用。'''
    if nowtime.minute < min_limit:
        return False
    if nowtime.second < sec_limit:
        return False
    return True


def test():
    public_tweets = api.home_timeline()
    for tweet in public_tweets:
        print(tweet.text)
    print('TEST SUCCESSFUL!')


if __name__ == "__main__":
    login()
    test()

    while True:
        # 59分00秒を過ぎていたら落とす
        if is_endtime():
            exit()

        # メインの関数呼び出し。time.sleep(1)はご自由に。なくてもいいかも。
        routine()
        time.sleep(1)