①まず必要のはgoogle account
②APIを使うならapi-keyも申請しといた方がいい、無料なら一日100query使える、ちなみにpriceはこれ:
Search query limit (annual) | Pricing (annual) |
---|---|
クエリー上限(年間) | 値段(年間) |
20,000 | $100 |
50,000 | $250 |
150,000 | $750 |
500,000 | $2,000 |
500,000+ | Contact sales |
※有料でも10,000query/dayは上限 |
※支払いが開通している場合、100クエリ/日の無料APIがそのまま使える(広告ありなし選択可能)。100を超えた場合、$5/1000クエリが請求される、しかし上限を10,000クエリは変わらない。ここ参照
こちらは無料版と有料版の機能の比較、有料版は検索結果をxmlやjsonで返せて、自由にアレンジできるという最大のメリットがある。
http://www.google.com/cse/compare?hl=ja
あるサイトの 「ブラジル」 というキーワードですべての 「PDFファイル」 を 「作成日順の降順」 を検索したプログラムです。
jsonで検索結果をもらって、検索結果画面をjavascriptで作りました。
<!-- ▼ここからサイトサーチ▼ --> <!-- 日本語を検索する場合、ソースコード自体は必ずUTF-8に保存すること --> <div id="content"></div> <div id="pager"></div> <script type="text/javascript"> var innerhtml; var pager; var pagecount; var startnum = 1; var param; var url; param = window.location.search.substring(1); url = window.location.href; var tmp = url.split('?'); url = tmp[0]; if(param.length > 6){ if(param.substr(0,6)=='start='){ startnum = param.substr((param.indexOf('=')+1),(param.length-param.indexOf('='))); } } //alert(startnum); pager = '<div width=\"735\">'; innerhtml = '<table><tr><th>日付</th><th>レポート名</th></tr>'; function hndlr(response) { for (var i = 0; i < response.items.length; i++) { var item = response.items[i]; // in production code, item.htmlTitle should have the HTML entities escaped. var datestr = item.pagemap.metatags[0].creationdate.substr(2,4)+'年'+item.pagemap.metatags[0].creationdate.substr(6,2)+'月'+item.pagemap.metatags[0].creationdate.substr(8,2)+'日'; innerhtml += '<tr><td>'+datestr+'</td>';//日付 innerhtml += '<td><a href=\"'+item.link+'\" target=\"_blank\">'+item.htmlTitle+'</a></td></tr>';//レポート名 } document.getElementById("content").innerHTML = innerhtml; pagecount = Math.ceil(response.queries.request[0].totalResults / response.queries.request[0].count); pagecount = 10;//googleのbug,10ページ以上はerrorしか帰ってこない for (var i = 1; i <= pagecount; i++) { pager += '<a href=\"'+url+'?start='+(((i-1)*response.queries.request[0].count)+1)+'\">'+i+'</a> '; } pager += '</div>'; document.getElementById("pager").innerHTML = pager; //alert(pagecount); //alert(pager); //alert(window.location.search.substring(1)); } document.write('<script src=\"https://www.googleapis.com/customsearch/v1?key=YOUR-KEYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&cx=000000000000000000000:45abcdefghi&lr=lang_ja&q=ブラジル+filetype:pdf&callback=hndlr&sort=date:metatags-creationdate&start='+startnum+'\">');</script> </script> <!-- ▲ここまでサイトサーチ▲ -->
一部パラメータ説明
パラメータ | 説明 |
---|---|
key | goolgeから発行されるapi key,google api consoleでsaite searchを「on」にする必要がある。https://code.google.com/apis/console/ ここでCustom Search APIを「On」にすれば、無料で100クエリー/日のでapi keyを利用できるよ、API keyはAPI Accessメニューから確認できる |
cx | 管理画面で設定した検索エンジンのID、googleカスタム検索のマイ検索エンジンのコントロール パネルで確認できる |
lr | 言語、ここでは日本語を設定 |
q | 検索キーワード、ここではブラジルを設定。+filetype:pdfはPDFのみ検索。注意!ソースコードはutf-8で保存すること |
callback | これは、検索結果がjsonオブジェクト(デフォルト,xmlもOK)で戻ったら、どのメソッドに渡すかの設定 |
sort | date:metatags-creationdate、これはオブジェクトのある属性でソートするという書き方、PDFの結果だと、pageMapの中にmetatagsというオブジェクトがあります、その中のcreationdate日付型で降順(デフォルト)ソート、必ずpageMapの中のプロパティじゃないといけないみたい、しかも数字か日付じゃないと行けない。 書き方は sort=データ型:オブジェクト名-プロパティ名[:ソート順:強弱] |
start | 検索結果開始位置、1ページ最大10個検索結果表示できる(1から10で調整可)、例えばstart=11は第二ページを意味する、ページングを作るとき用です。ちなみに、totalResultは100以上あっても、start=101を設定すると400エラーしか帰ってこない、googleのバグかなぁ |