gunosyから元記事に自動的に飛ぶユーザースクリプト

Gunosyから届くメールのリンクのうちいくつかが元記事ではなくGunosy内に転載された記事に飛ぶようになっていて()腹が立ったので書いたので広報する。

ページ内から「元記事を探す」のリンクを探してきて、location.hrefに設定するだけです。

nicovideo Thumbinfo popup の配付サイトを移動 & @grant 対応

超久々 Greasemonkey 更新情報です。

nicovideo Thumbinfo popup の配付サイトとして利用していた userscripts.org が死亡したらしいので、 新しい配付サイトとして Greasy Fork へと移動しました。

スクリプトの自動更新など行っている方は、上記サイトから再度スクリプトをダウンロードすると良いと思います。

ちなみに Greasemonkey 2.0 (と、Scriptish の最近のバージョン) で必要になったっぽい、 @grant 指定についても対応しています。 実は 5/2 にこっそりと更新していたのですが、このブログ上では告知していなかったので。。。

ついでに、 GitHubリポジトリを作成しました。

今後の方向性ですが、このスクリプトFirefox の独自構文を多様した作りになっているので、 ES6 や 7 の標準に従った作りにしていきたいな、と考えています。 Google Chrome 等との互換性をとるのも大変な作りになっていますし、Firefox 独自機能はいつ削除されるか分からないので。。。 あとは、もう少し全体的に見通しの良い作りにしたいですね。 めっきり静的型付け信者になってしまったので、 TypeScript への移行も選択肢の内かも。

Titech Portal Auto Loginの更新とメンテナー募集のお知らせ

Titech Portal Auto Loginを更新しました。更新内容は,ソースコードの整理です。
作者修了につき,多分これが最後の更新になります。東工大ポータルの仕様が変わらない限り現在のスクリプトは動き続けると思いますが,将来的に正しく動き続けるかどうかは分かりません。
というわけで,スクリプトを更新してくれるメンテナーさん募集です。MITライセンスにしたので,黙ってフォークしてくれても全然構わないのですが,名乗り出て頂けると現在のユーザーさんに告知できるので何かとありがたいです。バグフィックスのみならず,新機能をどんどんつけちゃうぜーってのも歓迎です。JavaScript分かるぜーという東工大生さんは是非。

2010/2/22 02:28追記

id:eagletmtさんがGoogle ChromeのUserScriptに移植してくださいました! titech_portal_auto_login.user.js
あと,Firefox版もForkしやすいようにgistにアップロードしておきました。titech_portal_auto_login.user.js

2011/12/25 16:34 追記

@keisukefukuda さんがメンテナーに名乗り出てくださいました!ありがとうございます!!
今後東工大ポータルのログインページになにか変更があった場合、こちらのgistをご参照ください。
https://gist.github.com/1216571

ご紹介が遅くなって申し訳ありませんでした。。。

ニコニコ動画で watch ページにタグの履歴を表示する Greasemonkey スクリプト: NicoTag Tab を作った

インストールはこちら
NicoTag Tab for Greasemonkey

機能

  • データグリッド状にタグを表示します
  • グリッドの列毎にソートすることができます
  • 表示する要素をフィルタリングすることができます
    • XUL/Migemoがインストールされていると,ローマ字から日本語のタグをフィルタリングできます。

スクリーンショット

過去タグの一覧表示

存在期間の長い順でソート

ローマ字でフィルタリング


ここ最近はニコタグが503エラーを吐くことが多いのが残念です。運営者さん復帰しないかな…

ニコニコ動画でコメントを取得する方法のメモ

動画再生ページ上で動作するGreasemonkeyスクリプトから,動画についたコメントを取得する方法は主に2通りある。それぞれについてメモ。

新プレイヤーのAPIを使う方法

javascript: function hoge(data)alert(uneval(data)); void(document.getElementById("flvplayer").ext_getThreads('hoge'));

以下のような応答が得られる。

[{type:"main", id:0}, {type:"local", id:1}]

ここで得られたスレッドID?を使って,以下を呼び出す。

