ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
Greasemonkey : YouTube 動画ダウンロードリンク ( No.1 )
日時: 2010/01/30 16:09
名前: lightbox



拡張子:
mp4 に関する url フォーマットはたしか、High Quality on Youtube を参考にしました。
もともとは、その仕様を使った Firefox 拡張があって、コードを読むとそうなってたので、
調べたら上記リンクがヒットしたと記憶しています。その他のエントリは、Firebugで動画ダウンロード 
をテストしていて、その URL を調べてみると結局ページ内に定義されていた事が解り、
Firebug を駆使して構造を確かめて作りました。

ここでは、その定義済みオブジェクトを参照する必要があったので、unsafeWindow を使っています。
それ以外は特別な処理はありません。
拡張子:
// ==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);
}