ニコニコ大百科へのリンクを改造するProxomitronフィルタ

更新履歴

2008/10/18 : タグが消えてしまう現象について

最近このフィルタを使うと稀にタグが表示されなくなる現象が出ているようですが、検証の結果、これはニコニコ動画側の障害により大百科へのリンクを表示する機構が正常に動作していない場合に発生する症状であり、本質的にはフィルタの不具合ではないことを確認しています。
但し、タグが「完全に見えなくなってしまう」現象はフィルタの動作により引き起こされるもので、またフィルタの動作機構上これを防ぐ手段はないため、タグを100%表示させたい場合にはこのフィルタを無効にしてください。但しその場合でも、大百科へのリンクが表示されない現象を回避することはできません。
10/18時点ではこの現象が頻発していたためフィルタを無効にすることをお勧めしていましたが、その後改善され、現在では稀に発生しても一度ページをリロードすれば問題なく表示されるようになっています。

これなーに?

ニコニコ動画のタグ部分に表示される、ニコニコ大百科のリンク って邪魔だよねー消したいよねー、でも消しちゃうと大百科にアクセスできないよね…。なんだかんだで意外と役立つことも多いから消すのはちょっとねー………いやでもやっぱ邪魔だよね!!!!!
という方のために、タグ部分をこんな風に改造してコンパクト化するフィルタ「sm autolink + nicopedia mod」です。

(図1) 上:デフォルト 下:フィルタ適用後 (クリックで拡大)

導入と注意

このフィルタは、Webページフィルタ1つとヘッダフィルタ1つで1セットになっています。また、動作の都合上『ニコ動の「パート1はsm12345」的なアレをクリッカブルにforタグ』こと「sm autolink for tag」フィルタを内包しています。sm autolink for tagとの同時使用はできませんのでご注意ください。

