You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

迁移Twitter聊天机器人后Tweepy用户流初始化报错,求配置方案

解决Tweepy UserStream迁移后的连接与SSL错误

看起来你在迁移Twitter聊天机器人后遇到了两个核心问题:连接超时和SSL证书验证失败,结合你的服务器环境,我来一步步帮你排查解决:

一、先处理SSL证书验证失败问题

你的服务器用的是OpenSSL 1.0.1f,这个2014年的旧版本已经不支持现代TLS协议和新的证书链,这大概率是SSL3_GET_SERVER_CERTIFICATE:certificate verify failed错误的根源。可以按以下步骤修复:

  1. 更新系统CA证书
    先更新Ubuntu的根证书包,确保系统能识别Twitter的合法证书:

    sudo apt-get update
    sudo apt-get install --reinstall ca-certificates
    sudo update-ca-certificates
    
  2. 升级OpenSSL版本
    1.0.1f版本过于老旧,建议升级到更安全的版本。在Ubuntu14.04上可以通过PPA安装更新的OpenSSL:

    sudo add-apt-repository ppa:openssl/latest
    sudo apt-get update
    sudo apt-get install openssl
    

    安装完成后用openssl version确认版本是否更新到1.0.2或更高。

  3. 给Tweepy手动指定CA证书路径
    如果升级后问题仍存在,可以在初始化Stream时手动指定系统的CA证书路径:
    先确认系统CA证书文件路径(一般是/etc/ssl/certs/ca-certificates.crt),然后修改代码:

    twitterStream = Stream(auth, listener(), ca_certs='/etc/ssl/certs/ca-certificates.crt')
    

二、解决连接超时问题

Max retries exceeded with url: /1.1/user.json... Connection timed out这个错误可能有几个原因,逐一排查:

  1. 检查服务器防火墙与网络规则
    确认新服务器的防火墙(比如ufw)没有阻止出站的443端口请求:

    sudo ufw status
    # 如果443端口未开放,执行:
    sudo ufw allow out 443/tcp
    

    同时用curl测试是否能连接到Twitter的userstream端点,验证网络连通性:

    curl -v https://userstream.twitter.com/1.1/user.json
    

    如果curl也超时,说明是网络层面的问题,需要联系服务器提供商确认是否有网络限制。

  2. 更换Tweepy的Stream初始化方式
    注意Tweepy 3.5.0的userstream()方法已经被标记为过时,建议改用filter()方法并指定跟踪自己的用户ID,效果完全一致:

    # 先通过API.get_user()获取自己的用户ID,替换成实际数值
    my_user_id = 123456789
    twitterStream = Stream(auth, listener())
    twitterStream.filter(follow=[str(my_user_id)])
    

    这样可以避免旧方法可能存在的端点兼容问题。

  3. 优化重试与超时设置
    你的代码已有重试逻辑,但可以优化参数减少频繁请求带来的压力:

    # 给Stream添加超时设置,避免长时间无响应挂起
    twitterStream = Stream(auth, listener(), timeout=60)
    

    同时把重试间隔从30秒调整到60秒以上,降低被Twitter限制的风险。

三、升级老旧依赖包

你的pyOpenSSL 0.13requests 2.11.1版本也偏旧,建议升级到适配新环境的版本:

pip install --upgrade pyopenssl requests==2.27.1

(注:requests 2.27.1是支持Python2.7的最后一个稳定版本)

把这些步骤逐一尝试,应该能解决你的问题。

内容的提问来源于stack exchange,提问作者Anuvrat Kulkarni

火山引擎 最新活动