
Я хочу подписаться на канал YouTube и автоматически загружать новые видео на свой компьютер Linux.
Я знаю, что это можно сделать, например, с помощью Miro, но я не буду смотреть видео с помощью Miro, хочу выбирать качество и хотел бы запустить это как cronjob.
Он должен иметь возможность:
- знать, какие записи в ленте являются новыми, и не загружать старые записи
- возобновить (или, по крайней мере, повторно загрузить) неудачные/незавершенные загрузки из старых сеансов
Существуют ли какие-либо комплексные решения этой проблемы?
Если нет, то мне было бы достаточно (возможно, даже предпочтительнее) просто иметь консольный RSS-ридер, который запоминает, какие записи уже были, и записывает новые URL-адреса видео (например,http://www.youtube.com/watch?v=FodYFMaI4vQ&feature=youtube_gdataотhttp://gdata.youtube.com/feeds/api/users/tedxtalks/uploads) в файл. Затем я мог бы выполнить остальное с помощью bash
скрипта и youtube-dl
.
Какие программы можно использовать для этой цели?
решение1
В конце концов я сделал это с помощью этого 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_-]*\).*$,\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"
Он считывает URL-адрес фида, выходной файл и новейшее известное видео из файла конфигурации, а затем извлекает идентификаторы видео из фида. Затем эти идентификаторы сравниваются с последним известным идентификатором (сначала самый новый элемент фида). Элементы, более новые, чем этот, будут добавлены в выходные файлы (теперь сначала самые старые элементы).
Вот пример файла конфигурации youtube_tedx.conf
:
http://gdata.youtube.com/feeds/api/users/tedxtalks/uploads
~/Documents/Movies/tedx/list.all
VxKMeE-gTQY
Который будет использоваться при вызове ./get_new_youtube.sh youtube_tedx.conf
.
Затем выходной файл ( list.all
) можно обработать, например, с помощью youtube-dl
такой команды, как youtube-dl -tca list.all && rm list.all
.