[Patterns]
Name = "nicovideo | sm autolink + nicopedia mod 20081015"
Active = TRUE
URL = "www.nicovideo.jp/watch/ $TYPE(htm)"
Limit = 1024
Match = "(</head>)\2$SET(1=<style type="text/css">"
        ".nicopedia { display:none }"
        "p.tag_txt { font-size:2pt; font-family:"Meiryo_Ke UI Gothic"; margin-top:0 }"
        "p.tag_txt strong { display:none }"
        "p.tag_txt a { font-size:8pt }"
        "p.tag_txt .tag_area { font-size:7pt }"
        "p.tag_txt a.autolink { color:#390 }"
        "p.tag_txt a.written { color:#b00 }"
        "a[href^="javascript:showGlobalTags"] { display:none }"
        "</style>\n)"
        "|"
        "(<a href=")\1tag/[^"]+"\srel="tag("\sclass="nicopedia)\9("[^>]+>"
        "[^<]++(([%73][%6d]|[%6e][%6d])[1-9][0-9]+{0,*})\0[^<]+)\4(^(^</a>))"
        "$SET(3=\9_tag autolink)$SET(2=http://www.nicovideo.jp/watch/\0)"
        "|"
        "(Nicopedia.("
        "WRITTEN $SET(2='<a href="#{link}" class="nicopedia_tag written">#{title}</a>';)|"
        "NONEXIST $SET(2='<a href="#{link}" class="nicopedia_tag unwritten">#{title}</a>';)"
        ")_LINK.template = )\1*';"
        "|"
        "$NEST(<a\shref="javascript:showGlobalTags[^<]+,</a>)|"
        "(<a [^>]++href="javascript:startTagEdit[^"]+")\1[^<]+(^(^</a>))"
        "$SET(2=><img src="http://storage.samurizeupboard.jp/tag_small_trim.png" style="margin-bottom:-1px">)|"
        "(<td width="100%" style="padding:)\1$SET(2=0 0 4px 0)4px;(^(^">))"
Replace = "\1\2\3\4"
          ""
          "$TST(CREDIT =  tag_small.png original by Yusuke Kamiyamane )"
[HTTP headers]
In = FALSE
Out = TRUE
Key = "URL: sm autolink + nicopedia mod 20080718 (out)"
URL = "dic.nicovideo.jp/a/ & (^$KEYCHK(^02)) & $OHDR(Referer:http://(www.|)nicovideo.jp/watch)"
Match = "([^/]+/)+{4}(\w(([%73][%6d]|[%6e][%6d])[1-9][0-9]+{0,*})\0$SET(1=watch/\0)|\0$SET(1=tag/\0))"
Replace = "$JUMP(http://www.nicovideo.jp/\1)"

導入が完了したら、前出のスクリーンショットと表示を見比べてみてください。正しく動作していますか?もしも正しく動作していないようであれば、
ドンマイ!
Firefox2で動作確認しています。恐らくIEOperaでも動作するとは思いますが、確認はしていません。
追記: IE7での動作を確認しました。Opera9では表示は問題ないのですが、どうやら右クリック+左クリックすると「前のページに戻る」みたいです。マウスジェスチャ切ってるのに…。Operaのことはよくわからない*1ので、ひとまずほったらかします。ご要望はコメント欄までお気軽に。

使用方法

赤くなっているタグは、大百科に記事があるタグです。逆に、色の変わっていないタグは大百科に記事がないタグです。わかりやすいですね!
どちらの色のタグでも、普段通り単に左クリックすればタグ検索画面へジャンプします。大百科へアクセスしたい場合には、タグを右クリックしながら左クリックしてください*2
また、タグの緑色になっている部分は動画への自動リンクになっています。緑色の部分をクリックすると、直接その動画へ飛ぶことが出来ます。これは従来のsm autolink for tagと同等の動作です。sm autolinkの詳しい情報と悲しい過去に関してはd:id:Falky:20071229:1198930880をお読みください。

(図2) sm autolink動作例
仕様上の制限として、タグの編集を行うと表示が乱れます。これは修正不可能な仕様*3となりますので、ご了承ください。

それではお決まりの…

どうぞご利用ください。

過去のバージョン

更新 @ 2008/07/17
[Patterns]
Name = "nicovideo | sm autolink + nicopedia mod 20080716"
Active = TRUE
URL = "www.nicovideo.jp/watch/ $TYPE(htm)"
Limit = 1024
Match = "(<a\s[^>]++\srel="tag" class=")\9nicopedia\s([^>]+>)\8([^<]++)\2"
        "(([%73][%6d]|[%6e][%6d])[0-9]+{1,*})\0\4\&nbsp;"
        "$SET(3=</a><a href="http://www.nicovideo.jp/watch/\0" style="color:#390;font-weight:bold">)"
        "$SET(1=\9\8)"
        "|"
        "(<a href="tag/[^>]++class="nicopedia tag" style="[^"]+)\1">([^<]+</a>)\3\&nbsp; $SET(2=display:none">)$SET(0= )"
        "|"
        "(Nicopedia.("
        "WRITTEN $SET(2='<a href="#{link}" class="nicopedia tag written" style="font-weight:bold;color:#b00">#{title}</a>';)|"
        "NONEXIST $SET(2='<a href="#{link}" class="nicopedia tag unwritten" style="font-weight:normal">#{title}</a>';)"
        ")_LINK.template = )\1*';"
        "|"
        "(<p class="tag_txt")\1>$SET(2= style="font-size:8pt">)"
Replace = "\1\2\3\0$TST(\4=?*)\1\4 "
[HTTP headers]
In = FALSE
Out = TRUE
Key = "URL: nicopedia mod 20080717 (out)"
URL = "dic.nicovideo.jp/a/ & (^$KEYCHK(^02)) & $OHDR(Referer:http://(www.|)nicovideo.jp/watch)"
Match = "http://dic.nicovideo.jp/a/\0"
Replace = "$JUMP(http://www.nicovideo.jp/tag/\0)"

