调度Python以自动化静态tweet

2024-04-26 09:48:04 发布

您现在位置:Python中文网/ 问答频道 /正文

刚刚写了一个简短的Python脚本发布在Twitter上。我有一个问题,30分钟后,推文出现多次,它应该只发布每半小时一次。我怎样才能解决这个问题?提前谢谢。你知道吗

import random
import tweepy
import schedule
import time

from auth import consumer_secret, consumer_key, access_token_secret, access_token

twitter_auth_keys = {
    'consumer_secret': consumer_secret,
    'consumer_key': consumer_key,
    'access_token_secret': access_token_secret,
    'access_token': access_token
}


def main():
    auth = tweepy.OAuthHandler(
        twitter_auth_keys['consumer_key'],
        twitter_auth_keys['consumer_secret']
    )
    auth.set_access_token(
        twitter_auth_keys['access_token'],
        twitter_auth_keys['access_token_secret']
    )
    api = tweepy.API(auth)

    file = open('words.txt', 'r')
    random_word = random.choice(file.readlines())
    tweet = ('The %s tree.' % random_word.strip())
    api.update_status(status=tweet)
    print('Tweeted: %s' % tweet)

    schedule.every(30).minutes.do(main)

    while True:
        schedule.run_pending()
        time.sleep(1)
    return


if __name__ == '__main__':
    main()

Tags: keyimporttokenauthsecretaccesstimeconsumer
1条回答
网友
1楼 · 发布于 2024-04-26 09:48:04

这似乎是递归的。告诉schedule每30分钟做一次main,main也会调用schedule。试着把它们分开。你知道吗

从文档中:

def job():
    print("I'm working...")


schedule.every(1).minutes.do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

你在做什么:

def rec_job():
    print("I'm working...")
    schedule.every(1).minutes.do(rec_job)
    while True:
        schedule.run_pending()
        time.sleep(1)

if __name__ == '__main__':
    rec_job()

你可以这样分开你的代码:

def send_message():
    auth = tweepy.OAuthHandler(
        twitter_auth_keys['consumer_key'],
        twitter_auth_keys['consumer_secret']
    )
    auth.set_access_token(
        twitter_auth_keys['access_token'],
        twitter_auth_keys['access_token_secret']
    )
    api = tweepy.API(auth)

    file = open('words.txt', 'r')
    random_word = random.choice(file.readlines())
    tweet = ('The %s tree.' % random_word.strip())
    api.update_status(status=tweet)
    print('Tweeted: %s' % tweet)


def main():
    schedule.every(30).minutes.do(send_message)
    while True:
        schedule.run_pending()
        time.sleep(1)
    return


if __name__ == '__main__':
    main()

相关问题 更多 >