最近の更新

関連


その他いろいろ

多機能フィードリーダSynapse製作中

2月までは目が回るほど忙しい

MODxでつくる! 最強のCMSサイト カバー
MODxでつくる! 最強のCMSサイト

YoutubeList2irv

初出:2007年03/31 更新:2007年04/02

この文書のキーワード: 動画, ダウンローダ, Python

YouTubeのプレイリストなどのURLを指定することで、含まれるビデオのFLVへのリンクを抽出し、Irvine用のキューリスト(.irv)を書き出すPython2.4スクリプトです。20060714現在のYouTubeに対応。

既にSQsyGRpiC7k.flvのようにIDのついたファイル名で保存している場合は、リネームにFLV renamerが便利です。

ブラウザからD&Dで使えるGUIフロントエンドを作ってみました。まだ機能が貧弱ですが… wxWidgetsをpy2exeするのは初めてなので他の環境で動くかは分かりません。動作報告を頂けると嬉しいです。

最新の更新

たびたび済みません。v1.3.4より、今度こそJapaneseCodecsのない環境で-a指定時にunicode decode errorが出るバグを修正したはずです。万一まだ問題が発生するようでしたらOS・Python環境/JapaneseCodecsの有無・指定したオプションを添えて連絡してください。
バグ報告くださった方ありがとうございました。

削除されたように見えるビデオの検索について

v1.1.0から通常のアクセスでは削除された旨表示されてDLできないビデオでもURLを割り出す(サルベージ)オプションを追加しました。(標準ではオフなので使用する場合は--brute-forceを指定してください)

主に"This video has been removed by the user."のためのスクリプトです。それ以外の理由(児ポ法違反など)によってプレビューページが削除されているビデオの場合、DLにより不利益を被る可能性があります。 自己責任で使ってください。

尚、v1.3.0より、ユーザが公開を取り消したビデオのみサルベージできるようにしました。併せてv1.2.1以前のバージョンの公開停止し、v1.2.1以前のソース/アーカイブの再配布は禁止としました。また、v1.3.1よりサーバリストは外部読み込みのみの対応となります。詳しくは下記をご覧ください。

This script is for downloading "This video has been removed by the user." videos. In other cases (such as videos violating SexualAbuse law), downloading those files with this script may cause a disadvantage for you. Please use it ON YOUR OWN RESPONSIBILITY.

サーバリストの用意

v1.3.1から、サーバの増加(変化)に対応するよう、リストを外部読み込みにしました。 このバージョンから、server_list.txtをスクリプトと同じディレクトリに入れないとサルベージ機能は使えません。 server_list.txtは、例えば以下のような1URL1行のテキストファイルです。

http://sjl-casing1.sjl.example.com/
http://sjl-casing2.sjl.example.com/
http://sjl-casing3.sjl.example.com/
http://v1.example.com/
http://v2.example.com/
http://v3.example.com/
hint: 近傍検索はこのリストの並び順が近いサーバを近傍と判定するので、あらかじめどの範囲のサーバにあるか分かっている場合は並びを変えることで効率化が期待できます。
このページではサーバリストの提供は行っていません。

負荷軽減のために

このスクリプトは、負荷軽減のために

を標準で行っています。このため、伝統的?に行われている「サーバリスト(にIDを付加したもの)をIrvineにCtrl+Bで展開貼り付けし400回余り試行する」サルベージ方法に比べ、負荷は低くなっているはずです。

使い方

コマンドプロンプトなどから、(exe版なら.pyを.exeと読み替えてください)

youtubelist2irv.py -b ベースファイル名 -l リストのURL -p 3(一つのビデオが実際には何分割で登録されているか) > list.irv
などとして、生成したlist.irvをIrvineに放り込みます。負荷をかけすぎないようになるべく1倍速以下で保存しましょう…
サルベージ機能を用いる場合は、
youtubelist2irv.py --brute-force -b ベースファイル名 -l リストのURL -p 3(一つのビデオが実際には何分割で登録されているか) > list.irv
などとします。
プレイリストではなく、ビデオ一つのURLを割り出したい場合は、
youtubelist2irv.py --brute-force --list-id ビデオのID(,区切りで幾つでもOKです) -b ベースファイル名 > list.irv
とする方が負荷の面でも良いでしょう。

