Como se inscrever em um feed do youtube na linha de comando do linux?

4

Quero me inscrever em um canal do youtube e baixar automaticamente novos vídeos para minha máquina Linux.

Eu sei que posso fazer isso, por exemplo com o miro, mas não vou assistir aos vídeos usando o Miro, quero escolher a qualidade e gostaria de executá-lo como um cronjob.

Deve ser capaz de:

  • saiba quais entradas de feed são novas e não faça o download de entradas antigas
  • retomar (ou pelo menos baixar novamente) downloads com falha / incompletos de sessões mais antigas

Existe alguma solução completa para isso?

Se não fosse o suficiente para mim (talvez até mesmo preferível) ter apenas uma linha de comando rss reader que lembra quais entradas já estiveram lá e grava as novas URLs de vídeo (por exemplo link de link ) em um arquivo. Eu poderia então realizar o resto usando um script bash e youtube-dl .

Quais seriam os programas utilizáveis para este propósito?

    
por Tim 04.10.2013 / 10:49

1 resposta

2

Eu finalmente fiz isso usando este script bash :

#!/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_-]*\).*$,,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 de feed, o arquivo de saída e o vídeo mais recente conhecido de um arquivo de configuração e, em seguida, extrai os IDs de vídeo do feed. Esses IDs são então comparados com o ID conhecido mais recente (o mais novo item de feed primeiro). 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

Qual 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 com um comando como youtube-dl -tca list.all && rm list.all .

    
por 04.10.2013 / 15:01