webdevqa.jp.net

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

YouTubeチャンネルに登録して、新しいビデオをLinuxマシンに自動的にダウンロードしたい。

私はこれを行うことができることを知っています。 miroを使用しますが、Miroを使用してビデオを視聴することはありません。品質を選択したいので、cronジョブとして実行したいと思います。

次のことができるはずです。

  • どのフィードエントリが新しく、古いエントリをダウンロードしないかを知る
  • 古いセッションからのダウンロードの失敗/不完全な再開(または少なくとも再ダウンロード)

これに対する完全な解決策はありますか?

そうでない場合は、コマンドラインrssリーダーを使用して、どのエントリが既に存在しているかを記憶し、新しいビデオURLを書き込むだけで十分です(例: http://www.youtube.com/watch?v = FodYFMaI4vQ&feature = youtube_gdata from http://gdata.youtube.com/feeds/api/users/tedxtalks/uploads )をファイルに。その後、bashスクリプトとyoutube-dlを使用して残りを実行できます。

この目的に使用できるプログラムは何でしょうか?

4
Tim

私はついにこのbashスクリプトを使用してそれを行いました。

#!/bin/bash

conffile="[email protected]"

if [ ! -f "[email protected]" ] || [ 3 -ne $(wc -l "[email protected]" | 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を使用して処理できます。

2
Tim