Google Custom Search API を Java で利用する


# 必要なもの

## APIキー

以下で取得できる

https://console.cloud.google.com/apis/credentials

## プログラム可能な検索エンジン (= Custom Search Engine)

以下で取得できる

https://programmablesearchengine.google.com/controlpanel/all

# APIの仕様

https://developers.google.com/custom-search/v1/reference/rest/v1/cse/list

# 無料枠

1 日あたり 100 件の検索クエリを無料

https://developers.google.com/custom-search/v1/overview#pricing


# Code

```java
package hello.goog;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

public class CustomSearchMain {
	public static void main(String[] args) throws Exception {
		// APIキー: https://console.cloud.google.com/apis/credentials
		String key = "AIzaSyBPx6BfO5jdnvd_xxx";
		// プログラム可能な検索エンジン:
		// https://programmablesearchengine.google.com/controlpanel/all
		String cx = "d7b217exxx";
		String q = "IBM";
		// https://developers.google.com/custom-search/v1/reference/rest/v1/cse/list
		URL url = new URL( //
				"https://www.googleapis.com/customsearch/v1" + "?" //
						+ "q=" + q
						+ "&lr=ja"
						+ "&cx=" + cx
						+ "&gl=jp"
						+ "&key=" + key//
						+ "&alt=json"//
		);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setRequestMethod("GET");
		conn.setRequestProperty("Accept", "application/json");
		BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
		// レスポンスはjson
		JsonObject googleApiResponseJsonObject = (new Gson()).fromJson(br, JsonObject.class);
		System.out.println(googleApiResponseJsonObject.toString());
		{
			JsonArray items = googleApiResponseJsonObject.get("items").getAsJsonArray();
			for (int n = 0; n < items.size(); n++) {
				JsonObject item = items.get(n).getAsJsonObject();
				System.out.println(item.get("title").getAsString());
				System.out.println(item.get("link").getAsString());
				System.out.println(item.get("snippet").getAsString());
				System.out.println("---");
			}
		}
		conn.disconnect();
	}
}
```

# 結果

レスポンスから タイトル、URL、スニペット を出力したものです。
日本のロケーションと日本語を設定した結果が返されています。

```
IBM - 日本
https://www.ibm.com/jp-ja
日本IBMのWebサイトです。ハイブリッドクラウド、AIを筆頭とする製品、サービス、ソリューションを紹介します。
---
IBM - Wikipedia
https://ja.wikipedia.org/wiki/IBM
IBM（アイビーエム、正式名: International Business Machines Corporation）は、アメリカ合衆国ニューヨーク州アーモンクに本社を置くテクノロジー関連企業。
---
日本IBMについて - 日本 | IBM
https://www.ibm.com/jp-ja/about
IBM Community Japan. 「未来を創るテクノロジーで豊かな社会を実現する」ために、共に成長していくオープンコミュニティーです。
---
IBM Japan Newsroom - ニュースリリース
https://jp.newsroom.ibm.com/
AI; 量子コンピューター; ハイブリッドクラウド; セキュリティー; Good Tech; IBM Consulting; DX; 経営・人事; 導入事例; 調査; お知らせ ...
---
IBM 新卒採用情報
https://www.ibm.com/jp-ja/employment/campus/
日本IBMグループ各社では、インターンシップを実施しています。詳細は、各サイトをご確認ください。
---
IBMの主力事業がサービスから製品に回帰、1990年代後半の姿に戻る
https://xtech.nikkei.com/atcl/nxt/column/18/00848/00084/
2022/08/16 ... 直近の業績を見ると1990年代後半のビッグブルーに戻りつつある」。日本IBMの営業だったあるOBは米IBMの第2四半期（2022年4～6月期）および ...
---
IBM:New York 株価 - IBM - Bloomberg Markets
https://www.bloomberg.co.jp/quote/IBM:US
2022/07/19 ... IBM (IBM:New York) の株価、株式情報、チャート、関連ニュースなど、企業概要や株価の分析をご覧いただけます。
---
IBM - Wikipedia
https://en.wikipedia.org/wiki/IBM
International Business Machines Corporation (IBM) is an American multinational technology corporation headquartered in Armonk, New York, with operations in ...
---
日本IBM (@IBM_JAPAN) / Twitter
https://twitter.com/ibm_japan
IBM ビジネス×テクノロジー 2022 Summer 9月8日(木) 13:00開催東京海上グループのグローバル・サイバーセキュリティー戦略事例、大手国内銀行のCO2排出量可視化 ...
---
GitHub - IBM/japan-technology: IBM Related Japanese technical ...
https://github.com/IBM/japan-technology
IBM Related Japanese technical documents - Code Patterns, Learning Path, Tutorials, etc. - GitHub - IBM/japan-technology: IBM Related Japanese technical ...
---

```


# 参考になる記事

https://qiita.com/zak_y/items/42ca0f1ea14f7046108c

https://qiita.com/parapore/items/912a14934cf69f317995