Telegram Bilder runterladen?

Die heutige Aufgabe war es alle Bilder die ich in Telegram mit Person XY ausgetauscht habe runterzuladen und auf meinem Computer/Handy zu sichern. Geht doch ganz einfach? Leider nicht…

Wie der aufmerksame Leser mittlerweile wissen sollte nutze ich kein WhatsApp. Kann ich als Facebook-Verweigerer ja auch garnicht.
Stattdessen nutze ich Telegram, und bin damit recht zufrieden. Vorallem weil Telegram (im Gegensatz zu WhatsApp) eine offene API hat die es leicht macht Bots zu programmieren.

Doch zurück zum Bilder sichern – Telegram hat (zumindest in der aktuellen Version) keine Möglichkeit alle Bilder die man mit einer Person ausgetauscht hat auf dem Handy zu sichern. Unter ‚Medien‘ kann man zwar alle anzeigen lassen, aber nur weiterleiten.
Hmmmm…

Kurzum, der Trick ist einfach: Ich leite alle Bilder (bis zu 100 auf einmal) einfach an einen Telegram Bot weiter. Und dieser Bot wird mittels eines kleinen Python-Scriptes dazu gebracht alle Bilder runterzuladen.
Dabei läd er jedes Bild in vier Versionen runter. Von ganz klein ~2KB bis „ganz groß“ ~400KB.

Hier also der Programmcode. Wie man einen Bot bekommt habe ich hier schonmal erklärt.

Wenn ihr Fragen oder Probleme habt: Nur raus damit!

#!/usr/bin/python3
import requests
import shutil

bottoken = "270292492:AAEqLmLS4QxxxxxxxxxxxxORiS5ULNeTJo"
print("Using Bot Token: " + str(bottoken))

# Request latest messages
url = "https://api.telegram.org/bot" + bottoken + "/getUpdates"
r = requests.get(url)
result = r.json()

# Iterate through all new messages
for m in result["result"]:
    # Check if a photo is present in Message
    if "photo" in m["message"]:
        # Iterate throuh all the photos of this message
        for p in m["message"]["photo"]:
            # Get the fileid of the photo
            fileid = p["file_id"]
            print(fileid)
      
            # Prepare the photo for download
            url = "https://api.telegram.org/bot" + bottoken + "/getFile"
            params = { "file_id": fileid }
            r = requests.get(url, params = params)
            photoreq = r.json()   
            
            # Get Filepath
            filepath = photoreq["result"]["file_path"]
            
            # Download the Image
            url = "https://api.telegram.org/file/bot" + bottoken + "/" + filepath
            filename = fileid + '.' + filepath.split('/')[1].split('.')[1]
            
            response = requests.get(url, stream = True)
            with open(filename, 'wb') as out_file:
                shutil.copyfileobj(response.raw, out_file)

 

 


Beitrag veröffentlicht

in

,

von

Schlagwörter:

Kommentare

12 Antworten zu „Telegram Bilder runterladen?“

  1. Christian

    Hallo Thomas!

    Super Beitrag, nur, wird das Script alle x Minuten per Crontab aufgerufen oder wie machst du das?

    Viele Grüße
    Christian

    1. Thomas

      Hallo Christian,

      danke fürs Lob.
      In dem Fall hatte ich das Script einfach direkt in der Shell aufgerufen, die 100 Bilder wegkopiert, neue in Telegram weitergeleitet und wieder das Script aufgerufen.
      Per Cronjob müsste eigentlich auch gehen. Die IDs der Bilder ändern sich ja nicht, somit werden die gleichen Bilder nicht doppelt gespeichert.

      Thomas

      1. Christian

        Alles klar, vielen Dank 🙂

        Gruß
        Christian

  2. =geheim

    Foto anklicken
    3 Punkte rechts oben anklicken
    in Galerie speichern anklicken, fertig.

    1. Stingray_1968

      Mache ich das ganze dann über PC oder local auf meinem handy?

  3. Ben

    Danke für das Script!
    Zwei Fragen: Ich habe versucht, statt copyfileobj() copy2() zu benutzen, um die Metadaten mit abzugreifen. Funktioniert aber nicht, weil dann anscheinend die Pfadangabe nicht stimmt. Ich habe ewig gesucht, finde aber keine Lösung für das Problem.
    Außerdem würde ich gerne auch meine mp4-Videos mit dieser Methode herunterladen. Hier gibt shutil.copyfileobj() zwar keine Fehlermeldung, allerdings werden auch keine Daten in die Datei geschrieben. Hast du eine Idee?
    Danke!

  4. Thomas

    Fürs runterladen von Bildern musst du sicherlich die alle Zeilen mit „photo“ anpassen damit er auch Videos nimmt. Ob da Metadateien drin sind weiß ich nicht, aber es sollte gehen wenn du dir den Pfad (url) mal manuell ausgeben lässt und dann die Datei mit dem Browser runterlädst, damit weißt du ob deine Dateien überhaut vorhanden sind.
    Hilft dir das?
    Thomas

  5. kies

    Alles sicherlich super und toll, aber nicht für jemand der einfach die Bilder aus telegramm (nicht einzeln) speichern will.
    Dieses Verfahren schickt lässt mich ernsthaft darüber nachdenken, ob telegramm wirklich die richtige Lösung für mich ist.

  6. jal2

    Hallo, ich habe das heute zum ersten Mal probiert. Einen Bot eingerichtet, ein GET auf https://api.telegram.org/bot/getMe liefert auch korrekte Informationen, aber ein GET auf https://api.telegram.org/bot/getUpdates sagt immer nur {„ok“:true,“result“:[]}, auch wenn ich zuvor Fotos an den Bot weitergeleitet hatte. Hat sich die API inzwischen geaendert? Muss ich mit dem offset Parameter arbeiten?

  7. Noch geheimer

    Ja bis heute bei jedem einzelnen Bild, super Sache wenn man eine ABM besucht.

  8. Anonymous

    Ach am PC kann man einfach auf „Kanalverlauf exportieren“ und dann wählt man zum Beispiel Bilder aus.

  9. Daniela Damm

    Hallo,

    ich bin ein Laie. Seit dem letzten Update bei Telegram kann ich keine Bilder meiner Wahl mehr in der Galerie speichern.

    Wenn ich in den Einstellungen auf „Chat Einstellungen“ den Knopf auf „Bilder in der Galerie“ speichern wähle, dann muss ich in Kauf nehmen, alle Bilder von Telegram in der Galerie zu haben. Da ich bei Telegram in den Gruppen surfe, kommen viele Bilder zusammen.

    Vor dem Update wählte ich bei Gefallen ein Bild, bediente die 3 Punkte und „in Galerie speichern“ und Bild in Galerie.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert