2009年11月09日

動画ページにウォッチリスト登録ボタンを追加するGreasemonkeyスクリプト: NicoWatchlist AddButton

ニコニコ動画(9)になって、
動画投稿者の最新情報をチェックするための『ウォッチリスト』が実装されました。

ウォッチリストへの追加は、
追加したい投稿者のプロフィールページに行かないとなんですが、
プロフィールページへ行かずに、動画ページで登録してしまうためのスクリプトを作りました。
nicowatchlist_addbutton.user.js

このスクリプトをインストールすると、『投稿者プロフィールへ』のリンクの右に、
『<投稿者のニックネーム>をウォッチリストに追加』のリンクが表示されます。
20091109.png
(※) 詳細情報・メニューを隠している場合は、表示されません。


で、このリンクをクリックすると、動画投稿者がウォッチリストに追加されます。
20091109_2.png


登録済みなどで失敗したら、こんな感じに。
20091109_3.png


(画像には、今ニコニコで一番人気の【東方】Bad Apple!! PV【影絵】の作者様を
使わせて頂きました <(_ _)>)
posted by favril at 05:40 | Comment(0) | TrackBack(0) | Greasemonkey

2009年11月01日

add_r-18_button.user.js の ニコニコ動画(9)対応

以前に作った ニコニコ動画のランキングページでR-18のカテゴリボタンを追加するGreasemonkeyスクリプト
のニコニコ動画(9)対応版。

カテゴリ再編で見た目もかなり変わってしまったので、
新しいエントリで書きます。

機能的には、大きな変更は無いです。
ランキングページにR-18のリンクを追加するスクリプトです。
add_r-18_button.user.js

ランキングトップ(http://www.nicovideo.jp/ranking)
20091101.png
ページ下部に、ぽつんと表示。
(『R-18 デイリー 総合 ランキング』へのリンク)


各ランキングページ(http://www.nicovideo.jp/ranking/[fav|view|res|mylist]/[daily|weekly|monthly|total]/[各カテゴリ])
20091101_2.png
セレクトボックスに追加。
posted by favril at 13:26 | Comment(1) | TrackBack(0) | Greasemonkey

2009年06月24日

ニコニコ動画のマイリスト検索をしやすくするGreasemonkeyスクリプト

公開マイリスト検索が公式の機能であります。

20090624.png

20090624_1.png

で、これはAND検索やOR検索などもできるっぽいです。

ただ、公式だとそれをするための検索フォームがないので、
URLを直打ちするしかないんですが、
めんどうなので、検索フォームをGreasemonkeyで設置してみました。
nico_mylist_search.user.js

20090624_2.png

こんな感じでフォームが表示されるので、
AND検索なら「sm1234 sm5678」
OR検索なら「sm1234 OR sm5678」
NOT検索なら「sm1234 -sm5678」
とかってフォームに入力して検索すると、検索できます。
posted by favril at 14:21 | Comment(1) | TrackBack(0) | Greasemonkey

2009年05月07日

ニコニコ動画の新プレイヤーからGetVariableで値が取れない件についての考察

ついに登場!新・動画プレイヤー‐ニコニコニュース
4/27から導入されたニコニコ動画の新プレイヤーですが、
flvplayerに対して GetVariable (SetVariableも?)が出来なくなりました。
var player = document.getElementById("flvplayer");
player.GetVariable("o");

>> null

このblogで公開しているスクリプトで影響を受けるのは以下の3つです。
Nico Filter
Prevent Spoiler
High Comment Nicouser
3つとも GetVariable("o") で動画の情報を取得していたので、
それが出来なくなった新プレイヤーではまったく動作しません。
(一応、以下に書く応急処置で動作させてはいますが・・。)


GetVariable("o") で取得していた情報は、以下のAPIを叩くことでも取得できます。
http://www.nicovideo.jp/api/getflv?v=sm****
しかし、このAPIは無制限にアクセスできるものではないので、
複数のスクリプトがAPIを叩いてしまうと、短時間での連続アクセスとして、
数分間アクセス制限されてしまうという問題があります。

しかし、現状で新プレイヤーに対応するには、
このAPIを叩くしかありません。

そこで、この問題を解決する1つの方法として、
「全スクリプトでAPIの結果を共有する」方法はどうかと思い、
ライブラリみたいなものを作ってみました。

APIを叩く必要のあるスクリプトの場合は、
以下のJSをrequireあるいは、同様のスクリプトを記述します。
http://favril.myspace.googlepages.com/nicoapiresult.js

たとえば、
// ==UserScript==
// @name Nico Filter
// @namespace http://script41self.seesaa.net/
// @description 設定されているフィルタを表示するスクリプト
// @include http://www.nicovideo.jp/watch/*
// @require http://favril.myspace.googlepages.com/nicoapiresult.js
// ==/UserScript==

で、このJSでは、NicoApiResultというオブジェクトを定義しています。
使用方法は以下のようになります。
var result = new NicoApiResult();
result.ready(function () {
alert(window.GM_NicoApiResult.ng_up);
});

あるいは、
var result = new NicoApiResult();
result.ready(myFunc);

function myFunc() {
alert(window.GM_NicoApiResult.ms);
alert(window.GM_NicoApiResult.thread_id);
alert(window.GM_NicoApiResult.l);
}

readyメソッドは、APIの結果が無ければ(他のスクリプトがAPIを叩いていなければ)、
APIを叩いて、結果を「window.GM_NicoApiResult」に格納してから引数の関数を実行し、
結果が既に存在していれば、すぐに引数の関数を実行します。
つまり、APIの結果を利用するスクリプトが複数あっても、
APIは1回しか叩かれませんので、アクセス制限されることはありません。
readyの引数の関数内では確実にAPIの結果である「window.GM_NicoApiResult」が存在しています。
これは、スクリプト間でもwindowオブジェクトが共有されていることを利用しています。
(名前は、公式のものとかぶったりするといけないので、GMとか付けちゃってます。)

これで一応、問題は解決しますが、
こんなブログを見てる人は少ないでしょうから、
全スクリプトにこのJSを利用させるのは無理です。
なので、どうがんばってもアクセス制限のリスクがあります。


結局、一番よいのは公式頼みになってしまうけど、以下のどれかを公式がやってくれることですね。
・APIのアクセス制限を無くす
・videoオブジェクトのように、html内にAPIの結果の情報を記述する
・新プレイヤーを、旧プレイヤーのようにGetVariableできるようにする


追記メモ.
記事を書いてる最中に、新プレイヤーのページでも、
旧プレイヤーをappendさせて、旧プレイヤーから情報を取れないかなぁと思った。
けど、旧プレイヤーがそのうちなくなるかもしれないことを考えると、
これも良い方法ではないかぁ。
一応メモ程度に書いておく。
posted by favril at 07:23 | Comment(0) | TrackBack(0) | Greasemonkey

2009年03月01日

a_year_ago_nicoranking.user.js ver2.0

【2010-02-27 追記】
デザインが壊れ気味だったので修正。

あと、当時の再生数/コメント数/マイリスト数が
いつの間にやらまた取得できるようになってたので、
もとの仕様に直しました。
-------------------------------------------------

ニコニコ動画で1年前のランキングを表示するGreasemonkeyスクリプト:A year ago NicoRanking
を少しバージョンアップしました。

表示させたい位置によって、下記のどちらか1つをインストールして下さい。
インストール:a_year_ago_nicoranking.user.js (表示位置:ページ上部ver.)

インストール:a_year_ago_nicoranking.user.js (表示位置:ページ下部ver.)

変更点:

  1. その動画の【推移を確認】リンクを追加

  2. その動画を登録している公開マイリストページ へのリンクを追加

  3. 以前のものは「デイリー 総合 マイリスト」のランキングページでのみ動作していましたが、それ以外のデイリーランキングページでも動作するように修正

  4. 同じ日に取得したランキング情報は、キャッシュするように修正

  5. 「もっと見る」リンクの飛び先を、公式のページに修正


20090301.jpg

既に1ヶ月近く前ですが、ニコ動公式が過去のデイリーのランキングを公開しました。
それに伴って、ランキング情報の取得先をニコチャート様から、ニコ動公式に変更しています。
ニコチャート様、今までありがとうございました <(_ _)>


【2009-03-03 追記】
「ユーザスクリプトを実行するページ」として、インストール時に設定されている「http://www.nicovideo.jp/ranking/*/daily/*」を編集して、「http://www.nicovideo.jp/ranking/*」としても正常に動作するように変更。
(上記のように設定を変更すると、「デイリー」以外の「毎時」「週間」「月間」「合計」のランキングページにおいても、1年前のデイリーのランキングが表示されるようになる。
初期設定のままだと、「デイリー」のランキングページでのみ1年前のランキングが表示される。)



~* 履歴 *~
【2009-10-01】
1年前の日付を計算する部分がバグっていたので修正しました。

【2009-11-01 追記】
ニコニコ動画(9)に対応。
ニコニコの仕様変更に伴い、当時の再生数/コメント数/マイリスト数が
取得できなくなりましたので、その部分の表示を少し変更しました。
posted by favril at 19:02 | Comment(3) | TrackBack(0) | Greasemonkey
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。