はてなの「プロフィール画像設定機能の追加」に対して Greasemonkey スクリプトを修正した

http://hxxk.jp/2006/01/26/2240

記事データ

投稿者

望月真琴

投稿日時

2006-01-26T22:40+09:00

タグ
概要

プロフィール画像設定機能の追加によって動作しなくなった hb_addict.user.js の修正方法を示してみました。

リプライ

3 件のリプライがあります。

記事本文

はてなのいくつかのサービスにプロフィール画像が出現

この機能追加自体に関しては特に私からはコメントはありません。 今日になってはてなブックマークのエントリページが賑やかになっていて、「何だ何だ !? 」という感想は抱きましたが。

「全てのサイトをはてブ化する」 Greasemonkey スクリプトが使えなくなった

以前 Going My Way: すべてのサイトをはてなブックマークと結びつけるGreasemonkeyスクリプト経由でいぬビーム - 全てのサイトをはてブ化するという Greasemonkey スクリプトを知り、手軽にブックマークコメントをチェックできるということで重宝していました。

上段がこれまでのスクリプトの動作、下段がプロフィール画像設定機能追加以降のスクリプトの動作 のように、本来なら「ブックマークしているユーザ数」を表示して、なおかつブックマークコメントが書かれていればそれを抽出するという動作だったのですが、プロフィール画像設定機能の追加によってユーザ数の取得もブックマークコメントの取得もできなくなってしまいました。

おかしいなと思ってはてなブックマーク - はてなダイアリー日記 - プロフィール画像設定機能の追加についてのソースを確認すると、これまでは <li><span class="timestamp">2006年01月26日</span> <a href="/ruku/20060126#bookmark-1288979">ruku</a> 『[<a href="/ruku/%e3%81%af%e3%81%a6%e3%81%aa/" class="taganchor">はてな</a>] どれどれ。』</li> のような形式で記述されていたものが、 <li><span class="timestamp">2006年01月26日</span> <a href="/ruku/"><img src="http://www.hatena.ne.jp/users/ru/ruku/profile_s.gif" class="hatena-id-icon" alt="ruku" title="ruku" width="16" height="16" /></a> <a href="/ruku/20060126#bookmark-1288979">ruku</a> 『[<a href="/ruku/%e3%81%af%e3%81%a6%e3%81%aa/" class="taganchor">はてな</a>] どれどれ。』</li> といった記述に変更されていました。 まあ、プロフィール画像を表示するんだからマークアップにも何らかの変更が加わるのは当たり前なのですが。

詳しい解説は省略しますが、いぬビーム - 全てのサイトをはてブ化するの Greasemonkey スクリプトの動作を大雑把に解説すると、 xmlhttpRequest を用いて該当ページのはてなブックマークエントリページの内容を取得し、正規表現を用いて、 <li><span class="timestamp">2006年01月26日</span> <a href="/ruku/20060126#bookmark-1288979">ruku</a> 『[<a href="/ruku/%e3%81%af%e3%81%a6%e3%81%aa/" class="taganchor">はてな</a>] どれどれ。』</li> といった例のような形式にマッチしたら users の値をインクリメントして、かつコメントがあればそれを取得して該当ページの </body> の直前に書き出すという動作をしています。 ( 私は JavaScript はほとんど触れたことがないので、間違った理解をしているかもしれません、ご容赦願います。 )

「全てのサイトをはてブ化する」 Greasemonkey スクリプトを改造する

