Greasemonkeyの最近のブログ記事

Nico multi-pop-drag-resizeをAutoPagerizeに対応しました

ご無沙汰しております。

Nico multi-pop-drag-resizeをAutoPagerizeに対応しました。

nicomultipopdragsize.user.js
↑こちらのみバージョンアップ

nicomultipopdragresizepa.user.js

※要 グリースモンキー
Greasemonkey :: Add-ons for Firefox

ブログのコメント頂いていました。
コメントありがとうございます!

使い方等はこのあたり見てください。
他のサイトでもニコニコ動画をポップアップできるようになりました。 - Andre's garden

>拡縮とかきかなくなってますね。できそうならやりたいですが・・・

これまでもCtrl+rで追加されたページをリロードできていたのですが
自動でページが増えた時点でポップアップのリンクが表示されるようになりました。

参考にさせていただいた記事
自分でAutoPagerize対応のスクリプトを書く簡単な方法 - blooo

AutoPagerizeで継ぎ足された部分に自分のスクリプトを適用する方法あれこれ - 0xFF

javascriptしばらくぶり過ぎです。

Andre's garden - livedoor Readerのフィードをレートごとに既読にするGreasemonkey

をFirefox3に対応にしました。


ldr_shortcut_key_read_by.user.js

window.addEventListener("load", function() {
	
	var fns = new Array();
	for (var k=0;k<=5;k++) {
		var fn = '(function(){var sl = window.subs.model.get_by_rate('+k+').list;for (var i=0;i<sl.length;i++) window.touch_all(sl[i].subscribe_id);})'; 
		fns[k] = 'eval("'+'window.Keybind.add(String(' + k + '), ' + fn + ');'+'");';
	}
	
	var script = document.createElement('script');
	script.type = 'text/javascript';
	script.innerHTML = fns.join("");
	document.getElementsByTagName('head')[0].appendChild(script);
	
}, false);

このあたりを参考にさせていただきました。感謝^^
Firefox3 + GreasemonkeyでunsafeWindowのプロパティが取れない件を解決する方法 - koumiyaの日記
GreasemonkeyをBookmarklet的に実行してみる - 0x集積蔵

ああ・・・優しくないソースなぁ。もっと上手くかけそう^^;

こっちはなーんにもしなくてFirefox3で動きます。
Andre's garden - 他のサイトでもニコニコ動画をポップアップできるようになりました。

「おらには隠された力があるみたいだ!」

^^;

Nico multi-pop-drag-resizeの拡張について

インストール

nicomultipopdragresize.user.js
nicomultipopdragresizepa.user.js

1.他のサイトでもニコニコ動画へのリンクがあればポップアップできるようになりました。

