我正在研究 telethon
download_media
和 _download_document
从电报下载视频的方法。我的代码是这样的:
def callback(update):
Channel_Entity = client.get_entity(Channel_List) #Get specific Channel information
file_name = str(document_id)+'.mp4'
current_path = os.getcwd()
file_path_gif = current_path+'/media/gif'
file = open(os.path.join(file_path_gif,file_name),'wb')
if isinstance(update, UpdateNewChannelMessage): #Check Update message in channel
if update.message.to_id.channel_id == Channel_Entity.id:
client._download_document(update.message.media, file, update.message.date, progress_callback=None)
# OR
client.download_media(update.message, file, progress_callback=None)
但是,当视频发送到频道并使用此代码下载时,视频无法播放,并且播放器会打印以下消息: 无法渲染文件。 此代码适用于图像和 gif 文件,但不适用于视频文件。我该怎么办?
我希望这段代码能对您有所帮助。我用的是
Telethon V0.19
,但是之前的版本几乎是一样的。
from telethon import TelegramClient
api_id = XXXXXXX
api_hash = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'
phone_number = '+98XXXXXXXXX'
################################################
channel_username = 'tehrandb'
################################################
client = TelegramClient('session_name',
api_id,
api_hash)
assert client.connect()
if not client.is_user_authorized():
client.send_code_request(phone_number)
me = client.sign_in(phone_number, input('Enter code: '))
# ---------------------------------------
msgs = client.get_messages(channel_username, limit=100)
for msg in msgs.data:
if msg.media is not None:
client.download_media(message=msg)
2024 更新代码!
将此文件保存到Python文件中并运行它....
from telethon import TelegramClient, events
import telethon.tl.types
api_id = id
api_hash = hash
channel = group/channel username
client = TelegramClient('anon', api_id, api_hash)
async def process_messages():
# You can use any chat object here
chat = await client.get_entity(channel)
async for message in client.iter_messages(chat):
if (
hasattr(message, 'media') and
hasattr(message.media, 'document') and
hasattr(message.media.document, 'mime_type') and
message.media.document.mime_type == 'video/mp4'
):
await client.download_media(message=message , file='file_name.mp4')
# The message is a video message
print(f'Found video message: {message.id}')
with client:
client.loop.run_until_complete(process_messages())