ひまつぶしがてら作ってみた

↓こんなん

ソース
http://b.hatena.ne.jp/video を開いてるときにGreasemonkeyhttp://ext.nicovideo.jp/api/getthumbinfo/hoge から各動画の再生数とか持ってくる.

下記のは古い,というかGistを使うようになった.https://gist.github.com/1583400

// ==UserScript==
// @name           test
// @namespace      http://d.hatena.ne.jp/karronoli
// @description    add nicovideo info to b.hatena.ne.jp/video 
// @include        http://b.hatena.ne.jp/video
// ==/UserScript==

(function () {
    "use strict";
    let nico_link = (function () {
        let tmp = document.evaluate(
            '//a[contains(@href, "nicovideo.jp/")][@class="entry-link"]',
            document, null, 7, null);
        return [tmp.snapshotItem(j) for each (j in 
            (function (i) {while(i) yield --i})(tmp.snapshotLength))];

    })();

    nico_link.forEach(function (nl) {
        let [target] = nl.pathname.match(/[^\/]+$/);
        GM_xmlhttpRequest({
            method: 'GET',
            url: 'http://ext.nicovideo.jp/api/getthumbinfo/' + target,
            data: '',
            onload: function(res) {
                let rt = res.responseText;
                let test = rt.match(/<(video_id)>(.+)<\/\1>/);
                if (!test || test[2] != target) return ;
                let info = {
                    view_counter: rt.match(/<(view_counter)>(.+)<\/\1>/)[2],
                    // comment_num: rt.match(/<(comment_num)>(.+)<\/\1>/)[2],
                    length: rt.match(/<(length)>(.+)<\/\1>/)[2]
                };
                nl.parentNode.innerHTML += '<div>' + [(<>{k} : {info[k]}</>) for (k in info)].join('<br />') + '</div>';
            }
        });
    });

})();


愚痴

  • 配列内包の最初に書いたやつで後置のifを使いたかったからジェネレータは無限の数値列を返せるようにしたんだけど無限ループから返ってこなかった.使いかたおかしい?
  • APIが複数個の動画リクエストできるようになって欲しい
  • text/xmlじゃなくてapplication/xmlか,もしくはjson返して欲しい
  • E4X使えたけど便利じゃない! insertBeforeとかに直接渡せない!! 変数定義部分でしか使えない?

- gihyoさん曰く,div作って,そのinnerHTMLにE4Xのを文字列化して渡す方法
http://gihyo.jp/dev/feature/01/greasemonkey/0002
- DOMノード → E4X XML or E4X XML → DOMノードの変換 とか ヒアドキュメントとか.
http://www.ne.jp/asahi/nanto/moon/2007/04/22/e4x-in-firefox.html
型変換も試したけど不恰好だったのでgihyoさんのマネした.E4Xは変数埋め込みができるヒアドキュメントとして使うものとして覚えた.