我希望开始使用 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 时可能由几个原因导致。以下是一些需要检查的事项:
-
互联网连接: 确保有稳定的互联网连接。尝试访问其他网站或使用的连接运行其他网络相关任务以验证这一点。
-
代理设置: 如果使用的是代理,请确保它配置正确并且正在运行。 可以尝试使用已知的良好代理或在没有代理的情况下进行测试,以查看是否能解决问题。
-
API 凭据: 仔细检查在
TelegramClient
初始化中使用的api_id
和api_hash
是否正确。 可以在 Telegram 的 https://my.telegram.org/apps 上生成这些凭据。 -
Telegram API 限制: Telegram 对 API 请求设置了限制,以防止滥用。 如果在短时间内发送了太多请求,的 IP 地址可能会被暂时限制。 尝试增加请求之间的延迟或在遇到速率限制时实现指数退避机制。
-
防火墙或防病毒软件: 的防火墙或防病毒软件可能阻止了 Telethon 建立连接。 尝试暂时禁用它们或将 Telethon 添加到的例外列表中。
-
Telethon 版本: 确保使用的是最新版本的 Telethon。 可以使用
pip install --upgrade telethon
进行升级。 -
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