
Quero me inscrever em um canal do YouTube e baixar automaticamente novos vídeos para minha máquina Linux.
Eu sei que poderia fazer isso por exemplo com o miro, mas não vou assistir os vídeos usando o Miro, quero escolher a qualidade e gostaria de rodar como um cronjob.
Deve ser capaz de:
- saiba quais entradas de feed são novas e não baixe entradas antigas
- retomar (ou pelo menos baixar novamente) downloads com falha/incompletos de sessões mais antigas
Existem soluções completas para isso?
Caso contrário, seria suficiente para mim (talvez até preferível) ter apenas um leitor de rss de linha de comando que lembrasse quais entradas já estavam lá e escrevesse os novos URLs de vídeo (por exemplohttp://www.youtube.com/watch?v=FodYFMaI4vQ&feature=youtube_gdatadehttp://gdata.youtube.com/feeds/api/users/tedxtalks/uploads) em um arquivo. Eu poderia então realizar o resto usando um bash
script e youtube-dl
.
Quais seriam os programas utilizáveis para esse fim?
Responder1
Finalmente fiz isso 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"
Ele lê o URL do feed, o arquivo de saída e o vídeo conhecido mais recente de um arquivo de configuração e, em seguida, extrai os IDs do vídeo do feed. Esses IDs são então comparados com o ID conhecido mais recente (primeiro o item de feed mais recente). Itens mais recentes que isso serão adicionados aos arquivos de saída (agora o item mais antigo primeiro).
Aqui está um exemplo de arquivo de configuração youtube_tedx.conf
:
http://gdata.youtube.com/feeds/api/users/tedxtalks/uploads
~/Documents/Movies/tedx/list.all
VxKMeE-gTQY
Que seria usado chamando ./get_new_youtube.sh youtube_tedx.conf
.
O arquivo de saída ( list.all
) pode então ser processado, por exemplo, usando youtube-dl
um comando como youtube-dl -tca list.all && rm list.all
.