AlfredWorkflowで遊ぶページ

Lesson34.グーグルサジェストを使う

開発メモ

ワークフロー

1.ワークフローの構成

 Alfredワークフローサンプルでお馴染みのWEBツールです 
 キーワードに関連する検索候補を挙げてくれるものです 
 Google検索ボックスでも使えるので、わざわざワークフローにすることもないですが・・
 フロー構成は単純でScriptFilterとWebSearchです
 なお、今回のScriptFilterの出力はURLではなく検索ワードとなるので
 OpenURLでなくWebSearchを使っています

2.URLアクセス

 キーワードは『グーグル』としています
 ちょっと長いです。検索ワードが日本語となることを想定して、
 キーワードを日本語としていますが、1文字キーワードにするのも良いですし、
 Lesson4のようにバイリンガル起動にしてもよいでしょう
 グーグルサジェストのURLは以下のもの
 「q=」の後にキーワードをつけますがargの日本後をそのまま記述してもOKでした

https://suggestqueries.google.com/complete/search?output=toolbar&q=


 
 と、ここまでは良かったのですが実際に動かしてみるとちょっと想定外なことが起きました
 一つは、リターンされるXMLのデータが文字コードでリターンされること
 もう一つは、リターンされるワードが複数あるときに半角ブランクがはいること
 
 たとえば「オミクロン」とすると、ブラウザではこう返ってくるのですが
 


 
 実際にCURLでリターンされているのは下記となります

<?xml version="1.0"?>
  <toplevel>
    <CompleteSuggestion>
      <suggestion data="&#x30AA;&#x30DF;&#x30AF;&#x30ED;&#x30F3;"/>
    </CompleteSuggestion>
    <CompleteSuggestion>
      <suggestion data="&#x30AA;&#x30DF;&#x30AF;&#x30ED;&#x30F3;&#x682A;"/>
    </CompleteSuggestion>
    <CompleteSuggestion>
      <suggestion data="&#x30AA;&#x30DF;&#x30AF;&#x30ED;&#x30F3; &#x6F5C;&#x4F0F;&#x671F;&#x9593;"/>
    </CompleteSuggestion>
    <CompleteSuggestion>
      <suggestion data="&#x30AA;&#x30DF;&#x30AF;&#x30ED;&#x30F3;&#x3068;&#x306F;"/>
    </CompleteSuggestion>
    <CompleteSuggestion>
      <suggestion data="&#x30AA;&#x30DF;&#x30AF;&#x30ED;&#x30F3;&#x682A;&#x3068;&#x306F;"/>
    </CompleteSuggestion>
    <CompleteSuggestion>
      <suggestion data="&#x30AA;&#x30DF;&#x30AF;&#x30ED;&#x30F3;&#x682A; &#x7A7A;&#x6C17;&#x611F;&#x67D3;"/>
    </CompleteSuggestion>
    <CompleteSuggestion>
      <suggestion data="&#x30AA;&#x30DF;&#x30AF;&#x30ED;&#x30F3;&#x306E;&#x6B21;"/>
    </CompleteSuggestion>
    <CompleteSuggestion>
      <suggestion data="&#x30AA;&#x30DF;&#x30AF;&#x30ED;&#x30F3;&#x5F8C;&#x907A;&#x75C7;"/>
    </CompleteSuggestion>
    <CompleteSuggestion>
      <suggestion data="&#x30AA;&#x30DF;&#x30AF;&#x30ED;&#x30F3; &#x610F;&#x5473;"/>
    </CompleteSuggestion>
    <CompleteSuggestion>
      <suggestion data="&#x30AA;&#x30DF;&#x30AF;&#x30ED;&#x30F3;&#x611F;&#x67D3;&#x671F;&#x9593;"/>
     </CompleteSuggestion>
  </toplevel>

3.文字コードを文字に変換する

 XMLのdata=の部分がサジェストされるキーワードですが書式が1文字ずつ
 「&#xnnnn;」となっています
 調べてみるとUTF16BEのようですが、実は対処は簡単で下記のnkfのオプションでokです

nkf --numchar-input

4.半角ブランクへの対応

 半角ブランクはスクリプト上、重要な役割を果たしています
 XML解析のgrepで抽出の際の区切り文字となり、そのまま配列に代入しています
 もしXMLのリターンに半角ブランクがあると、区切り文字として捉えてしまい
 配列が想定外に増加してしまいます
 そこで下記のように半角ブランクを全角ブランクに変換して対応しました

sed  's/ / /g'

5.JSONフォーマットの作成


 XMLのリターンの一番先頭は、もとの検索ワードのそのままなので
 2つ目からを表示させています
 titleとargにサジェストされる文字をセットしてできあがりです
 

取扱説明

機能:

 グーグルサジェストをAlfred出力フォーマットで表示する

インストール:

 1.alfredworkflowをダウンロード
 2.ファイルをダブルクリックしてワークフローに登録

使い方:

 Alfredからキーワード『グーグル』で起動。続けて検索したい語句を入力する

トップページに戻る