Archive for the 'Greasemonkey' Category

その場でいい感じに英英辞典を参照できるGreasemonkeyスクリプト(追記あり)

普段英語のサイトを閲覧していてわからない単語があったりしたら、SPACE ALCの英辞朗 on the WEBで調べたりしてました。
その「調べる」手間を楽にするために、Useful_ejrなどのGreasemonkeyスクリプトがあったわけですが、英辞朗 on the WEBは利用規約でそういったスクリプトの利用を禁じています。で、それを受けてUseful_ejrも公開を停止しています。
ちなみに利用規約で禁じているのは「メタサーチや、検索結果画面の改変を伴う利用」を「許諾なく行うこと」なので、「メタサーチや、検索結果画面の改変を」行うスクリプトの作成と公開自体は問題ないと思われます(僕の個人的な判断なので、責任は持てませんが)。
Useful_ejrも、(作者は公開停止しましたが)未だに例えばこことかで公開されてたりします(英辞朗 on the WEBのURL構造が変わったのでこのままでは使えません。URLをちょこちょこっと変えればいいだけですが)。

で、話は変わって、英語の勉強のためには、英英辞典を使うのがいいよねってのは昔から言われてる話でして、英辞朗のような英和辞典で調べちゃうと理解は出来るんだけど勉強にはならないんだよねって思ってました。
なので、LongmanとかCambridgeとかをFirefoxの検索ボックスから検索できるようにしてたんだけど、いまいち使い勝手が悪いのでついつい英辞朗してしまう。

というわけで、英英辞典をUseful_ejrのように選択するだけでその場でいい感じに表示するグリモンを作りました。
作りましたというか、Useful_ejrのソースをほぼそのまま流用させていただき(ライセンス不明だったので問題があったら言ってください)、英英辞典としてWordWeb Online Dictionaryを参照するようにしただけです。


EclispeじゃないよEclipseだよ!

オンラインで引ける英英辞典はいっぱいあるんですが、その中でもWordWeb Onlineにしたのは、
1. 単語の全ての意味が一発で一覧できる構造になっている。例えば「spring」を検索したときに「春(名詞)」と「バネ(名詞)」と「飛び跳ねる(動詞)」が別々の見出しになっていて、その見出し一覧から調べたいリンクを選んでクリックという形式ではない。
2. 発音記号が載っている(ただしこのグリモン上では一部文字化けしますorz)。
3. 例文が載っている(ことが多い)。
4. 類語が載っている(ことが多い)。
5. 他の英英辞典と比べて比較的レスポンスがいい。
6. http://www.wordwebonline.com/en/○○○というURL構造。
7. スクレイピングのしやすさ。
8. (恐らく)こういう使い方してもOK。
といったような理由からです。

というわけで、このスクリプトはgistにおいてあるんで、ご自由にどうぞ。
インストールはこちらから。

追記:アップデートしました。

paddingが0なページだと上記スクリーンショットみたいにペッタリな感じだったのを、どんなページでもよりいい感じに表示するようにしました。

よりいい感じに

見てるページのコメントをTwitterに投稿できるGreasemonkeyスクリプトを更新しました。

前回のエントリで公開したGreasemonkeyスクリプトには、ブログ主なりサイト管理者なりが自分のTwitterIDをページ内に埋め込んでくれていないと動かないという欠点がありました。

その辺なんとかならないかなーって思いながらも公開したんですが、そのエントリに付いたはてブにヒントが!

2008年06月25日 mattn サイト管理人のtwitter-idを調べるのにtako3を使う手もありかなー

おおお・・・!すばらしい!tako3っていうサービスがありましたね!
このサービスは、ある人が他にどんなサービス使ってるか情報を共有する他己紹介サービスです。昔見て「ほぉ~」って思ったのに忘れていた。

というわけで早速ググって見たところ、

tako3.comとFooo.nameのAPIを叩くユーザスクリプト - cameraLady:
http://june29.jp/2007/10/12/profile-urls-findr-powerd-by-tako3-and-fooo/

というものを発見!
tako3だけじゃなく同様のサービスであるFooo.nameにも対応しているようで、大いに参考にさせてもらいました。

