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)

Schreibe einen Kommentar zu Thomas Antwort abbrechen