AX

電霊ログ

私のやってるサイト、電子の言霊の活動ログ

カテゴリークラウド

タグリスト

最近のトラックバック

月別アーカイブ(タブ)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  • ニコ動の投稿者名を表示するブックマークレット

自分が欲しかったのと、JavaScript の練習を兼ねて、
ニコニコ動画上の検索結果やタグなどの動画一覧画面ページで投稿者のニックネームを確認できるブックマークレットを作ってみました。
再生画面へ飛ぶ前に投稿者名を確認出来ます。


追記(2017/02/15):
一覧ページで選択出来る表示列数によって、サムネイルクリックで取得できないミスを修正しました。
ちゃんとモード別に確認してなかったので気が付きませんでした。。。
修正前のままでもテキストリンククリックでは取得できます。


「使い方」

下にある「ニコ動名前取得君」のリンクをブックマークに登録し、
ニコニコ動画の該当ページ上で登録したブックマークをクリックして実行。

するとマウスカーソルに「?」マークが付くので
その状態で調べたい動画のリンクを一回クリック。

しばらくすると動画のリンクテキスト部分に
投稿者名が表示される!


「注意」

名前を取得する度に、
ブックマークレットをクリックする必要があります

ひとり言:(試行錯誤の段階で一度に複数の動画からニックネームを取得する様なバージョンも書いたりしましたが、やっぱり向こうのサーバーに付加をあまり掛け無い仕様にした方が良いと考え、何バージョンか重ねてこの様な形に落ち着きました。)


ブックマークレット:
ニコ動名前取得君 (←これをブックマークに追加する。名前は後で好きに変えてください)

ソース:

javascript:(function (d, s, h, e, v, x) {
    function f1(o) {
        if (o) return o.tagName == 'A' ? o : f1(o.parentElement);
    }
    function f2(e, o, r) {
        if (e != o && e.tagName == 'A' && e.href.indexOf(o.pathname) > -1) return e;
        if (e.firstChild) r = f2(e.firstChild, o);
        if (!r && e.nextSibling) r = f2(e.nextSibling, o);
        return r;
    }
    function f3(e, l, r) {
        for (var i = 0, t = e ; i < l ; i++, t = t.parentNode) {
            if (t == null) break;
            if (r = f2(t, e)) return r;
        }
    }
    d = document;
    h = d.head;
    s = d.createElement('style');
    h.appendChild(s);
    s.sheet.insertRule('*{cursor:help;}', 0);

    d.addEventListener('click', function c(ev) {
        ev.preventDefault();
        d.removeEventListener('click', c, false);
        h.removeChild(s);
        e = ev.target;

        if (e.tagName == 'IMG') e = f3(f1(e), 5);
        if (e.className == 'itemThumbWrap') e = f3(e, 5);

        if (e) {
            if (!/^\.*\[.*\]<br>/i.test(e.innerHTML) && (v = /^http:\/\/www.nicovideo.jp\/watch\/(sm\d+)/i.exec(e.href))) {
                x = new XMLHttpRequest();
                x.open('GET', "https://query.yahooapis.com/v1/public/yql?q=select%20thumb.user_nickname%20from%20xml%20where%20url%3D'http%3A%2F%2Fext.nicovideo.jp%2Fapi%2Fgetthumbinfo%2F" + v[1] + "'&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys",
                true);
                x.onreadystatechange = function() {
                    if ((x.readyState == 4) && (x.status == 200)) {
                        e.innerHTML = '[' + JSON.parse(this.responseText).query.results.nicovideo_thumb_response.thumb.user_nickname + ']<br>' + e.innerHTML;
                    }
                };
                x.send(null);
            }
        }
    });
})();


ちなみに、外部との通信には YQL を使用しています。初めて使いましたが便利ですね!
こんな用途に使って良いのかは分かりませんが...。
一応 YQL には使用回数制限がある様ですが
普通に使う分には大丈夫でしょう(1000回/一時間くらいまで大丈夫らしいです)。

このブックマークレットのソースコードは自由にお使いください
ライセンス: NYSL 0.9981

以下のブラウザで動作確認しました
Google Chrome 49
Mozilla FireFox 51
スポンサーサイト
  • VBScript が実行できない

少し前から VBScript がなぜなのか実行できなくなっていたので、グーグルで調べて解決した備忘録。ちなみにこれが治ったら、スカイプのアップデートのエラーも出なくなった。
!このやり方はレジストリを書き換えます、大事な部分に間違った操作をすると最悪の場合パソコンが起動しなくなるなど危険ですので慎重に完全なる自己責任で行って下さい!


