3日連続Opera9.5記事。昨日のOpera9.5の感想+不具合記事でご紹介したby edvakf in hatenaさんで面白い記事を見つけました。こちら[ OperaでCacheを効果的に探す方法 ]。
Operaで動画を見ると、所定のフォルダ(例. ユーザーフォルダ\Local Settings\Application Data\Opera\Opera\profile\cache4\)にキャッシュファイルとしてどんどん保存されていきます。YouTubeやニコニコ動画でもソレは同じこと。おかげで特別な保存用ソフトなどを使わなくてもキャッシュファイルをあされば動画を自分のPCに保存できるわけです(まぁ大抵のブラウザで同じことが出来ますが)。
ところがOpera9.5からはキャッシュファイルの扱いが変わってしまい、拡張子を削った名前にリネームされてキャッシュされるようになりました。一見しただけではどれが動画のキャッシュファイルかわからなくなってしまったのです。ファイルサイズの大きいものに当たりをつけて、拡張子をつけて再生を試みる……ああ、最近はmp4とflvの2種類あるからどっちの拡張しかわからない!
数万のキャッシュファイルがうごめくフォルダでそんな作業をするのは、はっきり言って超面倒。もっとこう、ニコニコのキャッシュっぽいものを手軽に見つけられないだろうか! そんな要望が起きることを予見してか、どこかのどなたかがOpera:cacheというOpera内蔵のキャッシュフォルダブラウザページ(?)にインクリメントサーチ機能をつけました。キャッシュと一緒に記録されている元URLに対して検索をかけられるようになったのです。どういうことかというと、"nicovideo.jp"というURLで取得したキャッシュファイルだけをピンポイントに表示できるようになったということ。これで当たりをつけやすくなった!
しかしまだ面倒なことには変わりません。どれがなんの動画かわからないし、管理も出来ない! そこで今回僕が作ったのが"ニコニコ動画の動画サーバーから落としたファイルだけを表示してサムネイルも表示させるOpera用スクリプト"。タイトルが長ェ!!
![]()
どういったものかといいますと、キャッシュファイルの元URLに"nicovideo.jp/smile?"(=動画が置いてあるサーバーのURL)を含むキャッシュファイルを抜き出し、そのURLに含まれるニコニコの動画IDを抽出、そのIDからサムネイルをニコニコ動画のサムネイルサーバーから呼び出して表示させる、てなところ。まぁ実際に使ってみたようすをスクリーンショットでアップしましたのでどうぞ。
以下がコード。なお大半の部分は先述のedvakfさんの手によるもの。こちらのリンク先で詳しい解説がなされていますので、まずはそちらをご覧あれ。
<script type='text/javascript'>
document.addEventListener('load',
function() {
for(var i=0; document.links[i]; i++){
document.links[i].target = '_blank';
};
var l = document.getElementsByTagName('tr');
var sf = document.createElement('input');
sf.type = 'text';
sf.defaultValue='検索';
sf.style='margin:0 4px;float:right;';
sf.addEventListener('focus',
function(){
if(this.value==this.defaultValue){this.value=''}
},false);
sf.addEventListener('blur',
function(){
if(!this.value){this.value=this.defaultValue}
},false);
sf.addEventListener('keyup',
function(){
var v=this.value;
for(var i=0, li; li=l[i]; i++){
var p=li.lastChild.firstChild.innerText;
if(p && p.indexOf(v)==-1){
li.style='display: none'
}else{
li.style='display: table-row'
}
}
},false);
var inp=document.createElement('input');
inp.type='button';
inp.value='サムネイル';
inp.style='float:right;';
inp.addEventListener('click',
function(){
var b=/\.(jpe?g|bmp|gif|png|ico|swf|flv)$/i;
var f=/\.(swf|flv)$/i;
for(var i=0, li; li=l[i]; i++){
var p=li.lastChild.firstChild;
var c=li.lastChild.firstChild.innerText;
if(li.offsetHeight!=0 && p.childNodes.length<2){
if(b.test(c)){
var stl='float:right; border:1px dotted black; margin:1px; padding:1px;';
if(f.test(c)){
var dv=document.createElement('div');
p.appendChild(dv);
dv.innerHTML='<EMBED src='+p.href+'>';
var fh=dv.firstChild;
fh.setAttribute('height', 100);
fh.setAttribute('width', 100);
fh.setAttribute('style', stl+' content:normal; outline:none; color:inherit;')
}else{
var image=document.createElement('img');
image.setAttribute('src',p.href);
if(!image.height || image.height>100){
image.height='100'
};
if(!image.width || image.width>100){
image.width='100'
};
image.setAttribute('style', stl);
p.appendChild(image)
}
}
}
}
}, false);
var th=document.getElementsByTagName('th')[2];
th.appendChild(inp);
th.appendChild(sf);
var Nico = document.createElement('input');
Nico.type='button';
Nico.value='ニコニコ抽出';
Nico.style='float:right;margin-right:6px;';
Nico.addEventListener('click',
function(){
var v='nicovideo.jp/smile?';
for(var i=1, li, NicoA; li=l[i]; i++){
var p = li.lastChild.firstChild.innerText;
if(p && p.indexOf(v)==-1){
li.style = 'display: none'
}else{
li.style = 'display: table-row';
li.lastChild.firstChild.href.match(/(m|v)=([0-9]+)/img);
if(RegExp.$1 == 'm'){
var VideoMIME = "video/mp4";
}else{
var VideoMIME = "video/x-flv";
}
var Nico = RegExp.$2;
var Video = 'file://localhost/C:/Documents%20and%20Settings/(ユーザー名)/Local%20Settings/Application%20Data/Opera/Opera/profile/cache4/' + li.firstChild.innerText;
li.firstChild.innerHTML = '<a type="' + VideoMIME + '" href="' + Video + '"><img src="http://tn-skr.smilevideo.jp/smile?i=' + Nico + '" width="130" height="100"><br />sm' + Nico + ' (' + VideoMIME + ')</a>'
}
}
}, false);
th.appendChild(Nico);
},false);
</script>
太字部分が僕の追記した部分です。まぁほとんど流用させていただいたということですね!
このコードのなかに1箇所ある(ユーザー名)という部分をあなたのログインユーザー名(Windows的な意味で)に書き換え、改行を全部消したのちC:\Program Files\Opera\locale\ja\ja.lngの"-1713924769"のある部分に上書きしてください(文字コードはUTF-8で保存してください)。↓のような具合です。
; Used as column titles in the generated cache list page, when the user has
; selected Windows/Special/Cache, or entered the URL opera:cache.
-524571995="ファイル名"
-299260835="アドレス"
-1713924769="サイズ<script type='text/javascript'>document.addEventListener('load',function() {for(var i=0; document.links[i]; i++){document.links[i].target = '_blank';};var l = document.getElementsByTagName('tr');var sf = document.createElement('input');sf.type = 'text';sf.defaultValue='検索';sf.style='margin:0 4px;float:right;';sf.addEventListener('focus',function(){if(this.value==this.defaultValue){this.value=''}},false);sf.addEventListener('blur',function(){if(!this.value){this.value=this.defaultValue}},false);sf.addEventListener('keyup',function(){var v=this.value;for(var i=0, li; li=l[i]; i++){var p=li.lastChild.firstChild.innerText;if(p && p.indexOf(v)==-1){li.style='display: none'}else{li.style='display: table-row'}}},false);var inp=document.createElement('input');inp.type='button';inp.value='サムネイル';inp.style='float:right;';inp.addEventListener('click',function(){var b=/\.(jpe?g|bmp|gif|png|ico|swf|flv)$/i;var f=/\.(swf|flv)$/i;for(var i=0, li; li=l[i]; i++){var p=li.lastChild.firstChild;var c=li.lastChild.firstChild.innerText;if(li.offsetHeight!=0 && p.childNodes.length<2){if(b.test(c)){var stl='float:right; border:1px dotted black; margin:1px; padding:1px;';if(f.test(c)){var dv=document.createElement('div');p.appendChild(dv);dv.innerHTML='<EMBED src='+p.href+'>';var fh=dv.firstChild;fh.setAttribute('height', 100);fh.setAttribute('width', 100);fh.setAttribute('style', stl+' content:normal; outline:none; color:inherit;')}else{var image=document.createElement('img');image.setAttribute('src',p.href);if(!image.height || image.height>100){image.height='100'};if(!image.width || image.width>100){image.width='100'};image.setAttribute('style', stl);p.appendChild(image)}}}}}, false);var th=document.getElementsByTagName('th')[2];th.appendChild(inp);th.appendChild(sf);var Nico = document.createElement('input');Nico.type='button';Nico.value='ニコニコ抽出';Nico.style='float:right;margin-right:6px;';Nico.addEventListener('click',function(){var v='nicovideo.jp/smile?';for(var i=1, li, NicoA; li=l[i]; i++){var p = li.lastChild.firstChild.innerText;if(p && p.indexOf(v)==-1){li.style = 'display: none'}else{li.style = 'display: table-row';li.lastChild.firstChild.href.match(/(m|v)=([0-9]+)/img);if(RegExp.$1 == 'm'){var VideoMIME = "video/mp4";}else{var VideoMIME = "video/x-flv";}var Nico = RegExp.$2;var Video = 'file://localhost/C:/Documents%20and%20Settings/(ユーザー名)/Local%20Settings/Application%20Data/Opera/Opera/profile/cache4/' + li.firstChild.innerText;li.firstChild.innerHTML = '<a type="' + VideoMIME + '" href="' + Video + '"><img src="http://tn-skr.smilevideo.jp/smile?i=' + Nico + '" width="130" height="100"><br />sm' + Nico + ' (' + VideoMIME + ')</a>'}}}, false);th.appendChild(Nico);},false);</script>"
; 以上ここまで
ちなみにキャッシュフォルダに関してはopera:config#Cache Directory4でも確認可能です。保存後、Operaを再起動させ、opera:cacheにアクセスすると検索窓と共にニコニコ動画抽出ボタンがついているはずです。
ちなみにこのスクリプトの存在意義を根底から覆す問題をひとつ。
当然キャッシュフォルダに保存されている動画しか表示できないということ。
キャッシュフォルダの上限サイズを数100MB以上に設定しない限り、せいぜい5~10本しか動画を保存できませんからね。見る端からキャッシュファイルは上書きされていくわけで。動画を見たらopera:cacheにアクセスしてファイルを確認、みたいな使い方になってしまうこと必然です。結局面倒じゃん!
またサムネイルサーバー(http://tn-skr.smilevideo.jp/)に勝手にアクセスするのもお行儀悪いかも。うーん、そもそもこのスクリプトはOpera9.5ユーザー専用ですし、需要と使い道はかなり限られていますね。一生懸命作ったのに……。
明日以降、時間があればopera:historyからニコニコ動画のURLを抽出して履歴管理するプログラムについてご紹介します。こちらは半年くらい前に作って以来、我ながら超便利に使いまくっているので使い心地は抜群保障。ただしOperaユーザーxPHP実行環境必須ということでやはり需要はビミョウです。2つの条件を満たした全国100人くらいの方はどうぞお待ちください。
2008年08月31日 0時更新
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| « 05月 | - | 07月 » | ||||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | |||||
