Custom Search API(V1)をJavaで使ってみました。
今回の記事はAPIを利用開始するのに行うことを記事にしました。
Custom Search APIとは
Googleが提供するカスタム検索エンジンで検索することができるAPIです。
カスタム検索エンジンでは、Google検索の様にWeb全体を検索できます。
ただし、Google検索とカスタム検索エンジンは下記の点が異なります。
・ウェブ上の他の検索結果よりも自分のウェブサイトの検索結果が強調される
・アカウントに基づく情報など、一部のGoogle検索の機能が含まれない
・検索結果が10件を超える場合、サブセットの検索結果が表示されることがある
実際のCustom Search APIの実行コードは
⧉[Custom Search API(V1)] JavaでGoogle検索する
を参照ください。
1. Custom Search APIを使用するための準備
設定は下記から行います。
⧉Google クラウド プラットフォーム
やることは下記の4つです。
1. GCPプロジェクトの作成
2. Custom Search APIの有効化
3. プログラムで使用するキーの取得
4. カスタム検索エンジンの設定
3.は、サービスアカウントかOAuth2.0かAPIキーを利用する3つの方法があります。
1.1. プロジェクトの作成
まずはGCPでプロジェクトを作成します。
詳細はこちらの記事を参照ください
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.1. プロジェクトの作成)
1.2. Custom Search APIの設定
Custom Search APIを使えるようにします。
1. メニューの 「APIとサービス」 -> 「ライブラリ」 を選択します。
2. custom search と入力して「Custom Search API」を検索します。
3. 「有効にする」ボタンを押して「Custom Search API」を使用可能にします。
1.3. APIを使用するためのキー取得
プログラムからAPIを実行するための準備を行います。
サービスアカウント、OAuth2.0、APIキーを利用する3つの方法があります。
1.3.1. サービス アカウント
同じ内容を下記の記事に掲載してますので、下記の記事を参照ください。
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.3. Googleサービスアカウントの作成)
1.3.2. OAuth2.0 クライアントID
同じ内容を下記の記事に掲載してますので、下記の記事を参照ください。
⧉[Google Drive API v3] JavaでDrive APIを使う(1.3.2. OAuth2.0 クライアントID)
1.3.3. APIキー
APIを操作するためにAPIキーを取得します。
「APIとサービス」 -> 「認証情報」 を選択すると以下の画面が表示されます。
APIキーが作成されますので、「自分のAPIキー」の値を保持してください。
この値をプログラムで指定します。
2. Custom Search Engine(カスタム検索エンジン)の設定
下記の画面でカスタム検索エンジンを設定します。
⧉Custom Search Engine(カスタム検索エンジン)
検索エンジンの名前と検索設定等を設定して、
「作成」ボタンを押すと検索エンジンが作成されます。
画像で選択している箇所(クエリパラメータCX)の値を保持してください。
この値をプログラムで指定します。
3. Custom Search APIを使ってみる
3.1. googleライブラリの読み込み
Custom Search APIを使用するためにライブラリのパスを設定します。
私の環境はpom.xmlで下記を指定しています。
Javaのバージョンは21を使用しています。
<dependencies>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
</dependency>
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-oauth2-http</artifactId>
</dependency>
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-customsearch</artifactId>
<version>v1-rev20240326-2.0.0</version>
</dependency>
<!-- OAuth2.0でAPIを使う場合は下記の2つを追加してください。 -->
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-java6</artifactId>
</dependency>
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-jetty</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.31.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3.2. CustomSearchAPIインスタンスを取得
3.2.1. サービスアカウントを利用する場合
コード中の「JSONファイルのパス」は、
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.3. Googleサービスアカウントの作成)
で取得したJSONファイルのパスを指定してください。
Custom Search APIを利用するための「スコープ」は、
「https://www.googleapis.com/auth/cse」のみです。
private static CustomSearchAPI getCustomSearchAPI() throws Exception {
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
try(InputStream input = new FileInputStream("JSONファイルのパス")){
GoogleCredentials credentials = GoogleCredentials
.fromStream(input)
.createScoped( Arrays.asList("https://www.googleapis.com/auth/cse"));
return new CustomSearchAPI.Builder(transport, jsonFactory, new HttpCredentialsAdapter(credentials)).build();
}
}
3.2.2. OAuth 2.0 クライアントIDを利用する場合
コード中の「JSONファイルのパス」は、
⧉[Google Drive API v3] JavaでDrive APIを使う(1.3.2.1 認証情報の作成)
で取得したJSONファイルのパスを指定してください。
コード中の「認証情報を保存するフォルダパス」は、
認証情報が保存されるフォルダのパスを指定してください。
このコードを実行するとOAuth同意画面が表示されます。
ユーザーが同意をすると認証情報を保存するフォルダにファイルが生成されます。
このファイルが存在した場合は、再度実行してもOAuth同意画面は表示されません。
Custom Search APIを利用するための「スコープ」は、
「https://www.googleapis.com/auth/cse」のみです。
private static CustomSearchAPI getCustomSearchAPI() throws Exception {
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
try(Reader reader = new InputStreamReader(new FileInputStream("JSONファイルのパス"))){
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(jsonFactory,reader);
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
transport, jsonFactory, clientSecrets,
Arrays.asList("https://www.googleapis.com/auth/cse"))
.setDataStoreFactory(new FileDataStoreFactory(new java.io.File("認証情報を保存するフォルダパス")))
.build();
LocalServerReceiver receiver = new LocalServerReceiver.Builder().build();
Credential credential = new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
return new CustomSearchAPI.Builder(transport, jsonFactory, credential).build();
}
}
3.2.3. APIキーを利用する場合
コード中の「APIキー」は、
1.3. APIを使用するためのキー取得(1.3.3. APIキー)
で取得したAPIキーを指定してください。
private static CustomSearchAPI getCustomSearchAPI() throws Exception {
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
CustomSearchAPIRequestInitializer key = new CustomSearchAPIRequestInitializer("APIキー");
return new CustomSearchAPI.Builder(transport, jsonFactory, null)
.setGoogleClientRequestInitializer(key).build();
}
3.3. プログラムの実行
プログラムを動かします。
コード中の「CXキー」は2. Custom Search Engine(カスタム検索エンジン)の設定
で取得した値を設定してください。
この値は必須です。
サンプルでは「doran」を検索しています。
public static void main(String[] args) throws Exception{
CustomSearchAPI customSearch = getCustomSearchAPI2();
CustomSearchAPI.Cse cse = customSearch.cse();
CustomSearchAPI.Cse.List list = cse.list();
list.setQ("doran");
list.setCx("CXキー");
Search res = list.execute();
System.out.println(res);
}
4. APIを叩いてみる
APIの詳細はこちらの記事を参照ください。
⧉[Custom Search API(V1)] JavaでGoogle検索する
おしまい。。