自動保存

v1.1.0から総当たり検索を実装しましたが、これはかなりの時間を要するためリダイレクト指定し忘れなどのミスで割り出したURLが失われてしまうと大きな落胆があります。 それを軽減するために、割り出したURLは標準出力以外にyoutube_list.txtというファイルに自動で追記保存されます。また、--autosave-filenameに引数を指定することで任意のファイルに保存できます。

オプション/引数一覧

-l, --list-url
リストのURLを指定[これもしくは--list-id必須]
--list-id
改行区切りのIDリスト[--list-urlに優先]
--list-html-stdin
プレイリストのHTMLソースを標準入力から得る[--list-*と排他]v1.2.0新機能
--list-id-stdin
改行区切りのIDリストを標準入力から得る[--list-*と排他]v1.2.0新機能
-b, --file-name-base
保存ファイル名の基本部分[省略時は"episode"]
-a, --auto-titling
ビデオのタイトルを取得してファイル名にします[-bと排他]v1.3.2新機能
-p, --splitted-in-parts
一つのビデオが実際には何分割されているか[省略時は0]
--split-desc
上のオプションを指定したとき、通常はファイル名末尾に_01, _02, _03, ..と番号を振りますが、逆順に .., _03, _02, _01としたいとき[省略時はオフ]
--episodes-desc
--split-descと同様、これはビデオの通し番号の順番[省略時はオフ 指定時は下の-f, --fromも必要]
-f, --from
ビデオの通し番号の開始番号[省略時1]
--from-list=
リスト中の開始ビデオ番号[省略時1]v1.2.1新機能
--brute-force
削除されたように見えるビデオを総当たり検索する[省略時はオフ]v1.1.0新機能
--sleep
総当たり検索の一回のアクセス毎の停止時間[省略時は3秒]
--no-optimize
総当たり検索で検索順を効率化しない[省略時はオフ(最適化する)]v1.2.0新機能
--autosave-filename=
自動保存するファイル名[省略時はyoutube_list.txt]v1.1.0新機能
--server-list=
一行1URLのサルベージ用サーバリストv1.3.1新機能
-h, --help
使用方法の表示

ダウンロード

Irvineの使用全般にも言えることですが、複数のDL/探索プロセスを走らせるなど使用方法によってはネットワークやYouTubeサーバに過剰な負荷を与える可能性があります。本スクリプトの性質を理解し、通常使用の範囲内で利用してください。また、サルベージ機能の試行方法は単に経験上得られたものです。拾えない場合もあります。(現に実FLVのURLが?llnwd.net形式のものは不可)

新着順
※.pyを実行するにはPython2.4以上が必要となります。Pythonの入ってない環境ではexe同梱版を使ってください。

更新履歴

20060727 v1.3.4
今度こそタイトル付加のバグ修正
20060727 v1.3.3
自動タイトル付加のバグ修正、ファイル名に使えない文字を_に置換
20060726 v1.3.2
タイトルをファイル名にするオプション-a
20060724 v1.3.1
sleepは3秒以上、サーバリスト外部読み込み
20060724 v1.3.0
サルベージをユーザによる公開取り消しビデオに限定
20060719 v1.2.1
効率化のバグ修正、--from-list
20060719 v1.2.0
標準入力からID抽出、サーバ検索の効率化
20060714 v1.1.0
削除されたように見えるビデオの総当たり検索、自動保存
20060703 v1.0.0
公開

メモ

v1.3.2-v1.3.3のunicode変換できなかったバグはpy2exeでjapanese, encodingsモジュールを含めていなかったのが原因でした。

Note JapaneseCodecs を利用したプログラムを py2exe (後述) でアプリケーションとして構築する場合,特に Python 2.2 では, python setup.py py2exe --packages japanese,encodings のように,japanese パッケージと encodings パッケージが含まれるよう py2exe に指示しなくてはなりません.
とのことです。参考:win32modules

連絡

連絡はuglydog.7bit[at]gmail.comまでどうぞ。Web上での紹介は結構ですが、雑誌などへのソフト収録等はご遠慮ください。 使い方に関する質問は受け付けていません。