しかし、プロフィール画像設定機能の追加によって正規表現によるマッチング規則と実際のエントリページの記述に齟齬が生まれたために、どのページでも 0 users になってしまっているのです。 そこで、スクリプト内のマッチング規則を新しいエントリページの記述に合わせれば良いのでは考えました。 私は正規表現はおろか JavaScript に触れるのも初めてに近いのに !

  1. いぬビーム - 全てのサイトをはてブ化するを Firefox 上で開きます。
  2. http://yagi.xrea.jp/2005/12/hb_addict.user.js のリンクアンカーをクリックしてスクリプトを表示し、その記述をエディタにコピーします。
  3. 59 行目の while (m = d.match(/<li><span class="timestamp">([^<]*)<\/span> <a href="[^"]*">([^<]*)<\/a>(.*)?<\/li>/)) { という記述を、 while (m = d.match(/<li><span class="timestamp">([^<]*)<\/span> <a href="[^"]*"><img src="[^"]*" class="[^"]*" alt="[^"]*" title="[^"]*" width="[^"]*" height="[^"]*" \/><\/a> <a href="[^"]*">([^<]*)<\/a>(.*)?<\/li>/)) { に置き換えます。
  4. hb_addict.user.js という名前を付けて保存し、 Firefox 上でそれを開きます。サーバに put して開いても構いませんし、ローカルディスク内のものを開いても構いません。
  5. 「ツール」より「 Install This User Script 」をクリックすればインストール完了です。

なお、これまでにいぬビーム - 全てのサイトをはてブ化するのスクリプトをインストールしていた場合は、前述の作業を行う前に「ツール」より「 Manage User Script 」をクリックし、 hb_addict.user.js を Uninstall しておくようにしてください。

また、 Greasemonkey 自体をこれから導入するという方は、前述の作業を行う前にはてなグリースモンキー(Greasemonkey) - Greasemonkeyの使い方を参考に Greasemonkey を導入してください。 言うまでもありませんが、 Greasemonkey は Firefox の拡張機能ですので Firefox がインストールされている必要があります。

IRC チャンネル「 #順列都市」のみんなに助けられ、 unified 形式による patch で改造部分を示すことができるようになりました。

--- hb_addict.user.js	Thu Jan 26 23:04:14 2006
+++ hxxk_hb_addict.user.js	Thu Jan 26 21:41:16 2006
@@ -56,7 +56,7 @@
    d = response.responseText;
    var n = 0
    var already_bookmarked = false
-  while (m = d.match(/<li><span class="timestamp">([^<]*)<\/span> <a href="[^"]*">([^<]*)<\/a>(.*)?<\/li>/)) {
+  while (m = d.match(/<li><span class="timestamp">([^<]*)<\/span> <a href="[^"]*"><img src="[^"]*" class="[^"]*" alt="[^"]*" title="[^"]*" width="[^"]*" height="[^"]*" \/><\/a> <a href="[^"]*">([^<]*)<\/a>(.*)?<\/li>/)) {
      n += 1
      d = RegExp.rightContext;
      var date = m[1]

hb_addict.user.js にこの patch を適用して、 Firefox 上で開いてインストールすると良いでしょう。 patch って何っていう私のような方は Azrael: Tagwire、MT-XSearch、Cygwin導入メモを合わせてどうぞ。

mtymのstderr - 全てのサイトをはてブ化する Greasemonkey スクリプトにてよりスマートな表現が書かれています。 このように、 > を判定の基準にした方が img 要素内の属性の配置が変わっても修正を加えなくて済むので良いと思います。

おわりに

前項でも述べた通り、私はこれまでに正規表現や JavaScript に触れる機会がほとんどありませんでした。 もしかしたらスクリプトの書き換え方も何かしら遠回りしているかもしれません。 もっとスマートな記述があるよ、という方は遠慮なくダメ出ししていただけると幸いです。

トラックバック送信先

はてなダイアリー日記 - プロフィール画像設定機能の追加について

プロフィール画像設定機能の追加によって動作しなくなった hb_addict.user.js の修正方法を示してみました。

はてなブックマーク日記 - プロフィール画像設定機能の追加について

プロフィール画像設定機能の追加によって動作しなくなった hb_addict.user.js の修正方法を示してみました。

いぬビーム - 全てのサイトをはてブ化する

プロフィール画像設定機能の追加によって動作しなくなった hb_addict.user.js の修正方法を示してみました。

リプライ

3 件のリプライが送られています。

2006-01-27T13:38+09:00 - hb_addictの修正 < いぬビーム

 真琴さんのパッチをそのまま取り込みました。ありがとうございます。  http://yagi.xrea.jp/2006/01/hb_addict.us...

2006-01-27T13:39+09:00 - hb_addictの修正 < いぬビーム

 真琴さんのパッチをそのまま取り込みました。ありがとうございます。  http://yagi.xrea.jp/2006/01/hb_addict.us...

2006-01-27T13:39+09:00 - hb_addictの修正 < いぬビーム

 真琴さんのパッチをそのまま取り込みました。ありがとうございます。  http://yagi.xrea.jp/2006/01/hb_addict.us...

この記事に対するご意見やご質問、ご感想などありましたらこのフォームに簡潔に記入して下さい。 簡潔に記入できない場合や、関連記事にてご意見をお寄せいただく場合は、ご自身の weblog にて記事を書かれた上で あてにトラックバックとして送信してください。

記入フォーム

補足情報

著作、講演、制作実績など