Linux コマンドラインから YouTube フィードを購読するにはどうすればいいですか?

Linux コマンドラインから YouTube フィードを購読するにはどうすればいいですか?

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-dlyoutube-dl -tca list.all && rm list.all

関連情報