google custom search engine(CSE)を使って、検索結果をjsonで取得する
google検索結果を取得しようとした時に、すこし苦労したので手順を整理しておく。
参照したのはここ
Custom Search — Google Developers
API keyの取得
https://cloud.google.com/console/project
まず、上のURLにアクセス
次に規約に同意するので Accept をクリック
①、②、③の順にクリックして
必要な種類のkeyを選択。
今回はServer Keyを作る。
IPアドレスで制限をかけたい場合は、枠の中に書く。
今回は制限を書けないので空のままCreateをクリック
これでAPI keyの作成が完了。
Custom search engine IDの作成
Custom Search Engine
上のURLにアクセス
Addをクリックして、Custom search engineの登録をする
Custom search engineは、本来自分のサイト内検索用のAPIなため、最低ひとつのURLを入れないと作成出来ない。
ここでは適当に入れておき、あとでコントロールパネルから削除を行う。
作成後、表示されるページでコントロールパネルへ
フィルタ等はこのページで指定出来る。
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を参照してもらうと良いかと。
注意点
検索用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}