ニコニコ動画の時報を消す簡易Proxy書いてみた
先日、id:aTaGoが、ニコ動の時報だけ消せたらいいのにというような事をTwitterにポストしていたので、少し書いてみた。
現在、ニコ動のPlayerにはプレミアム会員向けに「ニコ割OFF」機能が実装されています。また、プレミアム会員でなくてもマーキーエリアに表示する情報が書かれたXMLをブロックする事で、ニコ割を回避する方法もありますが、これらはニコ割ゲームやアンケート、生放送の予定通知なども含めてOFFにしてしまいます。時報だけ見たくないという場合には、対応していません。
WEBrickを使って、時報と思われる箇所だけをマーキー情報XMLから消すProxyを簡単に書いてみました。このProxyを通過させれば時報と思われる物は再生されません。判定自体が甘いので、時報以外の物も除外してしまう可能性があったり、わざわざローカルでProxyを起動しないといけないので、自由に改変して使って下さい。
Proxyを通過すると、
このXMLが
のようになります。
一応、ニコ割開始時間のタグには、
コードは
require "webrick" require "webrick/httpproxy" require "stringio" require "zlib" require "rexml/document" handler = Proc.new do |req, res| begin if res["content-type"] == "text/xml; charset=UTF-8" marquee_xml = res.body if res.header["content-encoding"] == "gzip" Zlib::GzipReader.wrap(StringIO.new(marquee_xml)) do |gz| marquee_xml = gz.read end res.header.delete("content-encoding") res.header.delete("content-length") end xml = REXML::Document.new(marquee_xml) xml.elements.each("/marquee_data/marquee/just_time") do |element| start_time = element.text if start_time[-2, 2] == "00" del_marquee = element.parent unless element.nil? xml.root.delete(del_marquee) end end marquee_xml = xml.to_s end rescue marquee_xml = res.body ensure res.body = marquee_xml end end config = { :BindAddress => "127.0.0.1", :Port => 8080, :ProxyVia => false, :ProxyContentHandler => handler } zihop = WEBrick::HTTPProxyServer.new(config) [:INT, :TERM].each do |sig| Signal.trap(sig) { zihop.shutdown } end zihop.start
既にProxyが設定されている場合は、configを以下のように書き換えて下さい。
require "uri" #追加 config = { :BindAddress => "127.0.0.1", :Port => 8080, :ProxyVia => false, :ProxyContentHandler => handler, :ProxyURI => URI.parse('http://proxyurl:port/') }
起動するポートなどもお好みで変更して下さい。
全ての通信を通過させるのもなんなので、以下の内容を書いたpacファイルをブラウザに指定することで、マーキーXMLを取得するAPIへのアクセスだけ通過させる事が出きます。
function FindProxyForURL(url, host){ if(shExpMatch(url, "http://flapi.nicovideo.jp/api/getmarqueev3")){ return "PROXY localhost:8080"; }else{ return "DIRECT"; } }
一応、http://mame-lab.com/pac/zihop.pacに置いてあるので、ブラウザの設定中の、「自動プロキシ設定スクリプト」などと書かれたところに、このアドレスを指定するといいかと思います。pacファイル中のProxyのアドレスやポート番号は使う環境に合わせて書き換えてください。