google custom search engine(CSE)を使って、検索結果をjsonで取得する

google検索結果を取得しようとした時に、すこし苦労したので手順を整理しておく。


参照したのはここ
Custom Search — Google Developers

API keyの取得

https://cloud.google.com/console/project

まず、上のURLにアクセス

f:id:ryufloat:20140118163048p:plain

次に規約に同意するので Accept をクリック

f:id:ryufloat:20140118163944p:plain
①、②、③の順にクリックして


f:id:ryufloat:20140118163951p:plain
必要な種類のkeyを選択。
今回はServer Keyを作る。


f:id:ryufloat:20140118163956p:plain
IPアドレスで制限をかけたい場合は、枠の中に書く。
今回は制限を書けないので空のままCreateをクリック


f:id:ryufloat:20140118164007p:plain
これでAPI keyの作成が完了。


Custom search engine IDの作成

Custom Search Engine
上のURLにアクセス

f:id:ryufloat:20140118165433p:plain
Addをクリックして、Custom search engineの登録をする


f:id:ryufloat:20140118165440p:plain
Custom search engineは、本来自分のサイト内検索用のAPIなため、最低ひとつのURLを入れないと作成出来ない。
ここでは適当に入れておき、あとでコントロールパネルから削除を行う。


f:id:ryufloat:20140118165448p:plain
作成後、表示されるページでコントロールパネルへ


f:id:ryufloat:20140118165453p:plain
フィルタ等はこのページで指定出来る。
google 全体を検索したい場合、

  • ウェブ全体 を指定
  • 検索したいサイト を空欄に

するとOK。

Custom search engine IDは、このコントロールパネル内で確認出来る。

検索を行いJSONを取得する

https://www.googleapis.com/customsearch/v1?key={API_KEY}&cx={CUSTOM SEARCH ENGINE ID}&q={SEARCH_WORDS}

このURLを使う。
これは検索を行いJSONデータを返却するURLになっている。
なので、任意の言語でjsonからdecodeをして、使用すればおk。

パラメータを少しだけ解説

  • key: API key
  • cx: Custom search engine ID
  • p: 検索用クエリ

とりあえず、上の3つがあれば検索出来るはず。

JSONからサイトの情報を取得する

得られたJSONデータにおいて、itemsにサイトの情報が入っている。

後は実際にデータを眺めてもらえば良いと思うが、一応PHPの簡単なサンプルをおいておく。

このサンプルでは、得られたデータから、1番目に表示されるサイトの情報を取得するところまで行っている。

$cse_url = https://www.googleapis.com/customsearch/v1?key={API_KEY}&cx={CUSTOM SEARCH ENGINE ID}&q={SEARCH_WORDS}';
$search_result = file_get_contents($cse_url, true);
$search_result = json_decode($search_result);
$result_first = $search_result->items[0];

この先で取得出来るサイトの情報は、次の項に書いたパラメータが記載されているURLを参照してもらうと良いかと。

パラメータ

以下にパラメータが載っているので、何かやりたいと思ったら参照してみると良い。
CSE: list - Custom Search — Google Developers


注意点

検索用URLはSSLを使用”しなければならない”。

次のようにhttp://...とすると、

http://www.googleapis.com/customsearch/v1?key={API_KEY}&cx={CUSTOM SEARCH ENGINE ID}&q={SEARCH_WORD}

以下のエラーを吐く

{"error":{"errors":[{"domain":"global","reason":"sslRequired","message":"SSL is required to perform this operation."}],"code":403,"message":"SSL is required to perform this operation."}}

これに関しては
error in getting userinfo from google drive api - Stack Overflow
ここにある通り。

httpではなくhttpsを使えばOK

https://www.googleapis.com/customsearch/v1?key={API_KEY}&cx={CUSTOM SEARCH ENGINE ID}&q={SEARCH_WORD}