2008-06-21 19:24:42
私は半年ほど前まで動画共有サイトなんてほとんど利用したことがなかった。ふとしたことから、今は毎日のように新着情報を確認しているのだから、世の中何がどう変るか予測できない。
さて、MacOSXでは(もちろんWindowsでも)RealPlayerの11以降をインストールしていれば、動画を観ると自動的にRealPlayer Downloaderというのが動き出して動画ファイルを保存してくれる。でも、Linuxではそんな都合のいいものはないようだ。それに、病気で数日寝込んでいても、自動的に新着情報を確認してファイルを保存しておいてくれれば、ゆっくり保養できるというものだ。今日はPHPで試みてみる。Dailymotionという動画共有サイトの場合。
情報源として新着情報を取得するRSSのURLを利用する。www.dailymotion.com/rss/search/xxxx/1といふようなURLのはずだ。このxxxxというところにキーワードが入っている。IDを記録して、一度ダウンロードしたファイルを記録するids.txtというファイルを作る。もちろん、名前は何でもいい。ダウンロード用のflv_filesというフォルダを用意し、ファイルを保存できるような権限にしておく。そして、下のようなPHPスクリプトを書いてみた。
$data = file_get_contents("ids.txt");
$ids = explode("\n",$data);
$url = "http://www.dailymotion.com/rss/search/xxxx/1";
$xml = file_get_contents($url);
$items = explode("<item>",$xml);
array_shift($items);
array_pop($items);
foreach($items as $item){
$media0 = strpos($item,"<media:group>");
$media1 = strpos($item,"</media:group>",$media0);
$media = substr($item,$media0,$media1-$media0);
$links = explode("<media:content url=",$media);
$flv_url = substr($links[2],0,strpos($links[2]," type="));
$flv_url = str_replace("80x60","320x240",$flv_url);
$id0 = strpos($item,"<dm:id>");
$id1 = strpos($item,"</dm:id>",$id0);
$id = strip_tags(substr($item,$id0,$id1-$id0));
if(!in_array($id,$ids)){
$curl = "curl -L -o 'flv_files/".$id.".flv' ".$flv_url;
exec($curl);
file_put_contents("ids.txt","\n".$id,FILE_APPEND);
}
}
curlが必要なので、まだなかったらインストールする。ここでは、ファイル名はIDになる。もっと判りやすいものにしてもいいのかも知れない。curlで-Lを付けないと何もダウンロードできない。このオプションの意味が解らない人はご自分で調べていただきたい。flvファイルのurlにある"80x60"を"320x240"にしないと小さい画面のflvファイルがダウンロードされてしまうので後で悲しい思いをすることになる。
これをcronで週に一回とか一日一回とか動かしてやれば、自動的にファイルが保存されていくと思う。
PHPではXMLを扱うのにsimplexmlなど便利な関数があるのだが、コロンの付いたタグの扱い方が解らなかったので、愚直に文字列を刻んだ。curl関数というのもあるが、使い方を知らないので、こうしてみた。難しいことは苦手なのだ。
この方法で誰もが望み通りの結果が得られるとは私には保証できない。悪いものをダウンロードしてしまっても私は責任を取れないことを予めご了承願いたい。