
YouTube 채널을 구독하고 새 비디오를 내 Linux 컴퓨터에 자동으로 다운로드하고 싶습니다.
예를 들어 miro를 사용하여 이 작업을 수행할 수 있다는 것을 알고 있지만 Miro를 사용하여 비디오를 보지 않고 품질을 선택하고 cronjob으로 실행하고 싶습니다.
다음을 수행할 수 있어야 합니다.
- 어떤 피드 항목이 새로운지 확인하고 이전 항목을 다운로드하지 않음
- 이전 세션에서 다운로드가 실패했거나 완료되지 않은 경우 재개(또는 최소한 다시 다운로드)
이에 대한 완전한 솔루션이 있습니까?
그렇지 않다면 이미 어떤 항목이 있었는지 기억하고 새 비디오 URL을 작성하는 명령줄 RSS 리더를 갖는 것으로 충분할 것입니다(예: 더 바람직할 수도 있음).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, 출력 파일 및 알려진 최신 비디오를 읽은 다음 피드에서 비디오 ID를 추출합니다. 그런 다음 이러한 ID는 알려진 최신 ID(최신 피드 항목 먼저)와 비교됩니다. 이보다 새로운 항목이 출력 파일에 추가됩니다(이제는 가장 오래된 항목부터).
다음은 구성 파일의 예입니다 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