繁体   English   中英

Python 脚本使用 Telethon 从 Telegram 频道下载所有媒体

[英]Python script to download all the media from a Telegram Channel using Telethon

我试图使用 Telethon 但结果真的很慢

所以我尝试按照这篇文章中的建议使用这个要点

我有以下错误。 谁能帮帮我吗?

这是我的代码:

from telethon.sync import TelegramClient
from FastTelethon import download_file
import os
import asyncio


async def getAllMediaFromchannel():
    os.chdir("/home/gtxtreme/Documents/McHumour")
    api_hash = "<hidden>"
    api_id = <hidden>

    client = TelegramClient('MCHumour', api_id, api_hash)
    client.start()
    ch_entity = await client.get_entity("telegram.me/joinchat/AAAAAEXnb4jK7xyU1SfAsw")

    messages = client.iter_messages(ch_entity, limit=50)

    def progress_cb(current, total):
        print('Uploaded', current, 'out of', total,
              'bytes: {:.5%}'.format(current / total))

    async for msg in messages:
        result = await download_file(client, msg.document, "/home/gtxtreme/Documents/McHumour",
                                     progress_callback=progress_cb)
        print("*************************\nFile named {0} saved to {1} successfully\n********************".format(
            msg.message, result))


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(getAllMediaFromchannel())

这是我的错误

[gtxtreme@archlinux ~]$ python PycharmProjects/python_gtxtreme/tgBotrev1.py 

PycharmProjects/python_gtxtreme/tgBotrev1.py:13: RuntimeWarning: coroutine 'AuthMethods._start' was never awaited
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Traceback (most recent call last):
  File "PycharmProjects/python_gtxtreme/tgBotrev1.py", line 31, in <module>
    loop.run_until_complete(getAllMediaFromchannel())
  File "/usr/lib/python3.8/asyncio/base_events.py", line 612, in run_until_complete
    return future.result()
  File "PycharmProjects/python_gtxtreme/tgBotrev1.py", line 14, in getAllMediaFromchannel
    ch_entity = await client.get_entity("telegram.me/joinchat/AAAAAEXnb4jK7xyU1SfAsw")
  File "/usr/lib/python3.8/site-packages/telethon/client/users.py", line 310, in get_entity
    result.append(await self._get_entity_from_string(x))
  File "/usr/lib/python3.8/site-packages/telethon/client/users.py", line 512, in _get_entity_from_string
    invite = await self(
  File "/usr/lib/python3.8/site-packages/telethon/client/users.py", line 30, in __call__
    return await self._call(self._sender, request, ordered=ordered)
  File "/usr/lib/python3.8/site-packages/telethon/client/users.py", line 56, in _call
    future = sender.send(request, ordered=ordered)
  File "/usr/lib/python3.8/site-packages/telethon/network/mtprotosender.py", line 170, in send
    raise ConnectionError('Cannot send requests while disconnected')
ConnectionError: Cannot send requests while disconnected

[gtxtreme@archlinux ~]$

任何其他合适的方式也将是首选

client.start是一个异步方法,所以你应该等待它。

如果它在 function 内,它只需要等待。 如果您在 function 电视节目之外调用它,则为方便起见隐式添加 await

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM