首页 > 编程问答 >马拉松 - 连接错误

马拉松 - 连接错误

时间:2024-07-21 08:17:29浏览次数:9  
标签:python telegram telethon

我希望开始使用 Telegram 客户端 (与 Telethon),并收到以下错误。我现在的目标是尝试下载过去几天公共电报组中的历史消息。

ConnectionError                           Traceback (most recent call last)
Cell In[2], line 4
      1 client = TelegramClient(api_name, api_id, api_hash)
      3 try:
----> 4     async with client.takeout() as takeout:
      5         async for message in takeout.iter_messages(chat, offset_date=datetime.date.today() - datetime.timedelta(days=3), reverse=True):
      6             data = {"chat": chat, "sender": message.sender_id, "text": message.text, "date": message.date}

我的代码非常标准:

client = TelegramClient(api_name, api_id, api_hash)
chat = ['whalebotalerts']

try:
    async with client.takeout() as takeout:
        async for message in takeout.iter_messages(chat, offset_date=datetime.date.today() - datetime.timedelta(days=3), reverse=True):
            data = {"chat": chat, "sender": message.sender_id, "text": message.text, "date": message.date}
            print(data)

except errors.TakeoutInitDelayError as e:
    print('Must wait', e.seconds, 'before takeout')

我在文档中没有找到任何明确的说明。有谁知道如何解决这个问题?

感谢帮助。


遇到的 ConnectionError 在尝试使用 Telethon 连接到 Telegram 时可能由几个原因导致。以下是一些需要检查的事项:

  1. 互联网连接: 确保有稳定的互联网连接。尝试访问其他网站或使用的连接运行其他网络相关任务以验证这一点。

  2. 代理设置: 如果使用的是代理,请确保它配置正确并且正在运行。 可以尝试使用已知的良好代理或在没有代理的情况下进行测试,以查看是否能解决问题。

  3. API 凭据: 仔细检查在 TelegramClient 初始化中使用的 api_id api_hash 是否正确。 可以在 Telegram 的 https://my.telegram.org/apps 上生成这些凭据。

  4. Telegram API 限制: Telegram 对 API 请求设置了限制,以防止滥用。 如果在短时间内发送了太多请求,的 IP 地址可能会被暂时限制。 尝试增加请求之间的延迟或在遇到速率限制时实现指数退避机制。

  5. 防火墙或防病毒软件: 的防火墙或防病毒软件可能阻止了 Telethon 建立连接。 尝试暂时禁用它们或将 Telethon 添加到的例外列表中。

  6. Telethon 版本: 确保使用的是最新版本的 Telethon。 可以使用 pip install --upgrade telethon 进行升级。

  7. client.start() 确保在尝试使用 client.takeout() 之前调用 client.start() 来连接到 Telegram。

以下是包含上述检查的更新后的代码示例:

from telethon import TelegramClient, errors
from telethon.sessions import StringSession
import datetime

# 使用的 API ID 和哈希值替换这些值
api_id = YOUR_API_ID
api_hash = 'YOUR_API_HASH'

# 如果想使用特定会话,请取消注释以下行
# session_string = 'YOUR_SESSION_STRING'
# client = TelegramClient(StringSession(session_string), api_id, api_hash)

# 否则,使用默认会话
client = TelegramClient('my_session', api_id, api_hash)

async def main():
    chat = ['whalebotalerts']

    try:
        await client.connect()  # 在此处添加此行

        async with client.takeout() as takeout:
            async for message in takeout.iter_messages(chat, offset_date=datetime.date.today() - datetime.timedelta(days=3), reverse=True):
                data = {"chat": chat, "sender": message.sender_id, "text": message.text, "date": message.date}
                print(data)

    except errors.TakeoutInitDelayError as e:
        print('必须等待', e.seconds, '才能提取')
    except ConnectionError as e:
        print('连接错误:', e)

with client:
    client.loop.run_until_complete(main())

如果在尝试了这些步骤后仍然遇到问题,请提供有关该错误的更多上下文,例如完整的错误消息和正在使用的 Telethon 版本。

