我试图让我的 python twitter 机器人每小时每 30 分钟发一次推文。我该怎么办? [关闭]

Posted

技术标签:

【中文标题】我试图让我的 python twitter 机器人每小时每 30 分钟发一次推文。我该怎么办? [关闭]【英文标题】:I am trying to get my python twitter bot to tweet every 30 minutes on the hour. What should I do? [closed] 【发布时间】:2020-06-12 21:36:30 【问题描述】:

机器人需要在整点每 30 分钟发一次推文(即在 12:30,然后是 1:00,然后是 1:30...)。我理解 tweepy 和所有这些。我只需要弄清楚如何让计时器工作。我在想这样的事情:

if (time = "12:00") or (time = "12:30") or (time = "1:00") or...:
    # tweet

我不知道要使用什么包或如何设置它。

【问题讨论】:

时间实际上是一个日期时间对象还是一个时间字符串? 该尝试将立即失败。你不能在 if 语句中赋值。 我提供的代码实际上并没有被使用。我只是想知道我想做的事情是有意义的。如果时间在每小时的 30 分钟标记上,我只需要它来发推文 您好,欢迎来到 SO。你能展示你到目前为止所做的事情吗?您是否在 Google 上搜索过 python timer 或开发了代码?请更具体地说明您需要什么帮助,而不是“为我做这件事”之类的问题。 【参考方案1】:

所以使用 datetime 你实际上可以像这样得到分钟:

from datetime import datetime

time = datetime.now()

minutes = time.minute

或者在一行中:

from datetime import datetime

minutes = datetime.now().minute

现在你有了分钟,if 语句可以简化,因为你不看小时。

if minutes == 0 or minutes == 30:
    # do tweet

编辑:

你评论问: “也很好奇,这是否意味着我需要在 00 点运行我的程序,因为时间是通过 now 函数创建的?”

所以理论上这里有几种方法可以回答这个问题。首先将您的代码包装在一个函数中并不断调用它:

def tweet_check(minutes):
    minutes = datetime.now().minutes

    if minutes == 0 or minutes == 30:
        # do tweet

if __name__ == '__main__':
    # This would be how it constantly runs the check
    while true:
        tweet_check()

选项 1:

然后,当您希望机器人每 30 分钟发送一次推文时,您可以手动运行脚本。

选项 2

通过检查 if ma​​in == 'ma​​in' 您将能够将此脚本导入另一个脚本,然后按照您自己的条件运行它。作为导入的脚本,您可以使用调度程序在特定时间运行它。

选项 3:

将其作为系统计划任务 (windows) 或 cron 作业 (linux) 运行以使其在启动时运行。

但是,关键是要指出,如果您确实将其用作选项 2 或 3,那么最好对其进行修改,如果您希望它在任何时间都发送,则可以在其中传入一个可选变量。

所以我会这样修改它:

def tweet_check(time_check=True):
    if time_check:
        minutes = datetime.now().minutes

        if minutes == 0 or minutes == 30:
            # do tweet

    else:
        # do tweet

这是因为选项 2 和 3 都固有地内置了时间。所以在这里再做一次是过度/低效的。在这个简单的例子中,这不会有太大的不同,但是在几千条推文的规模上,它最终会滚动到下一分钟,然后会切断一些推文。

【讨论】:

正是我想要的。谢谢! @parisosuch 如果有帮助,您可以将其标记为已接受吗? 也很好奇,这是否意味着我需要在 :00 时运行我的程序,因为 time 是通过 now 函数创建的? 我将编辑我的帖子并处理您的评论。评论回复会有点长。 谢谢!我相信我写的东西也有效(检查帖子编辑)。我在一个在线 IDE 上运行它来测试它的功能。【参考方案2】:

您可以使用 Scheduler 库启动 here。试试这个作为它如何工作的例子,你显然可以在本地这样做,但不推荐这样做:

import schedule  

def job():  
    print("A Simple Python Scheduler.")  

# run the function job() every 30 minutes  
schedule.every(30).minutes.do(job)  

while True:  
    schedule.run_pending()  

【讨论】:

【参考方案3】:

我会研究 PyPI 调度模块:

https://pypi.org/project/schedule/

【讨论】:

以上是关于我试图让我的 python twitter 机器人每小时每 30 分钟发一次推文。我该怎么办? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

试图让 Twitter 机器人同时发布两张图片

如何让我的自定义不和谐机器人发送消息

试图让我的 Discord 机器人响应“我不是婴儿潮一代 >:(”但它不会响应。我该如何修复代码?

Python 脚本,用于转发特定推文的 twitter 机器人

如何使用机器人更改用户的 Twitter 名称?

twitter bot 和 python 的 Tweepy 问题