コメント |
@DIV
mp4 に関する url フォーマットはたしか、http://blog.jimmyr.com/High_Quality_on_Youtube_11_2008.php(High Quality on Youtube) を参考にしました。
もともとは、その仕様を使った Firefox 拡張があって、コードを読むとそうなってたので、
調べたら上記リンクがヒットしたと記憶しています。その他のエントリは、http://logicalerror.seesaa.net/article/125694879.html(Firebugで動画ダウンロード)
をテストしていて、その URL を調べてみると結局ページ内に定義されていた事が解り、
Firebug を駆使して構造を確かめて作りました。
ここでは、その定義済みオブジェクトを参照する必要があったので、unsafeWindow を使っています。
それ以外は特別な処理はありません。
@END
@DIV
// ==UserScript==
// @name youtube download
// @namespace http://winofsql.jp/youtube
// @description youtube download links
// @include http://www.youtube.com/watch?v=*
// ==/UserScript==
var link = "<br><b style='padding:3px;background-color:#000000;color:#FFFFFF;line-height:24px;'>"
+"\u25bcdownload list</b><br>";
try {
// video_id
var mp4 = "http://www.youtube.com/get_video?video_id="
+unsafeWindow.yt.config_.SWF_ARGS['video_id']+"&t="
+unsafeWindow.yt.config_.SWF_ARGS['t']+"&fmt=18";
link = link + '<a href="' + mp4 + '" style="color:#0000FF"'
link = link + '>mp4 download</a><br>';
for (key in unsafeWindow.yt.config_.SWF_ARGS) {
if ( key == 'fmt_url_map' ) {
var mediaTarget = decodeURIComponent( unsafeWindow.yt.config_.SWF_ARGS[key] ) + "";
mediaTarget = mediaTarget.split("|")
var mcount = 0;
for (key2 in mediaTarget) {
if ( mcount != 0 ) {
link = link + '<a href="' + (mediaTarget[key2].split(","))[0] + '" style="color:#0000FF"'
link = link + '>download</a><br>';
}
mcount++;
}
}
}
var target = document.createElement("DIV");
target.innerHTML = link;
document.getElementById("watch-video-details-inner-less").appendChild(target);
}
catch( e ) {
alert(e);
}
@END |