标签:python,telegram,telethon
From: 78774151

相关文章

  • 如何在Python中给jupyter单元标准输入?
    我正在尝试在接受用户输入的jupyter笔记本上运行一个程序,但我不知道如何让它读取标准输入。例如,如果我使用shift-enter:a=input()print(a)运行代码,则单元格指示它正在运行,但不接受我的输入。我如何让它接受输入?你遇到的问题是Jupyternotebook中的代码单元默认......
  • Python:如何从 csvreader 列表中删除括号和单引号?
    Pythonn00b在这里。尝试使用csvreader从文件导入数组并打印一个值,但它添加了括号和单引号。这是我的代码:importrandomimportcsvwithopen('crimes.csv','r')ascsvfile:crimes=list(csv.reader(csvfile))hello=["Hello","Greetings","Hi&q......
  • Python 中的多行输入,支持空行并在控制台中检查“\n”
    您好,亲爱的社区,在解决某个竞赛任务时出现了问题。我解决了它,但由于输入棘手而无法交付。我在谷歌上搜索并尝试了几种找到的方法,但如果应用于此任务,它们中的每一种都有一些弱点。而且我无法完全重现所应用的输入,因为它嵌入在竞赛界面中;我可能只依赖描述。这就是为什么我......
  • Python Pandas - 读取 CSV 或 Excel
    我允许用户上传CSV或Excel文件。我正在使用pandas读取文件并创建数据框。由于我无法预测用户将上传哪种文件类型,因此我将pd.read_csv()和pd.read_excel()包装在try/except块中。ifform.validate_on_submit():input_filename=secure_filename(form.file.da......
  • 如何在 python 脚本中调用 robocopy 来批量复制多个文件夹?
    我正在尝试在网络驱动器之间移动多个大文件夹(>10Gb、>100个子文件夹、>2000个文件)。我尝试过在python中使用Shutil.copytree命令,它工作得很好,只是由于不同的原因它无法复制一小部分(<1%的文件)。我相信robocopy对我来说是最好的选择,因为我可以创建一个记录传输过......
  • 如何在Python中使用装饰器动态创建类方法?
    我正在开发一个Python项目,我需要在运行时动态地为类创建方法。我想使用装饰器根据一些外部配置将这些方法添加到类中。要求是:装饰器应该从外部配置(例如字典)读取方法定义。装饰器应该动态地将这些方法添加到类中。每个生成的方法都应具有配置中指定的自己唯一的实现。以......
  • python 中的可扩展视频文件完整性验证
    我的目录包含约100万个视频文件,嵌套在100个子目录下。我想编写一个python脚本来验证这些文件没有损坏,然后删除损坏的文件。做到这一点最有效的方法是什么?它运行的机器有64个cpu核心。当然,以下是如何在Python中构建可扩展视频文件完整性验证器的步骤,该验证器可以......
  • Python:对很高维的矩阵进行对角化?
    目前我正在研究一个涉及对角化矩阵以获得特征值和特征向量的问题。但现在我想将问题扩展到200,000x200,000的尺寸。我查找了如何将矩阵存储在numpy中,有人建议使用PyTables。看起来很有希望。但我想知道哪里有工具可以帮助对PyTables中的矩阵存储进行对角化。......
  • 除了curses之外,是否有一个python包可以轻松控制终端的输出?
    我现在正在处理一些小项目,我对GUI的偏好是终端中漂亮的文本界面。我宁愿不强迫用户处理Windowscurses二进制文件,所以我正在寻找不同的选项。我已经发现了asciimatics,但我想考虑所有可能的选择。如果有人有任何经验或知道解决此用例的包,我将不胜感激。谢谢你说的没错......
  • 当值来自函数 python unittest 时,如何模拟全局变量
    我必须在python中模拟全局变量,但变量值来自另一个函数。当我导入文件时,这个函数正在运行,但我想要那里的模拟值。secrets.pyimporttracebackimportloggingimportboto3importosimportjsonlogger=logging.getLogger()logger.setLevel(logging.INFO)secret_......