python-3.xtelegramtelethon

How to download a video using telethon


I'm working on telethon download_media and _download_document methods for downloading video from telegram. My code is something like this:

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)

But when a video is sent to channel and downloaded with this code, the video is not playable and the player prints this message: Cannot render the file. This code works on images and gif files but does not work on video files. What should i do?


Solution

  • I hope this code will help you. I used Telethon V0.19, but the previous versions are pretty much the same.

    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)