Google Search Console APIを利用してRubyからIndex登録をする
Rubyのリファレンスやサンプルが見つけにくかったのでメモです。
環境
Ruby (2.7.6)
Simple REST Clients for Google APIs (google-api-ruby-client)
モチベーション
PythonでBulk処理を先に実装していたのですが、APIの制限が秒間や分間などあるので一括登録はやりにくく(Googleにお金を払えば別っぽい)感じたので1件ずつ登録する処理をSidekiqで試そうと思ったためでした。
インストール
google-api-clientの全ては不要に感じた(AWSのSDKと同じ気持ちで見ていた)ので、IndexingのパッケージだけGemfileに記載しました。
gem 'google-apis-indexing_v3', '~> 0.10.0'
パッケージの一覧が見つけられなかったので、RubyGemsで「google-apis-<servicename>_<serviceversion>」の形式に合うように「google-apis-indexing_v3」で検索しました
「Google Auth Library for Ruby」も別途入れようと思ってましたが、同時にインストールされました
認証
※GCPでcredentials.jsonを作成するのは割愛
土台はRailsを利用していたのでconfig/initializersに追加しました。
scope = 'https://www.googleapis.com/auth/indexing'
GOOGLE_API_CREDENTIALS = Google::Auth::ServiceAccountCredentials.make_creds(
json_key_io: File.open(ENV['GOOGLE_API_CREDENTIALS_PATH']),
scope: scope)
Search Consoleへのリクエスト
url_notification_objectの属性はgoogleapi.devのリファレンスから、typeはIndexing APIのリファレンスから参考にしてみました。
service = Google::Apis::IndexingV3::IndexingService.new
service.authorization = GOOGLE_API_CREDENTIALS
url_notification_object = Google::Apis::IndexingV3::UrlNotification.new
url_notification_object.url = "https://host.domain/path/to/#{uuid}"
url_notification_object.type = 'URL_UPDATED'
res = service.publish_url_notification(url_notification_object)
logger.info res.url_notification_metadata.inspect
レスポンスもそれっぽいものが返ってきているようです。
#<Google::Apis::IndexingV3::UrlNotificationMetadata:0x0000000107d5aa90 @latest_update=#<Google::Apis::IndexingV3::UrlNotification:0x0000000107d59ac8 @url="https://host.domain/path/to/123", @type="URL_UPDATED", @notify_time="2022-07-11T01:35:28.253352158Z">, @url="https://host.domain/path/to/123">
さいごに
Google Search ConsoleにはSitemapも登録していたので、今回の処理によって登録されたかどうかが分からなかったです(未登録のURLで試せば良かったか・・・)
一応、Google Search Console上のURL検査で登録したURLを見てみましたが、「クロール済み - インデックス未登録」で「前回のクロール」の日時も処理時間あたりっぽかったので、一応正しく動いていたのかな?と思います。
まずは、ベースの使い方をメモしておいて、工夫や確認はおいおいしていければと思います。