
Ich möchte einen YouTube-Kanal abonnieren und neue Videos automatisch auf meinen Linux-Rechner herunterladen.
Ich weiß, dass ich dies beispielsweise mit Miro machen könnte, aber ich werde die Videos nicht mit Miro ansehen, möchte die Qualität auswählen und es als Cronjob ausführen.
Es sollte in der Lage sein:
- Erkennen, welche Feedeinträge neu sind, und keine alten Einträge herunterladen
- Fehlgeschlagene/unvollständige Downloads aus älteren Sitzungen fortsetzen (oder zumindest erneut herunterladen)
Gibt es hierfür Komplettlösungen?
Wenn nicht, wäre es für mich ausreichend (vielleicht sogar vorzuziehen), einfach einen Kommandozeilen-RSS-Reader zu haben, der sich merkt, welche Einträge bereits vorhanden waren und die neuen Video-URLs schreibt (z. B.http://www.youtube.com/watch?v=FodYFMaI4vQ&feature=youtube_gdataaushttp://gdata.youtube.com/feeds/api/users/tedxtalks/uploads) in eine Datei. Den Rest könnte ich dann mit einem Skript erledigen bash
und youtube-dl
.
Welche Programme wären hierfür geeignet?
Antwort1
Ich habe es schließlich mit diesem bash
Skript geschafft:
#!/bin/bash
conffile="$@"
if [ ! -f "$@" ] || [ 3 -ne $(wc -l "$@" | grep -o '^[0-9]*') ]; then
echo "This script writes a list of new video ids into an output file."
echo "Argument must be a file containing three lines:"
echo " line 1: Feed url"
echo " line 2: Output file "
echo " line 3: Newest id from last program call. Leave empty for first run."
exit 1
fi
mapfile -t < "$conffile"
url="${MAPFILE[0]}"
outfile="${MAPFILE[1]}"
lastid="${MAPFILE[2]}"
echo "Processing $id:"
allids=$(wget -q -O- "$url" | sed 's,href,\nhref,g' | sed -n -e "s,^.*href='http://www.youtube.com/watch?v=\([A-Za-z0-9_-]*\).*$,\1,p")
for id in $allids; do
if [ "$lastid" == "$id" ]; then echo "No new items left." >&2; break; fi
echo "$id"
echo "Adding $id" >&2
done | tac >> "$outfile"
newlastid=$(echo $allids | grep -o "^[A-Za-z0-9_-]*")
echo "$url" > "$conffile"
echo "$outfile" >> "$conffile"
echo "$newlastid" >> "$conffile"
Es liest die Feed-URL, die Ausgabedatei und das neueste bekannte Video aus einer Konfigurationsdatei und extrahiert dann die Video-IDs aus dem Feed. Diese IDs werden dann mit der neuesten bekannten ID verglichen (neuestes Feed-Element zuerst). Neuere Elemente werden den Ausgabedateien hinzugefügt (jetzt das älteste Element zuerst).
Hier ist eine Beispielkonfigurationsdatei youtube_tedx.conf
:
http://gdata.youtube.com/feeds/api/users/tedxtalks/uploads
~/Documents/Movies/tedx/list.all
VxKMeE-gTQY
Dies würde durch den Aufruf von verwendet werden ./get_new_youtube.sh youtube_tedx.conf
.
Die Ausgabedatei ( list.all
) kann dann beispielsweise youtube-dl
mit einem Befehl wie verarbeitet werden youtube-dl -tca list.all && rm list.all
.