<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>Web scratch &#187; ニコニコ動画</title> <atom:link href="http://efcl.info/tag/%e3%83%8b%e3%82%b3%e3%83%8b%e3%82%b3%e5%8b%95%e7%94%bb/feed/" rel="self" type="application/rss+xml" /><link>http://efcl.info</link> <description>フリーソフトやFirefoxなどについて、web全般なサイト</description> <lastBuildDate>Sat, 14 Apr 2012 15:37:26 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.2</generator> <item><title>ニコニコ動画の検索履歴を保存するGreasemonkey</title><link>http://efcl.info/2011/0506/res2733/</link> <comments>http://efcl.info/2011/0506/res2733/#comments</comments> <pubDate>Fri, 06 May 2011 11:21:29 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Greasemonkey]]></category> <category><![CDATA[ニコニコ動画]]></category> <category><![CDATA[検索]]></category><guid
isPermaLink="false">http://efcl.info/?p=2733</guid> <description><![CDATA[今のニコニコだと好きな動画を探すときに、特定の検索をして探すって感じの場合が多くなってきた気がするので、検索履歴を保存して表示できるGreasemonkeyを書いてみました。 Nico Search History fo [...]]]></description> <content:encoded><![CDATA[<p>今のニコニコだと好きな動画を探すときに、特定の検索をして探すって感じの場合が多くなってきた気がするので、検索履歴を保存して表示できるGreasemonkeyを書いてみました。</p><ul><li><a
href="http://userscripts.org/scripts/show/102371">Nico Search History for Greasemonkey</a></li></ul><p>検索画面の右上の方にボタンが出るようになるので、それをクリックすると検索した履歴が表示されます。 <br
/>検索履歴は検索キーだけではなくてsort方法によっても別々に保存されます。</p><p><a
href="http://efcl.info/wp-content/uploads/2011/05/image8.png"><img
style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://efcl.info/wp-content/uploads/2011/05/image_thumb8.png" border="0" alt="image" width="145" height="186" /></a><a
href="http://efcl.info/wp-content/uploads/2011/05/image9.png"><img
style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://efcl.info/wp-content/uploads/2011/05/image_thumb9.png" border="0" alt="image" width="200" height="240" /></a></p><p>また、検索キーの横にある☆マークをクリックすることで、その検索キーを常に上の方に表示して、自動的に削除されないようにします。(お気に入り機能) <br
/>お気に入りではない検索キーは100個ぐらいで自動的に削除されます。</p><p><strong>コード内容</strong></p><p>これを書き始めたとき<a
href="http://efcl.info/adiary/JavaScriptPatterns/Chapter5ObjectCreationPatterns#k93p5">Sandbox Pattern</a>を試してみたくて書いてたので、あんまり見ない書き方をしてると思う。 <br
/>それぞれ必要な部品をモジュールhistory,templeteとして定義して、必要な時に <br
/>Sandbox(&#8220;history&#8221;, function(box) { … }) という感じで使うというような書き方になってる。</p><ul><li><a
href="https://github.com/azu/Greasemonkey/tree/master/nico_search_history">nico_search_history at master from azu/Greasemonkey &#8211; GitHub</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://efcl.info/2011/0506/res2733/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>またニコニコ動画見てるGreasemonkeyのOAuth対応版</title><link>http://efcl.info/2010/0906/res1930/</link> <comments>http://efcl.info/2010/0906/res1930/#comments</comments> <pubDate>Mon, 06 Sep 2010 11:50:21 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Greasemonkey]]></category> <category><![CDATA[ニコニコ動画]]></category> <category><![CDATA[twitter]]></category><guid
isPermaLink="false">http://efcl.info/?p=1930</guid> <description><![CDATA[2010.8月末にTwitterのBASIC認証が終わったので、今までのまたニコぐりもんは動かなくなっていると思います。なのでOAuth認証に対応してるまたニコニコ見てるを作ってみました。(作ったのは結構前だけどね) m [...]]]></description> <content:encoded><![CDATA[<p>2010.8月末にTwitterのBASIC認証が終わったので、今までのまたニコぐりもんは動かなくなっていると思います。<br
/>なのでOAuth認証に対応してるまたニコニコ見てるを作ってみました。(作ったのは結構前だけどね)</p><ul><li><a
href="http://userscripts.org/scripts/show/83795">mataniconicomiteru for Greasemonkey</a></li></ul><h3>使用方法</h3><p>まずはニコニコ動画の動画ページでステータスバーのGreasemonkeyアイコンを右クリック→ユーザースクリプトコマンドからOAuth認証をする必要があります。 <br
/><a
href="http://efcl.info/wp-content/uploads/2010/09/ss-2010-09-06-11.png"><img
class="alignnone size-medium wp-image-1938" title="ss-2010-09-06-1" src="http://efcl.info/wp-content/uploads/2010/09/ss-2010-09-06-11-300x95.png" alt="" width="300" height="95" /></a></p><p>コマンドを実行するとOAuth認証のパネルが出てくるので、ボタンからTwitterへ行きOAuth認証してPINコードをコピーしてテキストエリアに入力すると準備完了です。<br
/><a
href="http://efcl.info/wp-content/uploads/2010/09/large.png"><img
class="alignnone size-medium wp-image-1939" title="large" src="http://efcl.info/wp-content/uploads/2010/09/large-300x192.png" alt="" width="300" height="192" /></a></p><p>認証済みだったら動画タイトル部分にまたニコのボタンが出るので、それをクリックしてコメントを入力してまたボタンを押せばTwitterへ投稿できます。(nico.msのURLを使って投稿します。<br
/><a
href="http://efcl.info/wp-content/uploads/2010/09/input_mata.png"><img
class="alignnone size-full wp-image-1940" title="input_mata" src="http://efcl.info/wp-content/uploads/2010/09/input_mata.png" alt="" width="482" height="78" /></a></p><p>オリジナルの機能としてはコメント入力欄の右側に文字数のカウンターが付いてるぐらいです。</p><dl><dt><strong>mataniconicomiteru for Greasemonkey</strong></dt><dd><a
title="mataniconicomiteru for Greasemonkey" href="http://userscripts.org/scripts/show/83795">http://userscripts.org/scripts/show/83795</a></dd></dl><p>&nbsp;</p>]]></content:encoded> <wfw:commentRss>http://efcl.info/2010/0906/res1930/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>動画がカクカクになるのでFlash Player 10.1からダウングレード</title><link>http://efcl.info/2010/0621/res1801/</link> <comments>http://efcl.info/2010/0621/res1801/#comments</comments> <pubDate>Mon, 21 Jun 2010 06:30:59 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[インストール設定]]></category> <category><![CDATA[adobe]]></category> <category><![CDATA[flash]]></category> <category><![CDATA[セキュリティ]]></category> <category><![CDATA[ニコニコ動画]]></category> <category><![CDATA[ハードウェア]]></category><guid
isPermaLink="false">http://efcl.info/?p=1801</guid> <description><![CDATA[H.264動画のハードウェアアクセラレーションなどに対応したAdobe Flash Player 10.1がリリースされていますが、ニコニコ動画などで動画カクカクになってしまいまともに使えなくなったので10.0系にダウン [...]]]></description> <content:encoded><![CDATA[<p>H.264動画のハードウェアアクセラレーションなどに対応したAdobe Flash Player <a
href="http://get.adobe.com/jp/flashplayer/">10.1</a>がリリースされていますが、ニコニコ動画などで動画カクカクになってしまいまともに使えなくなったので10.0系にダウングレードしました。</p><p>昔のバージョンにダウングレードする方法</p><ol><li><a
href="http://www.adobe.com/jp/shockwave/download/alternates/">Adobe &#8211; Adobe Web Player</a>から<a
href="http://fpdownload.macromedia.com/get/flashplayer/current/uninstall_flash_player.exe">Flash  Player Uninstaller*</a>をダウンロードして、現在のFlash Palyerをアンインストールする</li><li><a
href="http://kb2.adobe.com/cps/142/tn_14266.html">Archived Flash Player versions</a>から昔のFlash Player 10をダウンロードする。(普通の人はdebugger versionsでない方)</li><li>ダウンロードしたzipを解凍すると10r45_2フォルダの中にflashplayer10r45_2_win.exe (IE以外) とflashplayer10r45_2_winax.exe (IE用) があるのでインストールすれば旧バージョンへ戻せる。</li></ol><p><br
/>10.1にはセキュリティのアップデートも含まれているので、旧バージョンに戻すのはあまり良くないことです。<br
/>Adobeのアップデートはこういうことがあるので、セキュリティのアップデートはメジャー?アップデートに含めて欲しくないな。</p><dl><dt><strong>Flash Playerをアンインストールして旧バージョンに戻す方法 &#8211; GIGAZINE</strong></dt><dd><a
title="Flash Playerをアンインストールして旧バージョンに戻す方法 - GIGAZINE" href="http://gigazine.net/index.php?/news/comments/20081023_flash_player_uninstall/">http://gigazine.net/index.php?/news/comments/20081023_flash_player_uninstall/</a></dd></dl><p>&nbsp;</p>]]></content:encoded> <wfw:commentRss>http://efcl.info/2010/0621/res1801/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Greasemonkeyでサイト既存CSSの影響を受けないポップアップパネルを作る方法</title><link>http://efcl.info/2010/0328/res1636/</link> <comments>http://efcl.info/2010/0328/res1636/#comments</comments> <pubDate>Sat, 27 Mar 2010 16:11:20 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Greasemonkey]]></category> <category><![CDATA[css]]></category> <category><![CDATA[UI]]></category> <category><![CDATA[ニコニコ動画]]></category> <category><![CDATA[ポップアップ]]></category><guid
isPermaLink="false">http://efcl.info/?p=1636</guid> <description><![CDATA[Greasemonkeyは各サイトでユーザースクリプトを実行できて便利ですが、ある要素を挿入したときにそれがサイトに元々書いてあるCSSの影響を受けてしまうことがあります。 一つのサイトならまだしもhttp*で動くような [...]]]></description> <content:encoded><![CDATA[<p>Greasemonkeyは各サイトでユーザースクリプトを実行できて便利ですが、ある要素を挿入したときにそれがサイトに元々書いてあるCSSの影響を受けてしまうことがあります。<br
/> 一つのサイトならまだしもhttp*で動くようなものだと対応仕切れないのでiframeを使いサイトに書いてあるCSSの影響を受けないパネルを作る。<br
/> iframeの中はそのサイトにあるCSSの影響を受けないので、iframe内にGreasemonkeyで表示したいものを置けば影響を受けないものが作成できる。<br
/> makeFrameというのが今回の主題。</p><pre class="brush:javascript;">makeFrame(gotFrame1);
makeFrame(gotFrame2);

function gotFrame1(iframe, win, doc) {
  iframe.height = "350";
  iframe.width = "500";
  iframe.style.position = "fixed";
  iframe.style.bottom = iframe.style.left = "0";
  doc.body.innerHTML += "Frame1ですね。"
}
function gotFrame2(iframe, win, doc) {
  iframe.height = "350";
  iframe.width = "500";
  iframe.style.position = "fixed";
  iframe.style.bottom = iframe.style.right = "0";
  iframe.style.backgroundColor = "#ddd";
  doc.body.innerHTML += "Frame2ですよ。"
}
// Creates a new iframe and attaches it to the DOM, waits for it to load, tests
// that we did not hit https://bugzilla.mozilla.org/show_bug.cgi?id=295813 nor
// https://bugzilla.mozilla.org/show_bug.cgi?id=388714 (and retries otherwise),
// to finally call the provided done callback, passing the iframe, its window
// and document. (The optional name parameter, if provided, will be used to name
// the iframe in window.frames, or be created as "pane-1" onwards, otherwise.)
/*
    var cacllback = function(iframe, win, doc){

    }
    makeFrame(cacllback);
    makeFrame(cacllback , "frameName");
    makeFrame(cacllback , "frameName" , true);// debug mode
*/
function makeFrame(callback/*(iframeTag, window, document)*/, name, debug) {
    function testInvasion() {
        iframe.removeEventListener("load", done, true);
        var message = ((new Date) - load.start) + "ms passed, ";
        try { // probe for security violation error, in case mozilla struck a bug
            var url = unsafeWindow.frames&#91;framename&#93;.location.href;
            message += url == "about:blank" ? "but we got the right document." : "and we incorrectly loaded " + url;
            if (debug) console.log(message);
            done();
        }
        catch(e) {
            if (console &amp;&amp; console.error &amp;&amp; console.trace) {
                console.error(e);
                console.trace();
            }
            if (debug) console.log(message + "and our iframe was invaded. Trying again!");
            document.body.removeChild(iframe);
            makeFrame(callback, name);
        }
    }
    function done() {
        clearTimeout(load.timeout);
        if (debug) console.log("IFrame %x load event after %d ms", framename, (new Date) - load.start);
        var win = unsafeWindow.frames&#91;framename&#93;;
        var doc = iframe.contentWindow.document;
        // 苦し紛れのエスケープ
        var esframeName = "'"+framename+"'";
        // 自分自身のiframeを閉じるボタン
        var xImg = doc.createElement("img");
        xImg.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAATElEQVQoka2RSQ4AIAgD+f+jp96M0aq49AgdUiB0qZCkONQ/EBAwDOrrU7A1uZqN2hodtNwRqNdz0VOg62+jzuDUcVzkf+/I6h28UQHjW25Gob5AIAAAAABJRU5ErkJggg=="
        xImg.setAttribute("onclick", "parent.document.getElementsByName("+esframeName+")&#91;0&#93;.style.display='none';");
        xImg.setAttribute("style","background-color:red;border:3px;position:fixed;top:0px;right:0px");
        doc.body.appendChild(xImg);
        callback(iframe, win, doc);
    }
    var iframe = document.createElement("iframe");
    var framename = iframe.name = typeof name != "undefined" ? name : ("pane" + (makeFrame.id = (makeFrame.id || 0) - 1));
    iframe.setAttribute("style", "overflow:auto;z-index:18999; border:0; margin:0; padding:0;top:auto; right:auto; bottom:auto; left:auto;background-color:#fff");
    iframe.src = "about:blank";
    iframe.addEventListener("load", done, true);
    var frames = makeFrame.data || {};
    var load = frames&#91;framename&#93; || {
        start: new Date,
        sleepFor: 400
    };
    load.timeout = setTimeout(testInvasion, load.sleepFor);
    load.sleepFor *= 1.5;
    frames&#91;framename&#93; = load;
    makeFrame.data = frames;
    document.body.appendChild(iframe);
}
</pre><ul><li><a
href="http://gist.github.com/raw/346174/e76861b73952461419eebe2335ee9c13b8344b40/panel.user.js">panel.user.js</a></li></ul><p>makeFrame関数は(callback ,[フレームのname , debugモード])という引数なので、gotFrame1という関数(callback)を引数にしてmakeFrameを読んでいる。 callbackには(iframe, iframeのwindow, iframeのdocument)が入ってるいるので、iframeのstyleをいじればパネルの色やサイズ、表示する場所などを指定できる。 上記のソースだと左下にframe1、右下にframe2が表示できる。</p><p><a
href="http://efcl.info/wp-content/uploads/2010/03/sshot-2010-03-28-1.png"><img
class="aligncenter size-medium wp-image-1638" title="sshot-2010-03-28-1" src="http://efcl.info/wp-content/uploads/2010/03/sshot-2010-03-28-1-300x219.png" alt="表示例" width="300" height="219" /></a></p><p><strong>元ネタからの改良点 </strong></p><ul><li>パネルを閉じるボタンの追加</li></ul><p>それぞれのパネル右上に表示されているxボタンは、パネルを閉じるボタンとして機能している。 innerHTMLが+になってるのはiframe内にxボタンを追加しているため。</p><ul><li>Flashより上部に表示</li></ul><p>パネルなのでFlashがあってもその上に表示できるようにした方が動作的にはいいと思うのでCSSを少し修正した。<br
/> 要素をFlashより上部する方法は以前書いた<a
href="http://efcl.info/2008/0622/res227/">Flashよりも前面にポップアップを表示する</a>か<a
href="http://d.hatena.ne.jp/gifnksm/20100129/1264797620">Firefox 3.6でFlashの上に position: fixed; な要素を表示できなくなった件 &#8211; なんとなく目記</a>を見るといい。<br
/> Firefox3.6では挙動が変わったので注意。<br
/> Flashより上に表示するには&#8221;position: fixed; <span
class="keyword">overflow</span>: auto;&#8221;とした要素であり、以下の条件を満たす必要がある。</p><ol><li>透過でない(Opacityを使わない or 背景色を無指定にしない)</li><li>CSS3?(-moz-)系のstyleを使わない。(-moz-box-shadowなどは陰の部分だけFlashより後ろに表示されてしまう<br
/> 角丸border-radiusなどは要素に適応されるので要素全体がFlashより後ろに表示される。)</li></ol><p>このmakeFrameを使ったサンプルGreasemonkeyとして<br
/> ニコニコ動画再生ページからその動画のマイリストコメントをパネル上で参照できる</p><dl><dt><strong>Nico MylistComments for Greasemonkey</strong></dt><dd><a
title="Nico MylistComments for Greasemonkey" href="http://userscripts.org/scripts/show/72319">http://userscripts.org/scripts/show/72319</a></dd></dl><p>を作ってみた。</p><p>元ネタ(元ネタのサンプルはtypoがあるので、そのままだと動かない)</p><dl><dt><strong>HTML Injection Tips &#8211; greasemonkey &#8211; GitHub</strong></dt><dd><a
title="HTML Injection Tips - greasemonkey - GitHub" href="http://wiki.github.com/Martii/greasemonkey/html-injection-tips">http://wiki.github.com/Martii/greasemonkey/html-injection-tips</a></dd></dl><div
id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">makeFrame</div>]]></content:encoded> <wfw:commentRss>http://efcl.info/2010/0328/res1636/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>ニコニコ動画とflvplayer_wrapperの履歴</title><link>http://efcl.info/wiki/flvplayer_wrapper/</link> <comments>http://efcl.info/wiki/flvplayer_wrapper/#comments</comments> <pubDate>Mon, 15 Mar 2010 08:11:35 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[その他]]></category> <category><![CDATA[flash]]></category> <category><![CDATA[UI]]></category> <category><![CDATA[ニコニコ動画]]></category><guid
isPermaLink="false">http://efcl.info/?page_id=1599</guid> <description><![CDATA[以前、書いたものをちょっと修正しただけのものなので、意味がおかしい文が混じっている可能性があるので注意 **** flvplayer_wrapper http://files.getdropbox.com/u/13247 [...]]]></description> <content:encoded><![CDATA[<p>以前、書いたものをちょっと修正しただけのものなので、意味がおかしい文が混じっている可能性があるので注意</p><p>****</p><p>flvplayer_wrapper<a
href="http://files.getdropbox.com/u/132475/flvplayer_wrapper_mod.zip" target="_blank"><br
/>http://files.getdropbox.com/u/132475/flvplayer_wrapper_mod.zip</a></p><div
id=":ea">(0)使用用途と方法<br
/> 使用用途と方法が特殊なため簡単に説明。<br
/> flvplayer_wrapperはニコニコ動画の旧プレイヤーをオーバーライドして、旧プレイヤーに新しい機能を追加 することを目的としたソフトウェアです。<br
/> 旧プレイヤーは2009年7月に開発終了の宣言が出て( <a
href="http://www.nicovideo.jp/?p=about_player" target="_blank">http://www.nicovideo.jp/?p=about_player</a> )、<br
/> 新プレイヤーに切り替わったため、現在は上記のURLのように旧プレイヤーが使用できる一部動画のみで動作する。<br
/> 使用方法はニコニコ動画のプレイヤーの代わりにflvplayer_wrapperをブラウザ上で呼び出さないといけないため、<br
/> プロキシソフトであるProxomitron(オミトロン <a
href="http://site.halfmoon.jp/movielist/29.html" target="_blank">http://site.halfmoon.jp/movielist/29.html</a> ) や NicoCache_nlといったWebページを書き換えるソフトが必要となります。<br
/> 具体的な使用方法はwiki( <a
href="http://wrapper.wiki.zoho.com/" target="_blank">http://wrapper.wiki.zoho.com/</a> )やreadme.txtにまとめてあるため割愛させていただきます。<br
/> 既に設定をしてある状態で配布している Proxomitron、<br
/> いわゆる設定済flvplayer_wrapper( <a
href="http://site.halfmoon.jp/movielist/90.html" target="_blank">http://site.halfmoon.jp/movielist/90.html</a> )を使用しているユーザが数千人程度いると思われます。<br
/> <br
/> （1）作ろうと思ったきっかけ<br
/> flvplayer_wrapper modとは、名前のように2ちゃんねるで開発されていたflvplayer_wrapperという原型となったソフトがあり、<br
/> その公開されていたソースを元に現在の大部分を完成させたflvplayer_wrapper customがありました。<br
/> 2ちゃんねるでflvplayer_wrapper customの制作者が開発を終了するとの知らせと、同時期にNicoCacheのスレに おいて<br
/> 簡単なflvplayer_wrapper customの改変方法が書いてあったのが、flvplayer_wrapper  modを開発しようとしたきっかけです。<br
/> つまり、flvplayer_wrapper modはflvplayer_wrapper  customの公開されていたソースコードが元となっています。<br
/> flvplayer_wrapperは何人かの制作者によって勝手に受け継がれて作られているので、総称してflvplayer_wrapper と呼ばれている。<br
/> flvplayer_wrapperはmingというphpのFLASHを生成するためのライブラリが使われており、中身はAS2がほとんどとなっています。<br
/> 2008年7月11日に初めてflvplayer_wrapperをさわり始めた当初は、プログラミングもほとんどやったことがなかったので、<br
/> 少しだけかじっていたjavascriptの知識を元に手探りで改変とニコニコ動画の仕様変更へと対応していました。<br
/> そのため、2ちゃんねるの掲示板上での動作報告やアドバイスなどがなかったら、保持していくことはなかったと思います。<br
/> <br
/> （2）工夫点や苦労した点<br
/> flvplayer_wrapperはニコニコ動画のプレイヤーにオーバーライドするという仕様上、ニコニコ動画のプレイヤーの<br
/> 変更に影響を受けやすいため、頻繁に行われていた仕様変更に対応することに多くの時間を費やしました。<br
/> ニコニコ動画のプレイヤーをデコンパイルした結果を比較しながら、どこがどのように変更したかを確認したから、<br
/> flvplayer_wrapperにそれを落とす作業が多く、その中で新しく便利な追加機能を加えていきました。<br
/> 特にニコニコ動画でユーザーニコ割が導入された際はかなり大きな変更があり、なおかつ当時はプログラミング知識もあまりなかったため、かなり苦戦してユーザーニコ割へ対応した覚えがある。<br
/> また、flvplayer_wrapperは機能の多さと画面の広さを維持したいという思いがあったため、UIにいくつかのパターンを用意したり(<a
href="http://is.gd/1YI7C" target="_blank"> http://is.gd/1YI7C</a> )、<br
/> プレイヤーを最大化した上でのユーザーニコ割の表示に動画自体の邪魔にならないようにするなどの工夫をした。<br
/> ここでも、2ちゃんねるのオミトロンスレでのUIイメージの提供などの協力があったためできたと思います。<br
/> flvplayer_wrapperは自分単独で作成したものではありませんが、2008年7月11日から旧プレ イヤーの保持が終了されている現在までに渡って、自分が一番多くの時間を使って関わったソフトウェアである。</div><div>****</div><div>以上</div><div>現在ではoldplayerモードでないといけないことやswf動画では動作しない等いろいろ寿命的な問題が出ています。<br
/> nicocache_nlを使用すれば、誤魔化しながらもswfでも動かしたり延命できるかもしれません。<br
/> (nicocache_nlには新型用にコンパイルされたswfを旧型(wrapper等)でも動くように変換するソフトが付いているので、<br
/> それを利用する。詳しくは<strong>NicoCache_nl</strong>のreadme.txtやwiki等を参照)</div><div><dl><dt><strong>FrontPage &#8211; NicoCache_nl</strong></dt><dd><a
title="FrontPage - NicoCache_nl" href="http://nicolist.net/nicocache_nl/wiki/">http://nicolist.net/nicocache_nl/wiki/</a></dd></dl></div><div
id="_mcePaste" style="position: absolute; left: -10000px; top: 267px; width: 1px; height: 1px; overflow: hidden;">flvplayer_wrapper<br
/> http://files.getdropbox.com/u/132475/flvplayer_wrapper_mod.zip<br
/> <br
/> (0)使用用途と方法<br
/> 使用用途と方法が特殊なため先に説明させていただきます。<br
/> flvplayer_wrapperはニコニコ動画の旧プレイヤーをオーバーライドして、旧プレイヤーに新しい機能を追加することを目的としたソフトウェアです。<br
/> 旧プレイヤーは2009年7月に開発終了の宣言が出て( http://www.nicovideo.jp/?p=about_player )、<br
/> 新プレイヤーに切り替わったため、現在は上記のURLのように旧プレイヤーが使用できる一部動画のみで動作する。<br
/> 使用方法はニコニコ動画のプレイヤーの代わりにflvplayer_wrapperをブラウザ上で呼び出さないといけないため、<br
/> プロキシソフトであるProxomitron(オミトロン http://site.halfmoon.jp/movielist/29.html ) や NicoCache_nlといったWebページを<br
/> 書き換えるソフトが必要となります。<br
/> 具体的な使用方法はwiki( http://wrapper.wiki.zoho.com/ )やreadme.txtにまとめてあるため割愛させていただきます。<br
/> 既に設定をしてある状態で配布しているProxomitron、<br
/> いわゆる設定済flvplayer_wrapper( http://site.halfmoon.jp/movielist/90.html )を使用しているユーザが数千人程度いると思われます。<br
/> <br
/> （1）作ろうと思ったきっかけ<br
/> flvplayer_wrapper modとは、名前のように2ちゃんねるで開発されていたflvplayer_wrapperという原型となったソフトがあり、<br
/> その公開されていたソースを元に現在の大部分を完成させたflvplayer_wrapper customがありました。<br
/> 2ちゃんねるでflvplayer_wrapper customの制作者が開発を終了するとの知らせと、同時期にNicoCacheのスレにおいて<br
/> 簡単なflvplayer_wrapper customの改変方法が書いてあったのが、flvplayer_wrapper modを開発しようとしたきっかけです。<br
/> つまり、flvplayer_wrapper modはflvplayer_wrapper customの公開されていたソースコードが元となっています。<br
/> flvplayer_wrapperは何人かの制作者によって勝手に受け継がれて作られているので、総称してflvplayer_wrapperと呼ばれている。<br
/> flvplayer_wrapperはmingというphpのFLASHムービーを生成するためのライブラリが使われており、中身はAS2がほとんどとなっています。<br
/> 2008年7月11日に初めてflvplayer_wrapperをさわり始めた当初は、プログラミングもほとんどやったことがなかったので、<br
/> 少しだけかじっていたjavascriptの知識を元に手探りで改変とニコニコ動画の仕様変更へと対応していました。<br
/> そのため、2ちゃんねるの掲示板上での動作報告やアドバイスなどがなかったら、このプロダクトを保持していくことはなかったと思います。<br
/> <br
/> （2）がんばった点や苦労した点<br
/> flvplayer_wrapperはニコニコ動画のプレイヤーにオーバーライドするという仕様上、ニコニコ動画のプレイヤーの<br
/> 変更に影響を受けやすいため、頻繁に行われていた仕様変更に対応することに多くの時間を費やしました。<br
/> ニコニコ動画のプレイヤーをデコンパイルした結果を比較しながら、どこがどのように変更したかを確認したから、<br
/> flvplayer_wrapperにそれを落とす作業が多く、その中で新しく便利な追加機能を加えていきました。<br
/> 特にニコニコ動画でユーザーニコ割が導入された際はかなり大きな変更があり、なおかつ当時はプログラミング知識もあまりなかったため、かなり苦戦してユーザーニコ割へ対応した覚えがある。<br
/> また、flvplayer_wrapperは機能の多さと画面の広さを維持したいという思いがあったため、UIにいくつかのパターンを用意したり(<br
/> http://is.gd/1YI7C )、<br
/> プレイヤーを最大化した上でのユーザーニコ割の表示に動画自体の邪魔にならないようにするなどの工夫をした。<br
/> ここでも、2ちゃんねるのオミトロンスレでのUIイメージの提供などの協力があったためできたと思います。<br
/> flvplayer_wrapperは自分単独で作成したプロダクトではありませんが、2008年7月11日から旧プレイヤーの保持が終了されている現在までに渡って、自分が一番多くの時間を使って関わったものである。</div>]]></content:encoded> <wfw:commentRss>http://efcl.info/wiki/flvplayer_wrapper/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Ｊｅｔｐａｃｋで何かを作ってみる(作り方など</title><link>http://efcl.info/2010/0126/res1547/</link> <comments>http://efcl.info/2010/0126/res1547/#comments</comments> <pubDate>Tue, 26 Jan 2010 07:40:04 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Jetpack]]></category> <category><![CDATA[Greasemonkey]]></category> <category><![CDATA[LDR]]></category> <category><![CDATA[ステータスバー]]></category> <category><![CDATA[ニコニコ動画]]></category><guid
isPermaLink="false">http://efcl.info/?p=1547</guid> <description><![CDATA[最近Jetpackをいじり始めたので、何かを作りながら作り方を学んでみる。 Copy shorten URL with is.gd クリックするとクリップボードに今のURLを短縮したものがコピーされる。 いわゆるクリップ [...]]]></description> <content:encoded><![CDATA[<p>最近<a
href="https://jetpack.mozillalabs.com/">Jetpack</a>をいじり始めたので、何かを作りながら作り方を学んでみる。</p><div
id="attachment_1549" class="wp-caption alignnone" style="width: 310px"><a
href="http://efcl.info/wp-content/uploads/2010/01/sshot-2010-01-26-1.png"></a><a
href="http://efcl.info/wp-content/uploads/2010/01/2010-01-26-16-38-15.png"><img
class="alignnone size-medium wp-image-1550" title="2010-01-26 16-38-15" src="http://efcl.info/wp-content/uploads/2010/01/2010-01-26-16-38-15-300x84.png" alt="" width="300" height="84" /></a><p
class="wp-caption-text">作ったものなど</p></div><p><br
class="spacer_" /></p><ol><li><a
href="http://jetpackgallery.mozillalabs.com/jetpacks/301">Copy shorten URL with is.gd</a><br
/> クリックするとクリップボードに今のURLを短縮したものがコピーされる。<br
/> いわゆるクリップボード機能&amp;ステータスバーに挿入を使ってみたかった。</li><li><a
href="http://jetpackgallery.mozillalabs.com/jetpacks/320">LDR_StatusBar_Notify</a><br
/> LDRの未読件数をステータスバーに表示<br
/> LivedoorReader StatusBar Notify<br
/> http://d.hatena.ne.jp/zuzu_sion/20090520/1242900564<br
/> を現在のバージョンで動くように修正しただけです。<br
/> 昔のバージョンではimportがなかったり、Jetpackが大文字でも動いてたらしい。</li><li><a
href="http://jetpackgallery.mozillalabs.com/jetpacks/322">clipboard_display</a><br
/> クリップボードの内容をステータスバーに表示。<br
/> <br
/> いわゆるクリップボード機能を使ってm(ry<br
/> クリップボードが変更した際に知らせてくれるようなAPIはなかったのでintervalで回してるだけ。</li><li><a
href="http://jetpackgallery.mozillalabs.com/jetpacks/321">Nico_make_volume_corrections<br
/> </a>ニコニコ動画で再生開始時にSettingで決めたボリュームにする。<br
/> <br
/> <a
href="https://developer.mozilla.org/ja/Jetpack/Storage/Settings">manifest</a>で設定画面が簡単に作れるのはいい感じ。<br
/> いわゆるGreasemonkey的なものなJetpack<br
/> サイトの範囲を指定するのにはpageModsを使用する<br
/> <a
href="https://wiki.mozilla.org/Labs/Jetpack/JEP/17">Labs/Jetpack/JEP/17 &#8211; MozillaWiki<br
/> </a>unsafeWindowはwrappedJSObjectを使っちゃってるが、javascript:プロトコルでブックマークレット的にやる方がよいです。<br
/> これが<a
href="http://wp.serpere.info/archives/1107">XPCNativeWrapperとunsafeWindowの間でデータを送受信する | へびにっき</a> 参考になります。</li></ol><p>JetpackのAPIは<br
/> プロファイルフォルダ\extensions\jetpack@labs.mozilla.com\content\js<br
/> のjsを読むと何があるか分かる。<br
/> 解説は<a
href="https://wiki.mozilla.org/Labs/Jetpack/JEPs">Labs/Jetpack/JEPs  &#8211; MozillaWiki</a>を見て、検索をかける(たいていの場合<a
href="http://d.hatena.ne.jp/con_mame/">まめ畑</a>がかかります)</p><p><a
href="http://gist.github.com/282717">azu さんのjetpackに関するメモに返信</a> に自分がメモったことに対して<a
href="http://d.hatena.ne.jp/teramako/">teramako</a>さんからの指摘が書いてあります。<br
/> 今Jetpackでどんなことがどのようにできるのかが何となく書いてあります。</p><dl><dt><strong>Jetpack &#8211; MDC</strong></dt><dd><a
title="Jetpack - MDC" href="https://developer.mozilla.org/ja/Jetpack">https://developer.mozilla.org/ja/Jetpack </a> <br
/> 簡素だがAPI解説がまとまってる</dd></dl><dl><dt><strong>Jetpack APIリファレンス | Screw-Axis</strong></dt><dd><a
title="Jetpack APIリファレンス | Screw-Axis" href="http://screw-axis.com/jetpack/jetpack-api-referencejetpack-api-reference/">http://screw-axis.com/jetpack/jetpack-api-referencejetpack-api-reference/</a><br
/> ちょこっと古いけどわかりやすい</dd><dt><strong>[Jetpack] &#8211; Cli@</strong></dt><dd><a
title="[Jetpack] - Cli@" href="http://d.hatena.ne.jp/efcl/searchdiary?word=%2a%5bJetpack%5d">http://d.hatena.ne.jp/efcl/searchdiary?word=%2a%5bJetpack%5d</a></dd><dd>なんかリンクいろいろ</dd></dl><dl><dt><strong>30分で作るJetpack Feature (1) 概要 &#8211; JavaScriptとかPerlとかPHPとかさくらとか勉強する</strong></dt><dd><a
title="30分で作るJetpack Feature (1) 概要 - JavaScriptとかPerlとかPHPとかさくらとか勉強する" href="http://d.hatena.ne.jp/lesamoureuses/20090715/1247637734">http://d.hatena.ne.jp/lesamoureuses/20090715/1247637734</a><br
/> チュートリアル</dd></dl><p>Jetpackには<a
href="https://wiki.mozilla.org/Labs/Jetpack/JEP/16">SlideBar</a>という機能もあるが今回全く触れてない。<br
/> All-in-One  Sidebarみたいなものを使えるらしい。</p><p><br
class="spacer_" /></p>]]></content:encoded> <wfw:commentRss>http://efcl.info/2010/0126/res1547/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>ニコニコ動画のマイリストページに共起タグクラウドを表示するGreasemonkey</title><link>http://efcl.info/2010/0113/res1531/</link> <comments>http://efcl.info/2010/0113/res1531/#comments</comments> <pubDate>Tue, 12 Jan 2010 16:32:10 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Greasemonkey]]></category> <category><![CDATA[JSON]]></category> <category><![CDATA[ニコニコ動画]]></category><guid
isPermaLink="false">http://efcl.info/?p=1531</guid> <description><![CDATA[ニコニコ動画の検索ページに共起タグクラウドを表示するChrome用ユーザスクリプト作ってみた &#8211; あたご型護衛艦日記 http://d.hatena.ne.jp/aTaGo/20100112/12632852 [...]]]></description> <content:encoded><![CDATA[<dl><dt><strong>ニコニコ動画の検索ページに共起タグクラウドを表示するChrome用ユーザスクリプト作ってみた &#8211; あたご型護衛艦日記</strong></dt><dd><a
title="ニコニコ動画の検索ページに共起タグクラウドを表示するChrome用ユーザスクリプト作ってみた - あたご型護衛艦日記" href="http://d.hatena.ne.jp/aTaGo/20100112/1263285275">http://d.hatena.ne.jp/aTaGo/20100112/1263285275</a></dd></dl><p>という便利なものがあったので公開マイリストページにもタグクラウドを表示するGreasemonkeyを書いてみた。</p><p><a
href="http://efcl.info/wp-content/uploads/2010/01/sshot-2010-01-13-1.png"><img
class="alignnone size-medium wp-image-1533" title="sshot-2010-01-13-" src="http://efcl.info/wp-content/uploads/2010/01/sshot-2010-01-13-1-300x129.png" alt="" width="300" height="129" /></a></p><ul><li><a
href="http://gist.github.com/raw/275310/b111171970596648f75432d0febf16e837a6eb0c/Mylist%20TagCloud.user.js">Mylist TagCloud</a></li></ul><pre class="brush:javascript;">// ==UserScript==
// @name           Mylist TagCloud
// @namespace      http://efcl.info/
// @include        http://www.nicovideo.jp/mylist/*
// ==/UserScript==
evalInPage(function(){

	var as = my.currentItems
	var ids = "";
	if(as.length &#62; 1){
		insertcallback();
		for(var i = 0; i &#60; as.length; i++){
			var smid = as&#91;i&#93;.item_data.video_id;
			ids += smid + "+";
		}
		//console.log(ids);
		var uri = "http://nicotag.sakura.ne.jp/getcollocationtag.php?smid=" + ids + "&amp;rand=" + Math.floor(Math.random()*1000);;
		calljsonp(uri);
	}

function calljsonp(uri){
	var scr = document.createElement('script');
	scr.type = "text/javascript";
	scr.src = uri;
	document.body.appendChild(scr);
}

function insertcallback(){
	var callscr = document.createElement('script');
	callscr.type = "text/javascript";
	callscr.text = ''
			+ 'function callback(val){'
			+ 'var footer = document.querySelectorAll("div#SYS_box_mylist_body");'
			+ 'var foot = footer&#91;0&#93;;'
			+ 'var div = document.createElement("div");'
			+ 'div.innerHTML = val;'
			+ 'foot.parentNode.insertBefore(div, foot);'
			+ '}';
	document.body.appendChild(callscr);
}
})
function evalInPage(fun) {
  location.href = "javascript:void (" + fun + ")()";
}
</pre><p>JSONPでしか取得できないような気がしたので、ほぼそのままな感じ。<br
/> 確かめてないけどChromeでも動くかも。</p>]]></content:encoded> <wfw:commentRss>http://efcl.info/2010/0113/res1531/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>ニコニコ動画のマイリストページに埋め込まれている情報(DOM)</title><link>http://efcl.info/2009/1121/res1477/</link> <comments>http://efcl.info/2009/1121/res1477/#comments</comments> <pubDate>Fri, 20 Nov 2009 16:05:16 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[ニコニコ動画]]></category> <category><![CDATA[API]]></category> <category><![CDATA[Firebug]]></category> <category><![CDATA[javascript]]></category><guid
isPermaLink="false">http://efcl.info/?p=1477</guid> <description><![CDATA[ニコニコ動画の再生ページに埋め込まれている情報 &#124; Web scratch のマイリストページ版みたいなものです。 マイリストにもAPIがありますが(ニコニコ動画のAPIまとめ &#124; Web scratch )マイリストペ [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://efcl.info/2008/1206/res369/">ニコニコ動画の再生ページに埋め込まれている情報 | Web scratch</a> のマイリストページ版みたいなものです。<br
/> マイリストにもAPIがありますが(<a
href="/?page_id=1445">ニコニコ動画のAPIまとめ | Web scratch</a> )マイリストページにいるならば、わざわざAPI叩かなくてもいろんな情報が取得できます。<br
/> なんでわざわざDOMから情報を取ってるかというと、変更の影響を受けにくかったりするからです。<br
/> ここでのマイリストは人が公開してるマイリストのこと。</p><pre>my
	Mylist.groupList
		id (number): マイリストID
		user_id (number): マイリストのユーザーID
		name (string): マイリストのタイトル
		description (string): マイリスト説明文
		public (boolean): true // 公開状況
		default_sort (number): 1 (1-17)
		create_time (number): UNIX時間(util.unix2で戻せる)
		update_time (number): UNIX時間
		icon_id (number): 0
		sort_order (number): 0 
	my.currentItems
		&#91;0&#93;...配列
			item_type (number): 0
			item_id (string): 接頭辞がない動画番号(常時)
			description (string): マイリスト登録者による説明文
			item_data 
				video_id (string): 接頭辞がある動画番号(sm数字)
				title (string):  動画タイトル
				thumbnail_url (string): サムネイルURL
				first_retrieve (number): 投稿日時(UNIX時間)
				update_time (number): 更新日時(UNIX時間)
				view_counter (string): 再生数
				mylist_counter (string): マイリスト数
				num_res (string): コメント数
				group_type (string): default 
				length_seconds (string): 再生時間(秒)
				deleted (string): 0 (削除状態0-3?)
				last_res_body (string): 最近のコメント(文字列)
				watch_id (string): 接頭辞なしの動画番号(コミュ、マイメモリー以外だと接頭辞がある)
			watch (number): 0
			create_time (number): マイリスト登録日時(UNIX時間)
			update_time (number): マイリスト更新日時(UNIX時間)</pre><p>Firebugなどから、console.dir(my)などして構造を確認しておくといいです。 <br
/> DOMから動画情報を取得するのを少しだけ手助けする関数群を置いておきます。(思ったより役に立たない)</p><pre class="brush:javascript;">(function () {
	var w = unsafeWindow;
	Mylist = {
		// マイリストの属性
		/*
		Mylist.groupListのツリー
			id (number): マイリストID
			user_id (number): マイリストのユーザーID
			name (string): マイリストのタイトル
			description (string): マイリスト説明文
			public (boolean): true // 公開状況
			default_sort (number): 1 (1-17)
			create_time (number): UNIX時間(util.unix2で戻せる)
			update_time (number): UNIX時間
			icon_id (number): 0
			sort_order (number): 0
		*/
		// Mylist.groupList - my.CurrentGroupのコピー
		groupList: function () {
			return w.my.currentGroup;
		},
		/*
		my.currentItemsのツリー
			item_type (number): 0
			item_id (string): 接頭辞がない動画番号(常時)
			description (string): マイリスト登録者による説明文
			item_data
				video_id (string): 接頭辞がある動画番号(sm数字)
				title (string):  動画タイトル
				thumbnail_url (string): サムネイルURL
				first_retrieve (number): 投稿日時(UNIX時間)
				update_time (number): 更新日時(UNIX時間)
				view_counter (string): 再生数
				mylist_counter (string): マイリスト数
				num_res (string): コメント数
				group_type (string): default
				length_seconds (string): 再生時間(秒)
				deleted (string): 0 (削除状態0-3?)
				last_res_body (string): 最近のコメント(文字列)
				watch_id (string): 接頭辞なしの動画番号(コミュ、マイメモリー以外だと接頭辞がある)
			watch (number): 0
			create_time (number): マイリスト登録日時(UNIX時間)
			update_time (number): マイリスト更新日時(UNIX時間)
		*/
		// Mylist.itemList - my.currentItemsのコピー
		itemList : function(){
			return w.my.currentItems;
		},
	}

	// utility関数群
	utils = {
	  playlength : transPlaylength,
	  unix2 : unixTodate,
	  clone : clone,
	}

	// 再生時間を分秒に変換
	function transPlaylength(length){
		return (length / 60).toFixed(2).toString().split(".").join("分") + "秒";
	}
	// 10桁の数字(UNIXTIME)から2009/10/1 00:00形式で返す
	function unixTodate(x){
		var t=new Date(x*1000);
		return t.getFullYear() + "/" + fillZero(t.getMonth() + 1) + "/" + fillZero(t.getDate()) + " " + fillZero(t.getHours()) + ":" + fillZero(t.getMinutes()) + ":" + fillZero(t.getSeconds());
	}
	// http://d.hatena.ne.jp/javascripter/20080514/1210791575
	// 先頭を0で埋める デフォルト2桁
	function fillZero(num , digit){
		var n = (digit) ? digit : 2;// デフォルト値
		var zero=new Array(n).join('0');//0をn-1文字分つなげた文字列を作る。n==4だと'000'
		var str=zero+num;//zeroとthisをくっつけた文字列を作る。
		var result=str.substr(-n);//strの後ろから、n文字分の文字列を取ってくる。
		return result;
	}
	// オブジェクトのコピーのコピーを作成
	function clone(obj){
		return (typeof uneval == "function") ? eval(uneval(obj)) : false;
	}

})();</pre><p><a
href="http://gist.github.com/239541">gist: 239541 &#8211; GitHub</a></p><p>どんな風に使うかというと、上の関数群を読み込んで使用します。<br
/> DOMへのアクセスをするものと少しのutility関数群から構成されています。<br
/> 再生時間を分秒に直したり、UNIX時間で格納されている時間を2009/10/1 00:00形式に直したりするだけです。</p><pre class="brush:javascript;">// ==UserScript==
// @name           Nico mylist Test
// @namespace      http://efcl.info/
// @include        http://www.nicovideo.jp/mylist/*
// @require        http://gist.github.com/raw/239541/1dab27439133948bd6309f4ba959921a8ce938b9/NicoMylistDom.js
// ==/UserScript==
var t = Mylist.itemList();// DOM my.currentItemsにアクセス
var cpObj = utils.clone(t);// オブジェクトのコピー作成(元の値を残す)
console.log(cpObj.length)
for(var i =0,l =cpObj.length;i&#60;l;i++){
  console.log(i + " : " + cpObj&#91;i&#93;.item_data.title + "投稿日 : "+ utils.unix2(cpObj&#91;i&#93;.item_data.first_retrieve))
}
cpObj&#91;i-1&#93;.item_data.title = "buzz";//コピーしたものを書き換える
console.log(t&#91;i-1&#93;.item_data.title)// 元のDOMには影響ない</pre><ul><li> <a
href="http://gist.github.com/raw/239576/20b1a6a94c098aeb9af3acdf4cbd6be76e4583b9/Nico%20mylist%20Test.user.js">Nico mylist Test.user.js</a></li></ul><p>上の関数群のテスト例です。インストールしてマイリストページに行くとコンソールに例が表示されるので参考にどうぞ</p>]]></content:encoded> <wfw:commentRss>http://efcl.info/2009/1121/res1477/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>ニコニコ動画のAPIまとめ</title><link>http://efcl.info/wiki/niconicoapi/</link> <comments>http://efcl.info/wiki/niconicoapi/#comments</comments> <pubDate>Thu, 12 Nov 2009 11:47:35 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[その他]]></category> <category><![CDATA[API]]></category> <category><![CDATA[ニコニコ動画]]></category><guid
isPermaLink="false">http://efcl.info/?page_id=1445</guid> <description><![CDATA[ニコニコのマイリスト周りにAPIがいろいろ増えていたので、列挙してみる。 使い方は http://res.nimg.jp/js/nicoapi.js をよく読む。 見方としては 分別 メソッド名 URL(http://w [...]]]></description> <content:encoded><![CDATA[<p>ニコニコのマイリスト周りにAPIがいろいろ増えていたので、列挙してみる。 <br
/> 使い方は http://res.nimg.jp/js/nicoapi.js をよく読む。 <br
/> 見方としては</p><pre>分別
    メソッド名
        URL(http://www.nicovideo.jp/api/foo/bar　という感じで使う)
            クエリー(それぞれの要素を&amp;でつなげて指定)
    返ってくるもの
</pre><p>という感じで書いている。</p><dl><dt><strong>Cathode Music: ニコニコ動画(9)APIを纏めた</strong></dt><dd><a
title="Cathode Music: ニコニコ動画(9)APIを纏めた" href="http://tewi.blogspot.com/2009/11/9api.html">http://tewi.blogspot.com/2009/11/9api.html</a></dd></dl><p>も併せて読む。</p><p>書き方の一例(testという名前のマイリストを新規作成する)</p><p><a
id="ctl00_ContentPlaceHolder1_fvDownloadResults_Hyperlink5" href="javascript:(function(){var%20token=NicoAPI.token;location.href=&quot;http://www.nicovideo.jp/api/mylistgroup/add?name=test&amp;description=&amp;public=1&amp;default_sort=1&amp;icon_id=0&amp;token=&quot;+token;})()">Nico make mylist </a>←のブックマークレットをニコニコ動画上のトークンがあるページで実行する<a
id="ctl00_ContentPlaceHolder1_fvDownloadResults_Hyperlink5" href="javascript:(function(){var%20token=NicoAPI.token;location.href=&quot;http://www.nicovideo.jp/api/mylistgroup/add?name=test&amp;description=&amp;public=1&amp;default_sort=1&amp;icon_id=0&amp;token=&quot;+token;})()"><br
/> </a></p><p>var token = NicoAPI.token;<br
/> location.href = &#8220;http://www.nicovideo.jp/api/mylistgroup/add?name=test&amp;description=&amp;public=1&amp;default_sort=1&amp;icon_id=0&amp;token=&#8221;+token;</p><p>APIのURLに引数となるクエリーを&amp;区切りでつなげていったURLにアクセスすると正否を表すjsonが返ってくる。<br
/> 書き込み権限が必要なAPIにはtokenも必要となる。<br
/> tokenはNicoAPI.token = &#8220;xxxxx-xxxxx-xxxxxxxxxxxx&#8221;という感じでページに埋め込まれているので、<br
/> Greasemonkeyからならvar  token = unsafeWindow.NicoAPI.token で取得できるはず。</p><p>基本的に返ってくるものはjson形式</p><p>適当にパラメータの説明</p><ul><li>item_typeは<span
style="text-decoration: line-through;">0であることがほとんどらしい。</span>動画が0、静画が5。</li><li>item_idは接頭辞のない数字だけの動画番号を指定する</li><li>id_listは id_list[0][]=item_id という感じのパラメータになる</li></ul><pre>NicoAPI.Deflist
とりあえずマイリスト
    list
    とりあえずマイリストの一覧を取得
        "/api/deflist/list"
	jsonフォーマットで返ってくる

    add
    とりあえずマイリストに追加
        "/api/deflist/add",
    			{ "item_type": item_type,
    			  "item_id": item_id,
    			  "description": description }
	item_typeは接頭辞のない数字だけの動画番号を指定する

    update
    とりあえずマイリストを更新
    	"/api/deflist/update",
    		{ "item_type": item_type,
    		  "item_id": item_id,
    		  "description": description }

    remove
    とりあえずマイリストから削除
        "/api/deflist/delete",
            { "id_list": id_list }
    move
    とりあえずマイリストから移動
        "/api/deflist/move"
    			{ "target_group_id": target_group_id,
    			  "id_list": id_list }
    copy
    とりあえずマイリストからコピー
        "/api/deflist/copy"
            { "target_group_id": target_group_id,
    			  "id_list": id_list }
</pre><pre>NicoAPI.MylistGroup
マイリスト
    list
    jsonフォーマットでマイリスト一覧を取得
    マイリストの名前やidなど(中身はNicoAPI.Mylistで)
        "/api/mylistgroup/list"
    get
    指定したマイリストIDの詳細を取得
    listに含まれてるのと同じ内容?
        "/api/mylistgroup/get"
            { "group_id": group_id }
    add
    マイリストを新規作成
        "/api/mylistgroup/add"
			{ "name": name,
			  "description": description,
			  "public": is_public,// 0:非公開 1:公開
			  "default_sort": default_sort,
			  "icon_id": icon_id }
    update
    マイリスト情報を更新
         "/api/mylistgroup/update",
			{ "name": name,
			  "description": description,
			  "public": is_public,
			  "default_sort": default_sort,
			  "icon_id": icon_id }
    remove
    マイリストを削除する
	    "/api/mylistgroup/delete",
	        { "group_id": group_id }
	sort
	マイリストのソートの実行
	マイリスト情報の"default_sort"で指定したソート法でソートし直す
	    "/api/mylistgroup/sort"
	        { "group_id_list": group_id_list }
</pre><p>icon_idの指定</p><p><a
href="http://efcl.info/wp-content/uploads/2009/11/ss-2009-11-12-20-25-10.png"><img
class="alignnone size-medium wp-image-1453" title="ss-2009-11-12-20-25-10" src="http://efcl.info/wp-content/uploads/2009/11/ss-2009-11-12-20-25-10-300x48.png" alt="ss-2009-11-12-20-25-10" width="300" height="48" /></a></p><p>左から順に0,1,2,3となっていて 数字で指定</p><p>default_sortのソート法の指定</p><table
style="border-collapse: collapse; height: 354px;" border="0" cellspacing="0" cellpadding="0" width="235"><col
style="width: 107pt;" width="143"></col><col
style="width: 54pt;" width="72"></col><tbody><tr
style="height: 15pt;" height="20"><td
class="xl67" style="height: 15pt; width: 107pt;" width="143" height="20">ソート方法<span> </span></td><td
class="xl68" style="width: 54pt;" width="72"><span> </span>ID<span> </span></td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl66" style="height: 13.5pt;" height="18">登録が古い順<span> </span></td><td
class="xl66" style="border-left: medium none;" align="right">0</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">登録が新しい順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">1</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">メモ昇順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">2</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">メモ降順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">3</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">タイトル昇順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">4</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">タイトル降順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">5</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">投稿が新しい順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">6</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">投稿が古い順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">7</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">再生が多い順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">8</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">再生が少ない順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">9</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">コメントが新しい順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">10</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">コメントが古い順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">11</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">コメントが多い順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">12</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">コメントが少ない順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">13</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">マイリスト登録が多い順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">14</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">マイリスト登録が少ない順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">15</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">時間が長い順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">16</td></tr><tr
style="height: 13.5pt;" height="18"><td
class="xl65" style="border-top: medium none; height: 13.5pt;" height="18">時間が短い順<span> </span></td><td
class="xl65" style="border-top: medium none; border-left: medium none;" align="right">17</td></tr></tbody></table><pre>NicoAPI.Mylist
マイリストの動画操作
	list
	指定したマイリストの動画一覧を取得
		"/api/mylist/list",
			{ "group_id": group_id }

	add
	指定したマイリストの動画を加える
		"/api/mylist/add",
			{ "group_id": group_id,
			  "item_type": item_type,
			  "item_id": item_id,
			  "description": description }

	update
	指定したマイリストの動画情報を更新
		"/api/mylist/update",
			{ "group_id": group_id,
			  "item_type": item_type,
			  "item_id": item_id,
			  "description": description }

	remove
	指定したマイリストの動画を削除
		"/api/mylist/delete",
			{ "group_id": group_id,
			  "id_list": id_list }
	id_listの形式
		function make_id_list(item_type, item_id) {
			var id_list = {};
			id_list&#91;item_type&#93; = jQuery.makeArray(item_id);
			return id_list;
		}

	move
	指定したマイリストの動画を別のマイリストに移動
		"/api/mylist/move",
			{ "group_id": group_id,
			  "target_group_id": target_group_id,
			  "id_list": id_list }
	例)

http://www.nicovideo.jp/api/deflist/move?id_list%5B0%5D%5B%5D=動画番号&#038;target_group_id=マイリスト番号&#038;token=トークン

	指定したマイリストの動画を別のマイリストにコピー
	copy
		"/api/mylist/copy",
			{ "group_id": group_id,
			  "target_group_id": target_group_id,
			  "id_list": id_list }</pre><pre>NicoAPI.Watchitem
ウォッチリスト
	list
	ウォッチリストの一覧を取得
		"/api/watchitem/list"
	watchitem配列にウォッチリストに登録したユーザー名やIDが入っている

	exist
	ウォッチリストのitem確認
		"/api/watchitem/exist",
			{ "item_type": item_type,
			  "item_id": item_id }

	add
	ウォッチリストに加える
		"/api/watchitem/add",
			{ "item_type": item_type,
			  "item_id": item_id }

	remove
	ウォッチリストから削除する
		"/api/watchitem/delete",
			{ "id_list": id_list }
</pre><pre>NicoAPI.Mymemory
マイメモリー
	list
	マイメモリーに入れている動画一覧を取得
		"/api/mymemory/list"

	remove
	マイメモリーからid_listで指定した動画を削除
		"/api/mymemory/delete",
			{ "id_list": id_list }

NicoAPI.Friendlist
フレンドリスト
	list
		"/api/friendlist/list",
			{ "sort": options.sort,
			  "order": options.order,
			  "offset": options.offset,
			  "count": options.count }

	remove
		"/api/friendlist/delete",
			{ "target_user_id": target_user_id }
</pre><pre>NicoAPI.Mylistcomment
マイリストコメント
	list
		"/api/mylistcomment/list"
			{ "item_type": item_type,
			  "item_id": item_id }
	nicoapi.jsには書いてないので、この指定方法が正しいか分からない。
	json形式でマイリストが返ってくる
</pre><p><span
style="text-decoration: line-through;">実際にこのAPIを叩くと<br
/> {&#8220;mylistcomment&#8221;:&amp;#91;&amp;#93;,&#8221;status&#8221;:&#8221;ok&#8221;}<br
/> のような空が返ってきてしまう。正しく取得する方法があればお知らせ下さい。</span></p><pre>	例) sm9 のマイリストコメントを取得

http://www.nicovideo.jp/api/mylistcomment/list?item_type=0&#038;item_id=1173108780

	item_typeは0でないといけないらしい。(動画が0で、静画が5だそうです)
	item_idには接頭辞のない動画番号を指定。
</pre><p>例)Greasemonkeyからマイリストコメントのコメントを取得</p><pre class="brush:javascript;">getMylistcomments(function(res){
	console.log(res)
});

function getMylistcomments(callback){  
	var itemId = document.getElementsByName("thread_id")&#91;0&#93;.value;
	GM_xmlhttpRequest( {
		method : 'GET',
		url : "http://www.nicovideo.jp/api/mylistcomment/list?item_type=0&amp;item_id=" + itemId,
		headers :  {
			'User-Agent' : 'Mozilla/5.0 Greasemonkey; Nico MylistComments'
		},
		onload : function (res) {
			var jsObject = JSON.parse(res.responseText);
			var l = jsObject.mylistcomment.length;
			var result = &#91;&#93;;
			if (jsObject.status == "ok" &amp;&amp; l &#62; 0) {
				for(var i =0;i&#60;l;i++){
					result.push(jsObject.mylistcomment&#91;i&#93;.description)
				}
				callback(result)
			}
		}
	});
}
</pre><pre>	remove
		"/api/mylistcomment/delete",
			{ "item_type": item_type,
			  "item_id": item_id,
			  "comment_user_id": comment_user_id }
</pre><p>静画関係のAPIはこちらを見た方がよいです。</p><dl><dt><strong>ニコ動マイリスト系APIまとめ &#8211; あたご型護衛艦日記</strong></dt><dd><a
title="ニコ動マイリスト系APIまとめ - あたご型護衛艦日記" href="http://d.hatena.ne.jp/aTaGo/20100811/1281552243">http://d.hatena.ne.jp/aTaGo/20100811/1281552243</a></dd></dl>]]></content:encoded> <wfw:commentRss>http://efcl.info/wiki/niconicoapi/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>FirebugのDOMタブが壊れた(競合)</title><link>http://efcl.info/2009/1104/res1421/</link> <comments>http://efcl.info/2009/1104/res1421/#comments</comments> <pubDate>Wed, 04 Nov 2009 08:34:09 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Firefox]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[アドオン]]></category> <category><![CDATA[ニコニコ動画]]></category> <category><![CDATA[競合]]></category><guid
isPermaLink="false">http://efcl.info/?p=1421</guid> <description><![CDATA[最近になってFirebugのDOMタブで要素をクリックしてもその下の要素が展開されなくなったので、何かのアドオンと競合してるのかを調べてみたら、FxIFというEXIFを見るためのアドオンが原因だと分かった。 FxIFを外 [...]]]></description> <content:encoded><![CDATA[<p>最近になってFirebugのDOMタブで要素をクリックしてもその下の要素が展開されなくなったので、何かのアドオンと競合してるのかを調べてみたら、<a
href="https://addons.mozilla.org/ja/firefox/addon/5673">FxIF</a>というEXIFを見るためのアドオンが原因だと分かった。<br
/> FxIFを外すか、過去のバージョンにするかで回避できた。</p><p>もう一つ、こっちは競合というわけではないけど、<strong>ニコニコ動画がリニューアルしてからマイリスト</strong>にアクセスするとFirefoxが固まってフリーズするようになってしまった。<br
/> こちらの<strong>原因</strong>は<a
href="https://addons.mozilla.org/ja/firefox/addon/4125">It&#8217;s All Text!</a>というテキストエリアをエディタで編集するアドオンを外す事で解消された。<br
/> 多分JavaScriptで動的に表示させるようになったのが要因になって、変な動作をするようになったのかな。</p>]]></content:encoded> <wfw:commentRss>http://efcl.info/2009/1104/res1421/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 4/13 queries in 0.023 seconds using disk: basic
Object Caching 811/833 objects using disk: basic

Served from: efcl.info @ 2012-05-23 09:36:32 -->
