見出し画像

Google Search Console APIを利用してRubyからIndex登録をする

Rubyのリファレンスやサンプルが見つけにくかったのでメモです。

環境

モチベーション

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を見てみましたが、「クロール済み - インデックス未登録」で「前回のクロール」の日時も処理時間あたりっぽかったので、一応正しく動いていたのかな?と思います。
まずは、ベースの使い方をメモしておいて、工夫や確認はおいおいしていければと思います。

いいなと思ったら応援しよう!