#PC環境はWindows Vista です

HSP で VBScript を呼び出すスクリプトを実行したところ、
newcom objVBsc, "ScriptControl"
objVBsc("Language") = "VBScript"
「#Error 39 in line 2 (C:\***\***)
 -->外部オブジェクトの呼び出しに失敗しました」
というエラーが出て「objVBsc("Language")="VBScript"」の部分で実行できなかった。

そこでWSHの入門サイトを見ながらメモ帳で
Wscript.Echo "メッセージを表示"
という初歩的な内容を「test.vbs」の名前で保存し実行してみたら今度は
「Windows Script Host
 スクリプト "C:\***\***\Desktop\test.vbs" のスクリプト エンジン "VBScript" が見つかりません。」
というエラーが出て実行できない。
これは明らかにおかしいので調べてみることに。


エラーの内容を手がかりに検索して見るとこれらのサイトを見つけた
スクリプト エンジン "VBScript" が見つかりません。
VBScript:VBScriptのファイル(XXX.vbs)を実行すると「"スクリプト エンジン VBScript"が見つかりません」エラーが発生する際の対処方法 - 覚書 - My Knowledge Base - FC2ブログ版
Windows Vistaでvbscript.dllを無効に | Windows系OSのQ&A【OKWave】

いずれもコマンドプロンプトから、
regsvr32 -u vbscript.dll や
regsvr32 vbscript.dll を呼び出すという同じ内容。
この方法で試してみると成功しましたと出るものの解決せず。


さらに調べて見ると別の方法が記されているこのページを見つけた
windows のスプリクトエンジンについて | Windows 7のQ&A【OKWave】

回答No.1の【アンインストールの場合】
の手順通りにやってみたところ、途中レジストリの書き換えの際にエラーが出たもののアクセス許可を与えて解決出来た。これで正常に実行できるようになった。

以下順を追って自分がやった事を書いて見る。
基本的には上記のリンク内の内容とほぼ同じ。


まずレジストリエディタを開く、レジストリエディタを開くには「ファイル名を指定して実行」から「regedt32」と入力してOKを押す。スタートメニューに「ファイル名を指定して実行」が無い事も有るらしいので(ファイル名を指定して実行がない:Windows(ウィンドウズ)の使い方-Windows Vista(ウィンドウズビスタ)
別の方法では、スタートメニューを開いて検索ボックスに「regedit」と入力してファイルを検索し出てきた「regedit.exe」を実行でも出来るはず。

レジストリエディタを開いたら、
「HKEY_CLASSES_ROOT\CLSID\{B54F3741-5B07-11cf-A4B0-00AA004A55E8}\InprocServer32」
この場所を探す。

見つけたら InprocServer32 を選択し、切り替わった右側の画面内にある、(既定)をダブルクリック 又は 右クリックメニューから「修正(M)...」を押して 編集ダイアログを出し、値のデータの記入欄に「C:\Windows\system32\vbscript.dll」と入力してOKを押す。
(自分のところではここが違う値になっていた。だから VBScript が使えなかったんだね)

reg3.png

reg4.png

と、ここまでは上記のリンク先の内容と同一。
しかし自分の場合はここで
「値の編集エラー 〇〇を編集できません。値の内容を書き込み中に、エラーが発生しました。」
というエラーダイアログが出た。
この状況は先のページには書かれていなかったので以下からは自分がやってみた事。

アクセスの許可を設定する。
InprocServer32 の右クリックメニューから「アクセスの許可(P)...」をクリックして「InprocServer32 のアクセス許可」のダイアログを出す。

reg1.png

ダイアログが出たら、「セキュリティ」タブの「グループ名またはユーザー名(G)」内の「Administrators」を選択し、その下の「〇〇 のアクセス許可(P)」欄の中の「フル コントロール」の許可チェックボックスをクリックしオンの状態に(自分は Administrators を変更したけど Users でも良いかも)。

reg2.png

できたらOKを押してダイアログを閉じる。
そしてもう一度(既定)キーの値を変更する。
(最後にアクセス許可の設定を元に戻しといた方が良いかも?)

自分はこれで解決できました まる


更に少し前から Skype のアップデート時に、
「the installer has encountered an unexpected error installing this package. this may indicate a problem with this package. the error code is 2738.」
というエラーが出ていた問題も VBScript を修正したら治っていた。
どうやら Skype が裏で使っていたもよう。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。