2023年1月13日金曜日

Google Indexing APIを呼び出す

 Oracle APEXのアプリケーションよりGoogle Indexing APIを呼び出す方法を調べてみました。

ポーランドのPretius社が公開している以下のブログ記事を参考にしています。

https://pretius.com/blog/google-workspace-integration-oracle-database-apex/#integration-service-account

Pretius社はOracle APEX界隈ではとても知名度の高い会社です。昨年(2022年)は、ポーランドのソフトウェアの業界団体(SoDA - Software Development Association Poland)より、“An IT project that supported Ukraine”というカテゴリにて、Oracle APEXを使って作成したアプリケーションにより表彰されています。

https://pretius.com/blog/why-low-code-how-apex-helped-refugees/

Googleが提供しているAPIの認証を通す方法はいくつかあります。Indexing APIは一番設定が簡単な(すなわち安全性が一番低い)APIキーによる認証はできません。

そのため、サービス・アカウントを使ってGoogle Indexing APIを呼び出すことにしました。


Google側の準備


Google Cloudのコンソールは使用経験がほとんど無いため、以下の記載は参考程度と考えてください。

最初にGoogle Cloudのコンソールを開きます。

プロジェクトの選択をクリックし、開いたダイアログ上の新しいプロジェクトをクリックします。


プロジェクト名は任意ですが、ここではmy first api projectとしました。作成をクリックします。


プロジェクトが作成されます。先ほどのプロジェクトの選択のダイアログより、作成されたプロジェクトを開きます。

クイックアクセス(または左上のハンバーガー・メニューを開いて)よりAPIとサービスを開きます。


APIとサービスの画面の、+APIとサービスの有効化をクリックします。

プロジェクト作成直後で15ほど利用可能なAPIとサービスが有効化されていました。使用する予定は無いため、すべて無効化しています。


今回使用する予定のindexing apiを検索します。


検索された結果より、Indexing APIを選択します。


Indexing APIを有効にします。


Indexing APIが有効になります。ウィザード形式で認証情報を作成するためのボタン認証情報を作成がありますが、認証情報はサービス・アカウントとキーを使うことに決めているので、ウィザードは使用しません。

左のメニューより認証情報を開きます。


認証情報の画面より+認証情報を作成をクリックし、サービスアカウントを選択します。


サービスアカウント名サービスアカウントIDサービスアカウントの説明を設定します。任意の値を設定します。

これからの作業で使用するのは、サービスアカウントIDのメールアドレスです。クリップボードにコピーして、保存しておきます。

完了をクリックします。


サービスアカウントが作成されます。鉛筆アイコン(またはサービスアカウント名)をクリックし、編集を開始します。


キー・タブを開き、鍵を追加より新しい鍵の作成を実行します。


キーのタイプとしてP12(PKCS#12形式)を選択し、作成を実行します。この鍵はPL/SQLのパッケージDBMS_CRYPTOで使用するため、PKCS#1またはPKCS#8形式に変更します。JSONが推奨となっていますが、opensslコマンドを使用するため扱いやすいP12を選択しています。

作成をクリックします。


秘密鍵が手元のPCにダウンロードされます。opensslで形式変換する際に、秘密鍵のパスワードを聞かれるため、表示されている秘密鍵のパスワードをクリップボードにコピーし、保存しておきます。

閉じるをクリックします。


ダウンロードされたPKCS#12形式のファイルをPKCS#8形式に変換します。openssl pkcs12コマンドを使用します。

openssl pkcs12 -in ダウンロードされたファイル -nocerts -nodes -out 出力ファイル

Enter Import Password:には秘密鍵のパスワードを入力します。

以下の例では、秘密鍵をmy-api.keyというファイルに出力しています。

% openssl pkcs12 -in my-first-api-project-*******.p12 -nocerts -nodes -out my-api.key

Enter Import Password: 秘密鍵のパスワード

MAC verified OK

% 


Google Cloudのコンソールでの作業は、以上で終了です。

Google Search Consoleを開き、設定からユーザーと権限を開きます。


ユーザーを追加を実行します。


メールアドレスとして、作成済みのサービスアカウントのメールアドレスを指定します。権限オーナーを割り当てます。

追加をクリックします。


ユーザーの追加が確認されたら、Google Search Consoleでの作業は完了です。


Autonomous Databaseでの作業に移ります。

Oracle Database 19cより追加されたDBMS_CRYPTO.SIGNを使用します。Autonomous Databaseでは利用可能です。

JSON Web Tokenを作成するファンクションと作成したJWTを使ってトークンを取得するために使用するパッケージUTIL_GOOGLE_APIを作成します。

コードは以下になります。データベースで実行します。


SQLコマンドよりGoogle Indexing APIを発行し、動作を確認します。秘密鍵やサービスアカウントのメールアドレスの部分は置き換えます。


JSONのレスポンスが正常に返されていれば、すべての作業は完了です。


以上で動作確認も完了です。

実際には、データベースのどこかに秘密鍵を安全に保存する必要もあり、また、生成したJWTや取得したトークンをキャッシュしておくといった実装も必要になるかと思います。

本記事は以上になります。