bit sized

Just another WordPress.com weblog

8月 2009のアーカイブ

Ubiquityを使って英単語を調べる – smart.fm (iknow)経由

1件のコメント

以前、ubiquityを使って英単語を調べるというエントリを書きましたが、mozilla labの開発スピードに負けて使えなくなっていた事を発見。新しいUbiquityのapiにアップデートしてみました。

ついでに、フォントの色も変えたら少し見やすくなった気がします。

ubiquity smart.fm

ubiquity smart.fm

Ubiquityのコマンドエディターに”共有”というのがあったので、クリックするとGitHubのGist(コード共有サービス)にアップロードされました。多分Firefoxの人なら http://gist.github.com/170912 に行くとインストールできると思います。楽ちんでいいですね

UbiquityのAPIについては、 Parser 2 API Conversion Tutorial に解説があるので、それに従って変更しました。関連があったのは、CmdUtilsの使い方で下記の二点。

  • 2行目 – コマンドの名前の指定(以前はnameというキーに対応する文字列だったが、現在はnamesというキー対応する文字列の配列に変更された。つまりコマンド名が複数持てる。またコマンドの名前に空白が入れれるようになった。)
  • 9行目,その他 – previewおよびexecuteの引数の指定(今まではtakesやmodifiersだったが、argumentsというキーで指定する。

2番目の変更はちょっとむずかしいですが、引数と動詞(コマンド)の関係を指定するSemantic Roleというのが導入されたようです。たとえば”A地点からB地点まで〜を移動させる”というようなコマンドでは、”移動させる”がコマンド(動詞) で、”〜を”は直接目的語です。ただ、この文には”A地点から”や”B地点まで”という修飾語もあり、それらがコマンドの引数として渡される場合もある訳 です。なので、Parser 2では引数が動詞に対して、どのような役割を果たすかを示すために、roleというパラメーターをargumentsに指定し、goal(目的地)や source(出発点)など引数として渡す値とコマンドの関係性を指定できるらしいです。言語間でのこうした関係性の表現の違い(日本語は”〜から”とい う後置詞、英語の場合は”from”という前置詞)を吸収するためにsemantic roleを導入しているようです。

このコマンドは引数に動詞(コマンド)の目的語(つまり検索する文字列)しかとらないので、roleは そのまま(direct) objectです。

  1. CmdUtils.CreateCommand({
  2.   names: [‘iknow search’],
  3.   icon: "http://example.com/example.png",
  4.   homepage: "http://bitsized.wordpress.com/",
  5.   author: { name: "Taku Okawa", email: "xxxxx@gmail.com"},
  6.   license: "GPL",
  7.   description: "search words or pharase in iknow",
  8.   help: "iknow",
  9.   arguments: [{role: "object",nountype: noun_arb_text}],
  10.   preview: function( pblock, arguments ) {
  11.    
  12.     var baseUrl = "http://api.iknow.co.jp/items/matching/${word}.${format}";
  13.     var tempUrl = {"word":arguments.object.text,"format":"json"}
  14.     var params = {include_sentences:"true"};
  15.     pblock.innerHTML = "requesting … " + CmdUtils.renderTemplate(baseUrl,tempUrl) + "<br/>";
  16.    
  17.     jQuery.getJSON(CmdUtils.renderTemplate(baseUrl,tempUrl),params,function(resp){
  18.       pblock.innerHTML = "";
  19.       jQuery.each(resp,function(i){
  20.         pblock.innerHTML += "<span style=’color:#ff0000′>" + this.responses[0].text + "</span>" + "<br/>";
  21.         pblock.innerHTML += "[例文] " + "<span style=’color:#0066ff’>" + this.sentences[0].text + "</span>" + "<br/>";
  22.         pblock.innerHTML += "[和訳] " + this.sentences[0].translations[0].text + "<br/>";
  23.       });
  24.     });
  25.    
  26.   },
  27.   execute: function(arguments) {
  28.     var baseUrl ="http://www.iknow.co.jp/items/search?keyword=${QUERY}";
  29.     var tempUrl = {"QUERY":arguments.object.text};
  30.     var urlString = CmdUtils.renderTemplate(baseUrl, tempUrl);
  31.     Utils.openUrlInBrowser(urlString);
  32.   }
  33. });

投稿者: t4ku

8月 20, 2009 9:21 am

Programming への投稿