というわけでtako3、Fooo.name対応版が完成しました!
これによって、ブログ主やサイト管理者がページに何かを埋め込んだりする必要なく、tako3やFooo.nameに登録さえされていれば、その人のサイト上でその人のTwitterアカウントに向けてコメントを記入することができます。
CodeReposに置いてあるので、ぜひ使ってみてください。
また、気に入らないところがあればぜひいじってください。

いや~、やっぱ何か作ったら恐れず公開すべきだねぇ。アイデアを下さったmattnさんありがとうございました。

なお、このエントリは、稚作サービスの「ぶっこめ!」を用いまして、上記ブックマークコメントを頂きましたmattnさんのブックマークへのトラックバックエントリとなっております。
はてなのIDコールを使ってmattnさんにこのエントリを知らせる仕組みになってるはずですが気づいてもらえましたか?

Twitterに見てるページのコメントを投稿できるグリモン作った。

インスパイア元:

Going My Way: ブログのエントリーへのコメントを Twitter に投稿できるボタン
http://kengo.preston-net.com/archives/003745.shtml

上記エントリでしてることは、ただのLinkを用意するだけだったので、
もうちょっとなんとかしたいなーってことで、Greasemonkeyの勉強も兼ねて作ってみました。

インストールはこちらから。

<div id="_cvt_twitterId" style="visibility: hidden;">hoge</div>

という要素が表示しているページに存在していると、ウィンドウ下部にTwitterへの投稿Formが出現します。
投稿ボタンを押すと、@hogeさんへの返信という形で、表示してるページのURLとともにコメントがTwitterへ投稿されます。

なので、この要素をまず、ブログ主なりサイト管理者なりが埋め込んでおかないと意味がないです。
この辺なんとかしたいんだけど無理かなぁ。
ちなみに、当ブログでは上記要素を埋め込んでいるのでこのGreasemonkeyをインストールすれば、Twitterへの投稿Formが出現するはずです。

Twitterへの投稿時の認証はブラウザによるBASIC認証なので、初回はID/PASSを聞かれると思います。

念のため、ソースコードも貼っときます。初Greasemonkeyなので、突っ込み大歓迎です。
ライセンスはNYSLです。
(追記) CodeReposにコミットしました。
http://svn.coderepos.org/share/lang/javascript/CvT/comment_via_twitter.user.js

// ==UserScript==
// @name           Comment via Twitter
// @namespace      com.mesolabs
// @description    Comment via Twitter
// @include        *
// ==/UserScript==

(function () {

    var cvtElement = document.getElementById("_cvt_twitterId")
    if (cvtElement) {
        var form = //
        <form action="#" id="_cvt_form">
            Comment via Twitter: <input type="text" id="_cvt_text" />
            <input type="button" value="投稿" id="_cvt_submit" />
        </form>;

        var div = document.createElement("div");
        div.setAttribute("id", "_cvt_div");
        div.innerHTML = form.toSource();
        document.body.insertBefore(div, document.body.firstChild);
        setStyle();

        document.getElementById("_cvt_submit").addEventListener("click", submit, false);
    }

    function setStyle() {

        var style =
            <><![CDATA[
                #_cvt_div {
                    font-family: Arial, Helvetica, "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", Osaka, "MS Pゴシック", sans-serif;
                    font-size: 14px;
                    color: #000000;
                    bottom: 0pt;
                    left: 20%;
                    right: 20%;
                    z-index: 255;
                    background-color: #9ACCFF;
                    position: fixed;
                    padding: 10px;
                    margin: 0px;
                    display: block;
                    opacity: 0.75;
                }
                #_cvt_text {
                    width: 500px
                }
            ]]></>;

         GM_addStyle(style);
    }

    function submit() {

        var status = encodeURIComponent(
            "@" + cvtElement.textContent + " (" + document.location.href + ") " +
            document.getElementById("_cvt_text").value);
        var url = "http://twitter.com/statuses/update.json";

        document.getElementById("_cvt_text").value = "sending…";

        GM_xmlhttpRequest({
            method: "POST",
            url: url,
            data: "status=" + status,
            headers: {
                "Content-Type":"application/x-www-form-urlencoded",
                "X-Twitter-Client": "Comment via Twitter",
                "X-Twitter-Client-Version": "0.1"
            },
            onload: function(xhr) {
                document.getElementById("_cvt_text").value = "send";
            }
        });

    }

})();

次のページ »