YubNubコマンドの作り方2 (gtrs)
今回は、もう少し複雑なコマンドを作ってみます。
前回と同じくGoogle Translated Searchを使いますが、日本語限定ではなくパラメータで言語を指定できるようにしましょう。
gtrs
コマンド名は gtrs で、要するに前回作ったgtrsjaから日本語縛りを除いたものです。
言語は2種類、「母国語」と「検索対象国語」を指定する必要があります。
指定方法には、ざっくり考えて2種類の方法が考えられると思います。
- オプションで指定する
- パラメータの順番で指定する
オプションで指定する場合は、例えば次のようになるでしょう。
gtrs -mother ja -search en -words 地球温暖化
パラメータであれば、次のようです。
gtrs ja en 地球温暖化
実のところ、様々な理由から「オプション指定」の方が遥かに簡単に実装できます。
しかし、実際の利用方法を考えればこの2つの言語は「オプション」ではなく「必須条件」ですので、いちいち名前を指定してやるのではなく順番で指定する方が利便性が高いと思います。
ここでは最初にオプションでの実装方法を紹介して、次にパラメータ順で指定する方法を考えます。
実際の登録は、やはりパラメータ順としました。
オプションで指定する
オプションにアクセスするには、${}書式を使います。
例えばコマンド中で「-hoge 文字列」と指定されたオプションにアクセスするには「${hoge}」と書くことで、「文字列」が取得できます。
次のようなコマンド
gtrs -mother ja -search en -words 地球温暖化
の各値をURLの指定したい場所に収めるには、次のように記述します。
http://translate.google.com/translate_s?hl=${mother}&clss=&q=${words}&sl=${mother}&tl=${search}
これで、View URLを選択すれば、期待する結果を得ることができます。
http://translate.google.com/translate_s?hl=ja&clss=&q=%E5%9C%B0%E7%90%83%E6%B8%A9%E6%9A%96%E5%8C%96&sl=ja&tl=en
しかし、前述したように、これでは冗長で使い勝手が良くありません。
次に、パラメータの順番でアクセスする方法を考えましょう。
パラメータの順番で指定する
これはFuska氏が編み出したHackを参考にしました。
スペース区切り文字を分割する%コマンドを使用して、うまく文字列を複数のパラメータに分割しています。
ただ、若干トリッキーな方法をとっている故の弊害もあるのですが、これは後述します。
まず、区切り文字をスペースとするのでURLエンコードを止めます。
そのためには、URLの末尾に[no url encoding]を付けてやります。
次に、最初のパラメータを抽出する方法を考えます。
これは%コマンドを使って、次のように指定します。
{% 1 %s}
これにより、例えば「ja en 地球温暖化」という文字列の最初のブロックが取得されます。
2番目を取得したければ、「{% 2 %s}」とするだけです。
これらを合わせると、次のようなコマンドになります。
http://translate.google.com/translate_s?hl={% 1 %s}&clss=&q={% 3 %s}&sl={% 1 %s}&tl={% 2 %s}[no url encoding]
試しに、前述のコマンドを入れてみましょう。
URLは次のようになったでしょうか。
http://translate.google.com/translate_s?hl=ja&clss=&q=地球温暖化&sl=ja&tl=en
勘の良い人は既に気づいていたと思いますが、このコマンドには2つの問題があります。
- URLエンコードを止めているので、「地球温暖化」がそのままになっている
- スペースを含む複数の語句を検索することができない
とはいえ、今回は「利便性良く、とりあえず動く」ことを優先して登録してしまいました。
2007.10.15
これらの問題を解決する方法が思いついたので、次で紹介します。