Googleカスタム検索をAPIで取得ようとしたが残念だった件 http://www.ark-web.jp/sandbox/wiki/7615.html

[edit]

目次

[edit]

概要

Google Web Search API、もしくは Google Custom Search APIを導入してみようと思っている方へ、
弊社で悪戦苦闘した上に他の対応方法への変更を余儀なくされた経験をお伝えしたく、書いています。
                            アークウェブ 竹村

[edit]

提案

[edit]

要望

要望としては、

というものでした。

まず、NAMAZU を提案したのですが諸事情で却下としました。
利用できるのはPHPのみ、という状況です。

そこで、外部のAPIにアクセスして検索結果を取得する方法を提案し、これが採用されました。
それが『Googleカスタム検索+Google Web Search API』による検索です。

[edit]

Googleカスタム検索+Google Web Search API の提案の内容

Googleカスタム検索は、コンテキストのXMLと、アノテーションのXMLを利用して
任意のURL(Googleカスタム検索では サイト と呼びます)に対して、タグ(Googleカスタム検索では ラベル と呼びます)を指定できます。
検索条件として、キーワードの他にラベルを指定してサイトを絞り込むことができるわけです。

Google Web Search APIは、Googleカスタム検索のIDを指定して検索条件やページングの制御が可能です。

この 2つを組み合わせて、Googleカスタム検索で検索対象のページを整備しておき
ユーザーの検索条件からGoogle Web Search APIで検索結果を取得して表示する。
プログラムはPHPで動作可能。

という提案をしました。

[edit]

サンプル

当時作ったサンプルが↓こちら。

▼APIを利用して検索結果を表示するサンプル
http://okra.ark-web.jp/~takemura/public/google/custom_search/for_api.html

sample.jpg
[edit]

実装方法

サンプルを作る上で、必要となった資料をメモしておきます。

[edit]

Googleカスタム検索

[edit]

Googleカスタム検索|コンテキストXML

例:
    <Facet>
     <FacetItem>
       <Label name="作業分類_a.清掃活動" mode="FILTER">
         <Rewrite></Rewrite>
       </Label>
       <Title>作業分類:a.清掃活動</Title>
     </FacetItem>
   </Facet>
[edit]

Googleカスタム検索|アノテーションXML

例:
 <Annotation about="okra.ark-web.jp/~takemura/public/google/custom_search/indexed_area/contents_001.html" score="1" timestamp="0x00049b6bdc3c22ea" href="ClRva3JhLmFyay13ZWIuanAvfnRha2VtdXJhL3B1YmxpYy9nb29nbGUvY3VzdG9tX3NlYXJjaC9pbmRleGVkX2FyZWEvY29udGVudHNfMDAxLmh0bWwQ6sXw4b3tpgI">
   <Label name="_cse_yfgako6fk48" />
   <Label name="sugudeki" />
   <Label name="rabit" />
   <AdditionalData attribute="original_url" value="okra.ark-web.jp/~takemura/public/google/custom_search/indexed_area/contents_001.html" />
 </Annotation>
[edit]

Googleカスタム検索|構築フロー

[edit]

Google Web Search API

公式資料
http://code.google.com/intl/ja/apis/websearch/docs/#fonje

[edit]

Google Web Search API|リクエストパラメータ

公式資料
http://code.google.com/intl/ja/apis/websearch/docs/#fonje

[edit]

Google Web Search API|レスポンス

[edit]

Google Web Search API|トラブルシューティング

[edit]

【重要】Google Web Search APIの制約

さて、ここが一番重要な部分です。
Google Web Searc APIのクリティカルな制約が 2つあります。

詳しく説明します。

[edit]

検索件数がかけ離れている

Google Web Search API で返ってくる検索結果総数は、
estimatedResultCount という値に該当します。

estimatedResultCount はあくまで概算に過ぎない。というのは公式資料にあります。
http://code.google.com/intl/ja/apis/websearch/docs/reference.html#_property_GSearch

estimatedResultCount - supplies the estimated number of results that match the current query. Note that this value will not necessarily match the similar value thats visible on the Google.com search properties.

また、estimatedResultCount で検索すると

http://groups.google.com/group/google-ajax-search-api/browse_thread/thread/a3e074c5c45556a7/738033c96cae5aa8?lnk=gst&q=estimatedResultCount#738033c96cae5aa8Google

It seems that on average, the API returns about 55% of the estimated

number of results that google.com returns.

と書いていますが、
私が案件で構築したものは200ページに対して検索結果が5000にもなりました!

ここまでかけ離れた件数では使えません。

[edit]

1ページは 8件まで、8ページ以上は取得できない

1ページは最大 8件までですが、 8ページまでしかAPIで取得できません。

それ以上取得しようとするとGoogleからのレスポンスが
「out of range start」と言われてresponseStatus が 400 で返ってきます。

この"out of range start"でググってみると、

http://code.google.com/p/googleas3api/issues/detail?id=2
(APIKeyについて書いてますが、APIKeyを指定してもダメ。やってみました。
comment2でtried but...とも書いているので関係ないとみた)

http://groups.google.com/group/google-ajax-search-api/browse_thread/thread/ed90e221e97d9daf/b02f6551cdd7154a?lnk=gst&q=out+of+range+start#b02f6551cdd7154a
無理ですと言われている例。

http://groups.google.com/group/google-ajax-search-api/browse_thread/thread/45d58a1aee15fb48/f6769a02d2a039b9?lnk=gst&q=out+of+range+start#f6769a02d2a039b9
無理だと分かって怒ってる例。

http://code.google.com/p/google-ajax-apis/issues/detail?id=315
 ↓
http://groups.google.com/group/google-ajax-search-api/browse_thread/thread/184bc00b8c1ce5f9
1ページ4件の場合8ページまでで32件しか取れない。という話

総括して、上限は64件以上は取れない模様です。

[edit]

代替案1.Google Custom Search API

公式資料
http://code.google.com/intl/ja/apis/customsearch/v1/overview.html

[edit]

やってみた

【結果】
ダメだコリャ。

[edit]

代替案2.Y!APIやBingAPI

Y!のウェブ検索を調べてみましたが
http://developer.yahoo.co.jp/webapi/search/websearch/v2/websearch.html
これには「ラベル」の概念がないので、自由に絞り込みができないので要件を満たしません。
また、Y!は上限100(プレミアで5万)件/dayの制約がある。 http://developer.yahoo.co.jp/webapi/search/

Goo、APIがない模様。
http://labs.goo.ne.jp/

ライブドア、それっぽいAPIはなさそう。
http://wafl.net/apis/search?keywords=%E3%83%A9%E3%82%A4%E3%83%96%E3%83%89%E3%82%A2

Bing API というのはあるが、Y!と同様で「ラベル」がない。
http://www.bing.com/developers/s/API%20Basics.pdf
また、Bing APIは必須項目が厳しい模様。 http://mbnk.blog120.fc2.com/blog-entry-209.html

【結論】
「ラベル」の概念のある検索APIは見つからなかった。

[edit]

まとめ

Googleカスタム検索の「ラベル」の概念は、他の検索APIにないすばらしい絞り込みの機能だと思うのですが、
サポートするAPIの制約で結局利用できませんでした。非常に残念なことです。

以上、この同じ問題でムダに時間を使ってしまうシステム担当者を少しでも救えるようであれば幸いです。

投稿者竹村 | パーマリンク

| append.gif

tag:API?, 検索?


添付ファイル: filesample.jpg 1443件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-07-07 (木) 12:18:36 (2299d)

アークウェブのサービスやソリューションはこちら