You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让基于tweepy的Twitter Bot每24小时自动循环发推

Tweepy Twitter Bot 24小时自动运行实现方案

现有代码的核心问题

当前脚本执行完一次postKasumi推送流程后就会走到主逻辑末尾退出进程,既没有循环触发的逻辑,也没有间隔等待的设计,因此只能发一次就停止运行。可以根据自己的部署场景选择下面两种改造方案。


方案1:代码内置常驻循环,零额外工具部署

直接修改main函数的逻辑,加入死循环、异常捕获、固定间隔等待的逻辑,不需要依赖外部系统工具,跑一次脚本就能持续按间隔推送:

def main():
    api = create_api()
    # 设置推送间隔:24小时 = 86400秒
    PUSH_INTERVAL = 24 * 60 * 60
    while True:
        try:
            # 执行推送逻辑
            postKasumi(api)
        except Exception as push_err:
            # 捕获单次推送的所有异常,避免进程因为单次报错直接崩溃退出
            logger.error(f"本次推送执行失败:{str(push_err)}")
        # 等待设定的间隔时间后进入下一轮循环
        logger.info(f"将在{PUSH_INTERVAL//3600}小时后执行下一次推送")
        time.sleep(PUSH_INTERVAL)

这个方案的注意点

  • 必须保留异常捕获逻辑:Twitter接口偶发限流、本地网络临时波动都是常见问题,如果没有捕获,单轮报错就会导致整个常驻进程直接终止
  • 这种运行方式需要保证运行脚本的设备(本地电脑、云服务器)全程不关机、进程不被意外杀掉,一旦进程中断就会停止推送
  • 原代码中切换工作目录的逻辑要保留,避免脚本在定时触发时找不到相对路径下的图片、配置文件资源

补充:如果你的推送内容需要附带本地图片,可以在postKasumi函数里调整接口调用逻辑,解决原代码仅发文字的问题:

def postKasumi(api):
    logger.info("Generating image...")
    randomNum = random.randint(0,len(sourceimg)-1)
    img_path = sourceimg[randomNum]
    logger.info("Uploading image...")
    # 先上传本地图片,获取媒体ID
    media = api.media_upload(filename=img_path)
    # 发推时带上上传的媒体ID
    api.update_status(status="#Anime " + sourceimg.get(randomNum), media_ids=[media.media_id_string])
    logger.info("Done!")

方案2:系统定时任务触发,长期稳定性更高

如果不想让Python进程一直常驻占用资源,可以把脚本改回「单次执行完就退出」的原始版本(不需要循环和sleep逻辑),直接用操作系统自带的定时调度能力,设置每24小时自动唤醒一次脚本运行:

  • Windows 系统:通过「任务计划程序」新建定时任务,设置触发器为每日固定时间,执行操作选择对应Python解释器调用你的脚本
  • Linux/Mac 系统:通过crontab配置定时规则,到点自动执行脚本,不需要手动保持Python进程运行

这个方案的注意点

  • 配置定时任务时一定要填写脚本的绝对路径,不要用相对路径,避免系统调度时找不到脚本位置
  • 相比常驻循环,这种方式的抗干扰性更强:哪怕服务器重启、之前的进程意外中断,系统定时任务到点依然会自动拉起脚本执行,不需要人工重启

内容的提问来源于stack exchange,提问作者Diogo O. Souza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 10:45:03