Textwell のスクリプトでURLエンコードする意味と方法

March 17, 2016
Manabu Ueno

この記事は、ノンプログラマー向けに、URLエンコードとは何かを簡単に説明するものです。

Textwell のアクションでは、T( 'urlScheme' ) というコマンドを使って、Safari を呼び出したり、他のアプリを呼び出したりできます。

例えば、Apple のホームページを開きたければ、アクションのソースとして以下のようにスクリプトを書きます。

T( 'urlScheme', { url: 'http://www.apple.com' } );

“url:” という記述の後ろに、Apple ホームページのURLがクォーテーションで囲んで書かれているのがわかると思います。このURLの部分を変えれば、他のホームページやアプリケーションを呼び出せるようになります。スクリプトでは、任意の文字列(この場合はURL)はクォーテーションで囲まなければいけません。

T( 'urlScheme', { url: 'http://www.google.com' } );

このようにすれば、Google のページが開きます。

次に、Textwell のアクションから Google で何かのキーワードを検索させるにはどうしたらよいでしょうか。

Google のページでは、キーワード入力欄にキーワードを入れると検索が実行されて検索結果ページが表示されますが、ページ上でキーワードを入れなくても、URLの後ろにキーワードをつけたしてそれをブラウザで開くことで直接検索結果ページを開くことができます。

例えば、”Apple” というキーワードを検索した結果ページを開きたければ、ブラウザのURLに次のように打ち込みます。

http://www.google.com/search?q=Apple

“http://www.google.com/” という Google の URL の後ろに “search?q=” という決まった呪文をつけて、その後ろにキーワードを書けば良いのです。

この URL を Textwell のアクションにしてみます。

T( 'urlScheme', { url: 'http://www.google.com/search?q=Apple' } );

Textwell でこのアクションを実行すると、Safari が開いて、Google で “Apple” を検索した結果ページが表示されます。

では今度は、”Apple Watch” というキーワードを検索したページを表示するにはどうしたら良いでしょうか。

試しに次のようにしてみます。

T( 'urlScheme', { url: 'http://www.google.com/search?q=Apple Watch' } );

すると、これはうまくいきません。

その理由は、”Apple Watch” というキーワードには、単語の間にスペースが含まれているからです。インターネットの URL 文字列にはスペースを使ってはいけない決まりになっているので、プログラムがうまく処理できないのです。

URL に使って良い文字は、アルファベットと数字といくつかの記号で、これは決まっています。スペースは使ってはいけない文字とされています。では上記のように、スペースを含んだ文字列をURLの中で使いたい場合はどうすれば良いのでしょうか。

その方法はURLの仕組みとしてきちんと用意されています。URLエンコードといって、使用不可の文字を、使用可能な文字の特殊な組み合わせで表すのです。

例えばスペースは、”%20″ という文字列で表します。

つまり “Apple Watch” という文字列は URL の中では “Apple%20Watch” と記述します。
そこで上記のスクリプトを次のように変えてみます。

T( 'urlScheme', { url: 'http://www.google.com/search?q=Apple%20Watch' } );

すると、正しく “Apple Watch” の検索結果ページが開くようになりました。

では次に、Textwell のメイン画面に書かれた文字列をキーワードとして Google 検索を実行するにはどうすればよいでしょうか。

Textwell のスクリプトでは、現在カーソルがある行の文字列を T.current という呪文で取り出すことができます。ですから、現在カーソルがある行の文字列を Google 検索したければ、次のような URL を作れば良いのです。

http://www.google.com/search?q=T.current

しかし、T.current は呪文なので、任意の文字列である “http://www.google.com/search?q=” とそのままくっつけることはできません。くっつけるには次のようにします。

'http://www.google.com/search?q=' + T.current

任意の文字列部分をクォーテーションで囲み、プラス記号を挟んで、呪文を書きます。

これをスクリプトに組み込むと、

T( 'urlScheme', { url: 'http://www.google.com/search?q=' + T.current } );

となります。

これでも、現在カーソルがある行の文字列が “Apple” のようなものなら検索できますが、上述の通り、スペースなどの使用不可な文字が含まれているとダメです。

そこでどうするかというと、スクリプトで T.current をURLエンコードしてやります。

文字列をURLエンコードする呪文は、

encodeURIComponent( 文字列 )

というものです。かっこの中の部分がURLエンコードされます。ですからT.current をURLエンコードするには次のように書きます。

encodeURIComponent( T.current )

これをまた Google 検索スクリプトに組み込むと次のようになります。

T( 'urlScheme', { url: 'http://www.google.com/search?q=' + encodeURIComponent( T.current ) } );

お分かりでしょうか。

encodeURIComponent( 文字列 ) という呪文は、アルファベットや数字のように、変換しなくても良い文字はそのままに、URLに使用不可な文字だけを変換してくれます。ですから、現在カーソルのある行の文字列が、使用不可文字を含んでいるかどうかを気にすることなく、いつも encodeURIComponent( T.current ) としていれば良いのです。

以上、Textwell のスクリプトでURLエンコードする意味と方法でした。

Comments are closed.