ニコニコ動画から動画をDLするJetpack Feature
2009/9/25更新しました(Jetpack0.5でComponents.classesを使用するには - まめ畑)
息抜きにニコニコ動画から動画をダウンロードするFeatureを作ってみました。
既に、拡張やグリモンでありますがそのFeature簡易版です。
インストールは: Nico DL
インストールすると、ステータスバーに以下の様なアイコンが追加されます。
動画を再生するページで、この部分をクリックすると保存出来ます。
ログイン状態で操作して下さい。
用法容量にお気をつけ下さい。
MP4動画やエコノミーの判定は後ほど付けます。自動更新にしておくと便利です。
コードはこちら
/* @author: con_mame @url: http://d.hatena.ne.jp/con_mame/ @title: Nico DL @description: Download Movie File from NicoNico Douga @version: 0.1 */ (function(){ const ICON = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAG5JREFUOE+tU+0OABAI5Jl6/2dDtjNaJR+34UdcXZdcGtILmAAgosLLghZP2mV50SNWCaIVdfm8IcPpuRCYwo0AejUq+ELgOSATXFeAh9cEs0PbJnr+byuQln7rgSnhdIgWCZjG6CzMdrt/IUJYAffFJ2uA33mhAAAAAElFTkSuQmCC"; const CC = Components.classes; const CI = Components.interfaces; function getFlv(videoAddr){ try{ var saveFile = CC['@mozilla.org/filepicker;1'].createInstance(CI.nsIFilePicker); saveFile.init(jetpack.tabs.focused.contentWindow, "Save Nico Vide", CI.nsIFilePicker.modeSave); saveFile.defaultString = ".flv"; saveFile.appendFilters(CI.nsIFilePicker.filterAll); var ret = saveFile.show(); if(ret == CI.nsIFilePicker.returnCancel) return; var ios = CC["@mozilla.org/network/io-service;1"].getService(CI.nsIIOService); var url = ios.newURI(videoAddr, null, null); var iwp = CC['@mozilla.org/embedding/browser/nsWebBrowserPersist;1'].createInstance(CI.nsIWebBrowserPersist); var trans = CC["@mozilla.org/transfer;1"].createInstance(CI.nsITransfer); trans.init(url, saveFile.fileURL, videoAddr, null, null, null, iwp); iwp.progressListener = trans; iwp.saveURI(url, null, null, null, null, saveFile.file); }catch(e){ console.log(e); } } function showMessege(title, message){ jetpack.notifications.show({ title: title, body: message, icon: ICON }); } function doDownload(videoId){ $.ajax({ type: "GET", url: "http://www.nicovideo.jp/api/getflv/" + videoId, cache: false, success: function(info){ if(/&url=(.+?)&/.test(decodeURIComponent(info))){ getFlv(RegExp.$1); }else{ showMessege("Error", "Check Login"); } }, error: function(xtr, status, thrown){ showMessege("Error", status); } }); } jetpack.statusBar.append({ html: <> <div id="dl"><img src={ICON}/>DL!</div> </>, onReady: function(doc){ $(doc).click(function(){ var watchPage = jetpack.tabs.focused.url; if(/http:\/\/www.nicovideo.jp\/watch\/(.+)$/.test(watchPage)){ doDownload(RegExp.$1); }else{ return; } }); $("#dl", doc).css({ position: "absolute", paddingTop: "5px", fontSize: "12pt", fontWeight: "bold", cursor: "pointer" }); }, width: 50 }); })()