下のイメージのようにニコニコ動画へのリンクに反応してポップアップボタンが追加されます。(サイト例:はてなブックマーク - タグ ウッーウッーウマウマ(


サーバーの負荷を懸念してポップアップできる動画は、最大5つまでにしています。が、ソースがわかる人なら制限をはずすのは難しくないです。程度についてはご配慮ください。私の場合は動画を5つも並べたらパラレルに流れる動画の情報量が多すぎてとてもムリ^^;○王拳は、3倍が限度ですね。


2.ポップアップ先の動画プレーヤの拡大縮小ができるようになりました。

ほぼ自動。上下のドラッグに反応して動画の大きさを自動調節します。

3.ショートカットの設定画面をwで呼びだせるようになりました。

他のサイトでショートカットがかぶる方は、変えてください。OKで設定保存。cancelなら何もしません。

ショートカットの初期値も若干変わりました。(設定の詳細は、Andre's garden - ニュータイプっぽくニコニコ動画の一覧から動画を先読みするGreasemonkeyのショートカットキーを参考にしてください。)


i:初期化
ctrl+r:リロード(私の環境でLDRとかぶるから。それだけです^^)
d:全動画の非表示
m:マニュアルモード切り替え(自動/マニュアル)
w:キーバインド設定画面を開く

設定したキーの意味(大文字小文字は区別しません)

・w → wキーを押す。
・ctrl+w →コントロール(Ctrl)ボタンを押しながらwキーを押す。 
・shift+w →シフト(Shift)ボタンを押しながらwキーを押す。 


レベルアップ内容について

1については前からできることはわかっていたのですが、ニコニコ動画的にどうなんだろうと思って自重していました。
今回、規約を見てみたのですが特にまずくなかったようだったので(まぁ、所詮ユーザースクリプトですからね)のでレベルアップしてみました。
2は(自分的に)とてつもなく便利です。オミトロンというとんでもなく多機能なツールのニコニコ動画閲覧用フィルタをぼーっと眺めていたらjavascriptで実現可能なことがわかってしまったので採用してみました^^/
3は、1からLDRやGoogle Reader上で動かしているとショートカットがかぶるので自然と必要になった機能です。

その他

・ポップアップリンクは、基本的に同列にあるノードの直前のリンクをたどっているだけなので観れないものもあります。(全てには対応できないです。)

・ニコニュースやコントローラーも消した形で動画を観れたりするといいのかもしれませんが、大変そうだったの断念しました。
・ニコニコ動画のサムネイルからポップアップはできそうなのでそのうち改善する予定です。
・ポップアップ先の動画で全画面表示をするとレイアウトが崩れます。私はあまり使わないのですが、きになるようなら直すかもしれません。
・ショートカットキーのUIのメリット・デメリットがわかってきました。邪魔でなければAutoPagerizeのようなUIが設定にはいいのかもしれませんね。

関連エントリ

Andre's garden - ニュータイプっぽくニコニコ動画の一覧から動画を先読みするGreasemonkeyなんですが、以下のエントリでご紹介いただいています。ありがとうございます^^
最近興味深かったページ | 王様の箱庭
Web scratch ≫ ニコニコ動画用Greasemonkeyスクリプトのまとめ


追記(3/30)

ニコニコ動画のサムネイルからポップアップできるようになりました

サムネイル右横にあるポップアップのみ有効です。

参考動画スペインにある超デンジャラスな道「El Caminito del Rey」‐ニコニコ動画(SP1)

ニコ動観れない方はこちらから↓(by ニコ動サムネイル生成-EX

スペインにある超デンジャラスな道「El Caminito del Rey」
スペインにある超デンジャラスな道「El Caminito del Rey」

リンクのすぐ後ろにポップアップボタンを追加するようにしました。

マイリストのようにイメージ付のリンクが連続して並んでいる場合でもポップアップできるようになってます。(見た目は微妙ですけど・・・)

インストール元は更新済み(nicomultipopdragresize.user.jsのみ更新)です。

更新でレベルアップしない方は、firefoxのツール→Greasemonkey→ユーザースクリプトの管理→Nico multi-pop-drag-resizeを選択→アンインストールしてからもう一度インストールしてください。

追記(3/31)

nm形式(ニコニコムービーメーカの動画)のリンクにも対応しました。

「ぼくが、一番ニコ動をうまく使えるんだーーー!ずぎゅーーん」

「・・・ばかな、あんどれ」

なんてことを言われたどうかはわかりませんが、Youtube用のGreasemonkeyにYouTube動画を同一画面上に開いてリサイズできるGreasemonkey|WEBマーケティングブログというのがありまして、便利だったのでニコニコ動画用につくってみました。

「マイリスト」「ランキング」「タグ検索」「キーワード検索」等の動画一覧の動画リンク横にあるボタンをクリックすると画面遷移することなしに動画をポップアップで起動できるようになります。

まるで先読みの・・・のような操作感!(笑)

大量の動画をポップアップすることもできますが、ぶっちゃげ私のマシンではCPUの性能が追いつかない(まさにニュータイプwww)のであまり試してません。ま、サーバーに優しくね^^(試したのは今のところ同時6個くらいまで・・・爆発しそうでした。)

[簡単な使い方]

1.インストール

Greasemonkeyと下のユーザースクリプトをインストールしてください。都合上スクリプトが2つになってます。nicomultipopdragresize.user.jsだけでも動きますが、その場合、自動モード(後述)のみになります。

nicomultipopdragresize.user.js
nicomultipopdragresizepa.user.js

2.利用できる画面

ニコニコ動画の一覧(例タグ検索 演奏してみた‐ニコニコ動画(SP1))を開きます。動画のリンク横に下のイメージのようなポップアップボタンがあるので押してください。小さなウィンドウ(ポップアップ画面)が起動して動画が見れます。

3.ポップアップ画面について

閉じたいときは画面左上の×ボタンで閉じてください。リサイズは、下のイメージのように画面右下の端をドラッグして下さい。画面上のドラッグバーをドラッグ&ドロップして画面移動もできます。

4.ショートカットキー

i :初期化 ポップアップ画面のサイズ・位置・スクロールの位置(縦)を初期化します。

r :リロード
Friefox拡張(※)によっては、動的にリンクが増えたりするものもあるので、更新されたリンクに対してポップアップボタンを追加します。

(※)試したのは私の使っている拡張マイリストとAutoPagerize(ウノウラボ Unoh Labs: Webブラウジングを快適にするAutoPagerize)です。いつもお世話になりまくってます。

m :ポップアップ画面内の縦スクロール位置の設定方法の切り替え
OKならマニュアルモード→一番最後に移動した縦スクロール位置を記憶。
キャンセルなら自動調整モード(初期値)→動画が見える位置まで自動スクロール。

d :ポップアップ画面を全て閉じる
ポップアップが増えすぎたり、画面の外に移動してしまってカオスな状況になった人のために。

5.他のユーザースクリプトとのコンフリクト(衝突)について

ユーザースクリプト(以下US)の宿命(?)で他のUSに影響を与えることがあります。 例えばポップアップの画面内で拡張マイリストの登録をすると動画のIDが正しく取れません。

原因は、ポップアップ先の画面で特定の場所にジャンプする都合上、URLの後に~#flvplayer_container、#flvplayer_container_mをつけているからです。(動画のIDを抜き出す処理に影響したりします。)

対応(1)もっともシンプル

ポップアップ先の画面では他のUSを使わない。

ポップアップ画面内でいろんなことをやった場合どうなるかはあんまりテストしてません。
動画をみるだけにしておいたほうがよいかも。

対応(2)USなんとなくわかります人向け

ポップアップ先の画面で使われている他のUSを編集。以下のURLを除外URLにする。

編集したUSがポップアップ時のみ無効になります。

http://www.nicovideo.jp/watch*#flvplayer_container
http://www.nicovideo.jp/watch*#flvplayer_container_m

対応(3)USカスタマイズすればいんじゃない?人向け
私はポップアップ先でも拡張マイリスト使いたい(ワガママなやつ^^;)ので以下のようにしました。
nicovideoadditionalmylis.user.js
function getVideoInfo()の1019行あたり
//var m = w.location.href.match(/^http:\/\/.*?\.nicovideo\.jp\/watch\/([^\/]+)/);
var m = w.location.href.match(/^http:\/\/.*?\.nicovideo\.jp\/watch\/([a-z0-9]+)/);

6.ちょっと改善


・ポップアップ画面を閉じるときに位置とサイズを記憶しますので初期化するときは全画面閉じてないとあまり意味がなかったりします。
・友人にテストしてもらったら文字入力時にショートカットが有効になるのがウザイという助言(グッジョブ!ありがとう^^)をもらったので「shortcuts.js」(すばらしいライブラリです。)を取り込んで無効にしました。


7.プログラム的なところ


・スクリプトが2つになったのが残念。
開いたポップアップ(iframeで作成)のスクロールバーが親から制御できなかった。結果、ポップアップ先で動くスクリプトを別に作成。iframeはじめてまともにつかった(w)のですが理解し切れてないようです。
wrappedJSObjectでできそうな気がしたんですけどだめでした。

参考サイト
304 - narucissus is Not Modified: Greasemonkeyで遊ぶ(その1)
XPCNativeWrapper - MDC

・元ソースから改変しまくったので無駄が多い。
直せたら総リファクタしたいくらい。ただ、ユーザースクリプトの賞味期限を考えるとこのままでもいいかなーと考えたりもします。

おまけ

はてなスターが沢山ついているエントリーがうらやますぃーので少しタイトルと序文をいい感じに工夫してみましたウヒヒw

参考サイト
トレビアンな文章が書けるテクニック! - livedoor ディレクター Blog

関連エントリ

Andre's garden: livedoor Readerのフィードをレートごとに既読にするGreasemonkey

追記(3/31)

レベルアップしました。Andre's garden - 他のサイトでもニコニコ動画をポップアップできるようになりました。

livedoor Reader(LDR)便利ですよね。
よく読むフィードには、レートをつけて時間がないときにはそれだけ読んでいます。
でも、ずっと不思議に思っていたのが、読み終わっていないフィードを既読にする時、すべてを既読にする機能しかなかったこと。

あっさり実現できるので何か意図があるはず(ポリシーのあるシステムは大好きです^^)なんですけど、5つ星レートも読みきれない時がある私には、たまりたまった4つ星レート以下を全部既読にしたくて、「レートごとに既読にできないかなー」と常々思っていました。

そんなある日、ぼーっと
LDR、「既読する」にショートカットキーを割り当てるGreasemonkeyスクリプト - 実用

を読んで、ついに脳みそのシナプスが発火しました(笑)

ldrshortcutkeyreadbyrate.user.js

livedoor Readerのフィードをレートごとに既読にするGreasemonkeyです。

0~5をショートカットキーにわりあてていて、押したショートカットのレートのフィード(例えば、5なら5つ星レート)が既読になります。

Greasemonkey(グリースモンキー)なのでFirefox限定です。
グリースモンキーについてはこちら(Greasemonkey入門 ~よくわかるグリースモンキーの使い方 ~ | Google Mania - グーグルの便利な使い方)が詳しいです。グリースモンキーはとんでもなく便利です。もうこれなしでは生きてゆけないw

ソースも短いのでさらしてみます。(ひー、変なところがあったら教えてください^^)

// ==UserScript==
// @name			LDR shortcut key read by rate
// @namespace		http://andre-garden.com
// @description	LDR shortcut key of 0..5 make rateing entry read.
// @include		http://reader.livedoor.com/*
// ==/UserScript==

window.addEventListener("load", function() {
  var uw = unsafeWindow;
for (var k=0;k<=5;k++) {
var fn = 'function(){
var sl = uw.subs.model.get_by_rate(' + k + ').list;
for (var i=0;i<sl.length;i++)
uw.touch_all(sl[i].subscribe_id);
}';
uw.Keybind.add(String(k), eval(fn));
}
}, false);

追記
LDRってFirebugをはじくようになってるみたいなんですけど、こういう場合ってみなさんどうやって開発してるんでしょうね。ゴリゴリデバッグ。結局、jash使ったりしましたがどうも使い方がわかってないのでもどかしいです。

ブログ上のコード記法がめちゃくちゃになってきたので手抜きでtextareaにしました。
決定版みたいな方法どなたかおしえてほしいです^^;

更に追記(3/15 17:00)
ブログにコードを貼り付ける方法で悩むの巻 | IDEA*IDEAを参考に<pre class="code">...</pre>のスタイルにしました。