
Quiero suscribirme a un canal de YouTube y descargar automáticamente nuevos videos a mi máquina Linux.
Sé que podría hacer esto, por ejemplo, con Miro, pero no veré los videos usando Miro, quiero elegir la calidad y me gustaría ejecutarlo como un cronjob.
Debería poder:
- saber qué entradas del feed son nuevas y no descargar entradas antiguas
- reanudar (o al menos volver a descargar) descargas fallidas/incompletas de sesiones anteriores
¿Existen soluciones completas para esto?
Si no, sería suficiente para mí (tal vez incluso preferible) tener un lector de rss de línea de comando que recuerde qué entradas ya han estado allí y escriba las nuevas URL de los videos (por ejemplo,http://www.youtube.com/watch?v=FodYFMaI4vQ&feature=youtube_gdatadehttp://gdata.youtube.com/feeds/api/users/tedxtalks/uploads) en un archivo. Luego podría realizar el resto usando un bash
script y youtube-dl
.
¿Cuáles serían los programas utilizables para este propósito?
Respuesta1
Finalmente lo hice usando este bash
script:
#!/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"
Lee la URL del feed, el archivo de salida y el vídeo conocido más reciente de un archivo de configuración y luego extrae los identificadores de vídeo del feed. Luego, estos identificadores se comparan con el último identificador conocido (primero el elemento más reciente del feed). Los elementos más nuevos se agregarán a los archivos de salida (ahora el elemento más antiguo primero).
Aquí hay un archivo de configuración de ejemplo youtube_tedx.conf
:
http://gdata.youtube.com/feeds/api/users/tedxtalks/uploads
~/Documents/Movies/tedx/list.all
VxKMeE-gTQY
Que se usaría llamando ./get_new_youtube.sh youtube_tedx.conf
.
El archivo de salida ( list.all
) luego se puede procesar, por ejemplo, usando youtube-dl
un comando como youtube-dl -tca list.all && rm list.all
.