YubNubコマンドの作り方3 (gtrs2)
「YubNubコマンドの作り方2 (gtrs)」で作ったgtrsコマンドにあった2つの問題点を改善したgtrs2を作ったので、方法を紹介しておきます。
ここで、問題の2点をおさらいしておきます。
- 検索ワードが1つしか指定できない
- 検索ワードがURLエンコードされていない
これらの問題は、空白を空白のままに使うためにURLエンコードを止めてしまったことによります。
順を追って説明すると、前回の方法はコマンドを次のように展開していることが問題でした。
- 通常は「ja en コンピュータ」が「ja+en+%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF」になる
- それではスペース区切りにより「ja」や「en」を取り出すことが出来ないので、URLエンコードを止める
- 結果として「コンピュータ」はエンコードされない
そこで、今回は「URLエンコードは行いつつ空白は空白のまま維持する」ということと、「検索ワードに対して空白を+に置換する処理を入れる」ことで対応しようと思います。
同様に書くと、次のようになります。
- 通常は「ja en アップル コンピュータ」が「ja+en+%E3%82%A2%E3%83%83%E3%83%97%E3%83%AB+%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF」になる
- これを「ja en %E3%82%A2%E3%83%83%E3%83%97%E3%83%AB %E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF」になるようにする
- 第3パラメータ以降は、空白ではなく+で結合する
空白に空白をそのまま使う
まずはURLエンコードを行いつつ、空白は空白のまま維持する必要があります。
そこで、前回用いた[no url encoding]を止めて、代わりに[use for spaces]と記述してみます。
useとforの間に空白を入れることで空白を空白に置換することが可能でした。
ちょっと変な構文ですが、これに気づいたのが解決の糸口でした。
複数の検索ワードを+で繋ぐ
空白が空白として維持できた時点で、問題の片方は解決しています。
あとは複数ワードですが、これは{% 3 %s}を{% 3- %s}とすることで一応の解決はできます。
しかし、空白を維持してしまっているために、「A B」という文字が「A+B」となって欲しいのに、そのままになってしまっています。
そこで、URLエンコードされ空白で結合された文字列に対して「空白を+に置換せよ」というコマンドを発行してやります。
ちょっと悩みましたが、{}をネストしてやることで実現できました。
{strReplace -find " " -replace + -string {% 3- %s}}
ただし、このネストコマンドを含ませた途端にYubNubのパース処理が遅くなったように感じます。
もしかすると推奨されない処理だったのかもしれません。
最終形
とりあえず、gtrs2コマンドのURL最終形を載せておきます。
http://translate.google.com/translate_s?hl={% 1 %s}&clss=&q={strReplace -find " " -replace + -string {% 3- %s}}&sl={% 1 %s}&tl={% 2 %s}[use for spaces]
長くなってしまいましたが、レスポンスが若干悪いことを除けば、一応は不満無く完成しました。 最後にコマンド作成に便利なコマンドを紹介しておきます。