Bashスクリプトを使用してyoutube-dlを使用して、プレイリストのダウンロードを自動化しようとしています。 youtube-dlによってエラーがスローされなかったときに成功しました。
Content-to-shortエラーがあるとしましょう。次に、サイトを砲撃しないように90秒間スリープした後、プレイリスト内のファイルを完了するためにループしようとします。
しかし、何らかの理由でスリープが期待どおりに機能せず、サイトがhttp 429につながる後続のリクエストで攻撃されていることを経験しています。
スクリプトを改善するためにできること...ここに表示されている部分的なスクリプト
until youtube-dl --verbose --ignore-errors url-to-playlist; do
sleep 90;
done
間違ったループを使用していますか?もっと良い方法はありますか?
お時間をいただきありがとうございます
コマンドラインオプション--ignore-errors
とともにプレイリストをyoutube-dlに渡します。つまり、youtube-dlは終了する前にビデオのリスト全体をダウンロードしようとします。途中でいくつの障害に直面するかに関係なく。したがって、ビデオ#2が失敗した場合、ビデオ#3の要求はその直後に続きます。 Googleがどれほど警戒しているかはわかりませんが、あそこにはすでに鐘が鳴っています。
また、プレイリストの最後の動画がヒットした後でも、youtube-dlがゼロ以外の終了コードを返すことを確認してください。 readme でそれについて言及していないので、あなたのsleep 90
が実行されなくても私は驚かないでしょう。
それに、とにかくこのループは何が良いのでしょうか?同じプレイリストでyoutube-dlを再起動すると、すべてが再びダウンロードされます。最初に正常にダウンロードされたすべての動画を含みます。ただし、オプション--no-overwrites
および--continue
が役立つ場合があります。
GoogleがIPアドレス(HTTP 429)をブロックしないようにするには、オプション--sleep-interval
を使用することをお勧めします。例:
youtube-dl --verbose --ignore-errors --sleep-interval 10 url-to-playlist
ループの目的が失敗したビデオを最終的に成功するまで再試行し続けることであったかどうかはわかりません。私は望みません。次の理由により、それほど単純ではありません。