更新 @ 2008/07/18
  • 「海外タグを表示」機能の導入によって、「タグ編集」「海外タグを表示」をした際の表示乱れが無視できなくなったため、動作修正。
    • ていうかほとんど書き直した。id:koizukaは俺の事を嫌っているに違いない。間違いない。ちくしょう!
  • sm autolink for tag部の動作を変更。smほげほげが含まれるタグ全体を緑表示するようにした。
  • 表示乱れ解消処理に伴い、ヘッダフィルタにもsm autolinkの機能を持たせた。
    • 名称も変更になっています。(URL: nicopedia mod → URL: sm autolink + nicopedia mod)



(図3) sm autolink動作比較 上:旧版 下:新版

[Patterns]
Name = "nicovideo | sm autolink + nicopedia mod 20080718"
Active = TRUE
URL = "www.nicovideo.jp/watch/ $TYPE(htm)"
Limit = 1024
Match = "(</head>)\2$SET(1="
        "<style type="text/css">\n"
        ".nicopedia { display:none }\n"
        "p.tag_txt { font-size:2pt }\n"
        "p.tag_txt a { font-size:8pt }\n"
        "p.tag_txt .tag_area { font-size:7pt }\n"
        "p.tag_txt a.autolink { color:#390; font-weight:bold }\n"
        "p.tag_txt a.written { font-weight:bold; color:#b00 }\n"
        "</style>\n)"
        "|"
        "(<a href=")\1tag/[^"]+"\srel="tag("\sclass="nicopedia)\9\s[^"]+"
        "("[^>]+>[^<]++(([%73][%6d]|[%6e][%6d])[1-9][0-9]+{0,*})\0[^<]+)\4(^(^</a>))"
        "$SET(3=\9_tag autolink)$SET(2=http://www.nicovideo.jp/watch/\0)"
        "|"
        "(Nicopedia.("
        "WRITTEN $SET(2='<a href="#{link}" class="nicopedia_tag written">#{title}</a>';)|"
        "NONEXIST $SET(2='<a href="#{link}" class="nicopedia_tag unwritten">#{title}</a>';)"
        ")_LINK.template = )\1*';"
Replace = "\1\2\3\4"
[HTTP headers]
In = FALSE
Out = TRUE
Key = "URL: sm autolink + nicopedia mod 20080718 (out)"
URL = "dic.nicovideo.jp/a/ & (^$KEYCHK(^02)) & $OHDR(Referer:http://(www.|)nicovideo.jp/watch)"
Match = "([^/]+/)+{4}(\w(([%73][%6d]|[%6e][%6d])[1-9][0-9]+{0,*})\0$SET(1=watch/\0)|\0$SET(1=tag/\0))"
Replace = "$JUMP(http://www.nicovideo.jp/\1)"

ここまでやったらあとは 【編集】【海外タグを表示】 を画像化 http://storage.samurizeupboard.jp/tag_blue_edit.png http://storage.samurizeupboard.jp/world.png したい。「編集」の方だけだったら楽なんだけどな…。

更新 @ 2008/10/15
  • Webページフィルタのみの更新です
  • ニコニコ動画(秋)に対応
  • タグ編集ボタンを画像に変更(仮)
    • 一度編集ボタンを押すと通常の文字リンクに戻ってしまいますが、現状では仕様です。
  • 海外タグを表示ボタンを削除
    • 使ってる人いなそうだったので。そりゃねーよ!って人がいたらまた考えます。


動作例

