Hatena::Groupsubtech

NaN days

ブログを移転しています。最新の記事は motemen.hatenablog.com へどうぞ

2013-02-12

自分だけのオリジナルなフレーズをツイートできる userscript

| 13:24 | 自分だけのオリジナルなフレーズをツイートできる userscript - NaN days を含むブックマーク はてなブックマーク - 自分だけのオリジナルなフレーズをツイートできる userscript - NaN days

「これは新しい! ツイートすれば 100 fav 間違いなし!」なフレーズを思いついたとき、賢明な方々は

  1. 念のため一度 Google 先生にお伺いを立てる
  2. 一件もヒットしなければ満を持してツイート

という手順を踏んでいるかと思います。これをひと手間減らすのが今回ご紹介する userscript。インストールすると以下のように

f:id:motemen:20130212130926p:image

0 件の検索結果にツイートボタンが表示されます。あとはこのボタンをクリックしてツイートウィンドウを開くだけ。簡単ですね!

インストール

tweet-google-unique-query.user.jsリポジトリ)をダウンロードして、chrome://extensions に放り込むとよいです。Chrome でのみ確認していますが、Firefox などのブラウザでも使えるかもしれません。

参考リンク

  • Twitter Publish
    • テキストをツイートするだけのボタンを作りたい(URL は要らない)ときは、hashtag 版にしてハッシュタグを指定しないといいみたいです(ひどい)。
  • User Scripts - The Chromium Projects
    • Greasemonkey 由来の @include を使うとインストール時にすべてのウェブサイトに対する権限を要求しようとするので、Chrome 向けのユーザースクリプトを作るときには @match を使うのがよいです。

2008-03-06

del.ico.us にニコ動プレーヤーを表示

| 05:46 | del.ico.us にニコ動プレーヤーを表示 - NaN days を含むブックマーク はてなブックマーク - del.ico.us にニコ動プレーヤーを表示 - NaN days

CodeRepos にコミット新しいバージョンをどうぞ

f:id:motemen:20080306215959p:image

リファラは各自偽装して下さいね。

なんか AutoPagerize のフィルタが何回も呼ばれることがあるんだけど何なんだろう?playerAdded という変数でプレーヤーの多重追加を回避してる。

AutoPagerize に対応できてなかったので修正。

コード書き直して、最初はサムネイルだけを表示するようにしました。サムネイルをクリックするとプレーヤーがロードされます。

// ==UserScript==
// @name           Add nicovideo thumbnail and player to del.icio.us
// @namespace      http://d.hatena.ne.jp/motemen/
// @include        http://del.icio.us/*
// ==/UserScript==

const PLAYER_WIDTH  = 323;
const PLAYER_HEIGHT = 256;

var playerContainer = { };

unsafeWindow.document._write = unsafeWindow.document.write;

unsafeWindow.document.write = function(html) {
    var videoID = arguments.callee.caller && arguments.callee.caller.caller && arguments.callee.caller.caller.arguments[0].v;
    if (!videoID)
        return;

    if (playerContainer[videoID])
        playerContainer[videoID].innerHTML = html;
};

function showPlayer(videoID) {
    var s = document.createElement('script');
    s.setAttribute('src', 'http://www.nicovideo.jp/thumb_watch/' + videoID + (PLAYER_WIDTH && PLAYER_HEIGHT ? '?w=' + PLAYER_WIDTH + '&h=' + PLAYER_HEIGHT : ''));
    s.setAttribute('type', 'text/javascript');
    s.setAttribute('charset', 'utf-8');
    document.body.appendChild(s);
}

function addThumbnail(a) {
    if (!a.href.match('http://www.nicovideo.jp/watch/(.+)'))
        return;
    var videoID = RegExp.$1;

    if (playerContainer[videoID])
        return;

    var thumbnail = document.createElement('img');
    thumbnail.setAttribute('src', 'http://tn-skr.smilevideo.jp/smile?i=' + videoID.match(/\d+$/)[0]);
    thumbnail.addEventListener('click', function() { showPlayer(videoID) }, true);
    thumbnail.style.cursor = 'pointer';

    var container = document.createElement('div');
    container.setAttribute('class', 'nicovideo');
    container.appendChild(thumbnail);

    a.parentNode.insertBefore(container, a.nextSibling);
    a.parentNode.insertBefore(document.createElement('br'), a.nextSibling);

    playerContainer[videoID] = container;
}

function addThumbnails(d) {
    Array.forEach((d || document).getElementsByTagName('a'), addThumbnail);
}

addThumbnails();

window.AutoPagerize && AutoPagerize.addFilter(function(ds) { ds.forEach(addThumbnails) });

MarlienMarlien2011/07/03 02:31What a great resuocre this text is.

cebysrcebysr2011/07/03 17:257Hxs10 <a href="http://yfqahdbzkusi.com/">yfqahdbzkusi</a>