javascript: alert(JSON.stringify(document.getElementById("flvplayer").ext_getComments(1)));

以下のような応答が得られる。コメント番号降順で得られるっぽい。

[
  {"message": "mohrmohr", "resNo": 13, "vpos": 14970, "date": "Sun Nov 21 2010", "command": "184"},
  {"message": "ahogeahoge", "resNo": 12, "vpos": 7340, "date": "Sun Nov 21 2010", "command": "184"},
  {"message": "mohrmohr", "resNo": 11, "vpos": 3160, "date": "Sun Nov 21 2010", "command": "184"}
]

得られるコメントは,動画上で表示されているものと同じよう。10分超の動画なら1000件だし,短ければ得られるコメントも少なくなる。
メッセージサーバにアクセスしてXMLを取得する場合と比較したメリット・デメリットは以下の通り。

メリット
  • 通信が発生しない
    • 即座にコメントを取得できる
    • 複数のGreasemonkeyスクリプトからコメントを取得してもアクセス制限されない
  • JSのオブジェクトとして直接取得できる
    • パース処理が不要
デメリット
  • 動画に表示されているコメントしか取得できない
  • ユーザID,プレミアムか否か,コマンド等が取得できない
  • 投稿者コメントが取得できない?

コメント中のURLを抽出するなどの用途なら十分使い物になりそうですね。

メッセージサーバにアクセスする方法

昔からある方法。404 Not Foundを参考にすれば良さそう。
リクエストの<thread>要素の属性として,whenとwaybackkeyを与えれば過去ログも取得できる?

ニコニコ動画で getflv を呼び出すときに便利なGM用ライブラリ

NicoFilter Tabを書くときに使った関数をライブラリ化しました。gistにアップロードしてあります。ニコニコ動画でgetFlvを呼び出す関数

概要

ニコニコ動画用のGMスクリプトを書くときに,http://flapi.nicovideo.jp/api/getflv/sm*****を呼び出す処理が必要になることがあります。このAPIへのアクセスを簡単にするライブラリです。APIの呼び出し回数を減らして,アクセス制限にひっかからないようにするのも目的の1つです。

使い方

GMスクリプトの冒頭で

// @require        https://gist.github.com/raw/670311/2a32978c5b58a477af62c7ae3e4123403c873f8a/nicovideo_getFlv.js

などと記述しておきます (指定するURLは,最新版のものにしておくことをオススメします。上記のgistのリンク先から入手できます)。そして,getflvの情報を取得したいところで

nicovideo_getFlv('sm9', function(obj, responseText) {
 ...
});

こんな感じで書きます。responseTextにはAPIにアクセスして得られる文字列が,objにはその文字列をパースした結果のオブジェクトが代入されます。objのフォーマットは以下のような感じ

{ "thread_id": "1173206704",
  "l": "111",
  "url": "http://smile-pcm31.nicovideo.jp/smile?v=8702.9279",
  "link": "http://www.smilevideo.jp/view/8702/43375",
  "ms": "http://msg.nicovideo.jp/7/api/",
  "user_id": <ユーザーID>,
  "is_premium": "1",
  "nickname": <ニックネーム>,
  "time": "1289361631",
  "done": "true",
  "feedrev": "9eb78",
  "ng_rv": "434",
  "ng_up": [
    ["はー","はあああああああああああああああああああああああああああああ"],
    ["どー","どおおおおおおおおおおおおおおおおおおおおおおおおおおおおお"],
    ["らっちー","らっち〜☆ミ らっち〜☆ミ"],
    ["つー","つううううううううううううううううううううううううううううううううううううううううう"]
  ],
  "hms": "hiroba01.nicovideo.jp",
  "hmsp": "2530", 
  "hmst": "1000000006",
  "hmstk": "1289361691.cROP5uDxwti4Dfb-3rFLRXoGIow",
  "rpu": {
    "count": 1031240,
    "users": [
      <ユーザー名1>,
      ...,
      <ユーザー名n>
    ], 
    "extra":0 
  }
}

各値の意味についてはgetflvの戻り値についてまとめ(2010年8月版) - MineAPの(開発)日記を参照してください。