[Patterns]
Name = "nicovideo | sm autolink + nicopedia mod 20081015"
Active = TRUE
URL = "www.nicovideo.jp/watch/ $TYPE(htm)"
Limit = 1024
Match = "(</head>)\2$SET(1=<style type="text/css">"
        ".nicopedia { display:none }"
        "p.tag_txt { font-size:2pt; font-family:"Meiryo_Ke UI Gothic"; margin-top:0 }"
        "p.tag_txt strong { display:none }"
        "p.tag_txt a { font-size:8pt }"
        "p.tag_txt .tag_area { font-size:7pt }"
        "p.tag_txt a.autolink { color:#390 }"
        "p.tag_txt a.written { color:#b00 }"
        "a[href^="javascript:showGlobalTags"] { display:none }"
        "</style>\n)"
        "|"
        "(<a href=")\1tag/[^"]+"\srel="tag("\sclass="nicopedia)\9("[^>]+>"
        "[^<]++(([%73][%6d]|[%6e][%6d])[1-9][0-9]+{0,*})\0[^<]+)\4(^(^</a>))"
        "$SET(3=\9_tag autolink)$SET(2=http://www.nicovideo.jp/watch/\0)"
        "|"
        "(Nicopedia.("
        "WRITTEN $SET(2='<a href="#{link}" class="nicopedia_tag written">#{title}</a>';)|"
        "NONEXIST $SET(2='<a href="#{link}" class="nicopedia_tag unwritten">#{title}</a>';)"
        ")_LINK.template = )\1*';"
        "|"
        "$NEST(<a\shref="javascript:showGlobalTags[^<]+,</a>)|"
        "(<a [^>]++href="javascript:startTagEdit[^"]+")\1[^<]+(^(^</a>))"
        "$SET(2=><img src="http://storage.samurizeupboard.jp/tag_small_trim.png" style="margin-bottom:-1px">)|"
        "(<td width="100%" style="padding:)\1$SET(2=0 0 4px 0)4px;(^(^">))"
Replace = "\1\2\3\4"
          ""
          "$TST(CREDIT =  tag_small.png original by Yusuke Kamiyamane )"
[HTTP headers]
In = FALSE
Out = TRUE
Key = "URL: sm autolink + nicopedia mod 20080718 (out)"
URL = "dic.nicovideo.jp/a/ & (^$KEYCHK(^02)) & $OHDR(Referer:http://(www.|)nicovideo.jp/watch)"
Match = "([^/]+/)+{4}(\w(([%73][%6d]|[%6e][%6d])[1-9][0-9]+{0,*})\0$SET(1=watch/\0)|\0$SET(1=tag/\0))"
Replace = "$JUMP(http://www.nicovideo.jp/\1)"


  • 現在の仕様上の制限(バグじゃないよリスト)
    • sm autolink部が「編集」「海外タグを表示」すると緑色じゃなくなる
      • JS弄らないと無理と思われるため、仕様です。クリックすればきちんと動画へ直接ジャンプできるので許してね。
    • font-sizeがpt指定なんて、それでよくW3C信者を名乗ったもんだね!
      • サーセン 小さすぎるようでしたらご自分での書き換え推奨です。ただこれにも理由があり、正直、きちんとリセットCSSが入ってない環境でコロコロとCSSが更新されるニコニコでは相対値指定はリスキーだと思うので…。
    • 「編集」or「海外タグを表示」してからsm autolink部を右+左クリックしても大辞典に飛ばない
      • 直せるには直せると思いますが、現状では仕様です。多分smほげほげ入ってるタグの記事なんぞ書かれないであろうと思われるので、意図的にサボっています。
    • sm autolinkが名前通りsmにしか対応していない。nmとか色々対応すべき!
      • 私はニコ厨じゃないので(自称)、sm以外に何があるのか把握してないためです。誰かリストくれればすぐやります。

*1:「嫌い」とも言います :]

*2:左右同時クリックというあまりにマニアックなこの操作方法は、私がMDIBrowserユーザであったことに由来しています。私の中ではあまりにも偉大なソフトウェアなのですよ、MDIBrowserは。武ちゃん、元気にしてるかなぁ…。

*3:本当は修正できないわけではないんですが…今回のアプローチとは違って、ニコニコのJavaScriptを乗っ取るというある意味正攻法のアプローチが必要になります。それはやる気はないので、このフィルタにおいては仕様ということでご容赦を。CSSで消すという技がありました。灯台もと暗しとはまさにこのこと。最新版では修正済みです。