みんなのちからになりたい

コピペでブログラムつくっていきたい

Google Custom Search API を使う

ちょっと資料作成の調べ物で検索にヒットした件数を取得するようなことがあったので使ってみた。
CSEAPI使うと100リクエスト/日なので、Scrapingしてモニョモニョしようとするライブラリが結構あって何個か使ってみたけど思ったように動かなかったりで仕方なくAPI使うことにした。

ちなみに今回はNode使ってやっている。

セットアップ

多少いまとは項目は違えど、なにも考えず以下のとおりにやればなんの問題もなく終わる。

APIの設定とCSEの設定がまったく別のサイトなのがめんどくさい。
なんか最初APIの選択のとき、1000 リクエスト数/日って書いてあったので、ほほういまは制限がゆるくなったのかなと思ったけど、Deveropers Consoleの割り当て見ると100 リクエスト数/日って書いてあるので惑わされるけど、普通に100リクエストでカウントされてる。

使い方

Google APIs Node.js Clientを入れる。CSE以外にもいろいろできる(後述)

npm install googleapis

あとはexamplesにcustomsearch.jsがあるので、CSEのIDとAPIキーを書けば動く。
google-api-nodejs-client/customsearch.js at master · google/google-api-nodejs-client · GitHub

var google = require('../lib/googleapis.js');
var customsearch = google.customsearch('v1');

// You can get a custom search engine id at
// https://www.google.com/cse/create/new
const CX = 'INSERT YOUR CUSTOM SEARCH ENGINE ID here';
const API_KEY = 'INSERT YOUR API KEY HERE';
const SEARCH = 'INSERT A GOOGLE REQUEST HERE';

customsearch.cse.list({ cx: CX, q: SEARCH, auth: API_KEY }, function(err, resp) {
  if (err) {
    console.log('An error occured', err);
    return;
  }
  // Got the response from custom search
  console.log('Result: ' + resp.searchInformation.formattedTotalResults);
  if (resp.items && resp.items.length > 0) {
    console.log('First result name is ' + resp.items[0].title);
  }
});

他になんのAPIが使えるか

これみればわかる。
google-api-nodejs-client/apis at master · google/google-api-nodejs-client · GitHub

問題点

検索結果の件数がまったく違う。
GSS(Google Site Search)じゃないからなのかわからないが、10ページ目までしか取れないとか書いてあるし(Google Custom Search APIがひどい - 下林明正のブログ)、なかなかきびしい。
100リクエストじゃきびしいっていろんなとこで書いてあるけど、100もきびしいけどなによりまともに件数が返ってこないのが一番つらい。

感想

なにを根拠にその件数を返してるのかがgoogle様にしかわからないので、これを元にまともな資料を作るのはきびしそう。
逆に、サイト指定してやればそれなりにまともに返ってくるのかもしれないけど、今回はめんどくさいのでやってない。
あと検索エンジンAPIを公開してるのはBingだけど、5000もクエリ投げられるのはうれしいけど、googleやYahooと比べて検索結果がちょっと違うので、今回の資料作成には使えなかった。

結論

普通にgoogleに投げたやつScrapingして1ページ目のresultStatsの値を取ってきた方が良い気がする。