Traffine I/O

日本語

2023-07-07

Indexing API

Indexing APIとは

Indexing APIは、求人情報のやアルタイムイベントなどといった、すぐにインデックスさせたいページに対していちはやくGoogleのクローラを呼び寄せるAPIです。

Indexing APIは以下の機能があります。

  • URL を更新する
    クロールの対象となる新しいURLや、以前に送信したURLのコンテンツが更新されたことをGoogleに通知します。
  • URL を削除する
    サーバーからページを削除した後Googleに通知することで、Googleがインデックスからそのページを削除し、URLを再度クロールしないようにします。
  • リクエストのステータスを取得する
    Googleが最後に受信した、指定されたURLに関する各種の通知を確認します。
  • インデックス登録の一括リクエストを送信する
    最大100個の呼び出しを1つのHTTPリクエストにまとめることで、サイトのクライアントが確立する必要があるHTTP接続の数を減らします。

Indexing APIの使い方

この記事では、Indexing APIをGoogle Colabで使う方法を紹介します。

Google Cloudプロジェクトの作成

まずはGoogle Cloudのコンソールのサービス アカウント ページへ移動し、プロジェクトを作成または選択します。この記事では、sandboxという名前のプロジェクトを作成し、選択しています。

サービスアカウントの作成

「CREATE SERVICE ACCOUNT」をクリックしサービスアカウントを作成します。この記事では、indexing-apiという名前でサービスアカウントを作成しています。サービス名を記入して「DONE」ボタンをクリックします。

Indexng API | 1
Indexng API | 2

追加したサービスアカウントの「Manage keys」を選択します。

Indexng API | 3

「Add KEY」>「Create new key」を選択します。JSONのキーのタイプを選択し、「CREATE」ボタンをクリックします。作成を押すとキーがダウンロードされるので、大事に保管してください。

Indexng API | 4
Indexng API | 5

Indexing APIの有効化

Indexing APIを有効化にします。検索画面でindexing apiと検索し、Indexing APIを選択します。そして有効化するボタンをクリックします。「API Enabled」となっていれば有効化されています。

Indexng API | 6
Indexng API | 7

Google Search Consoleの所有権の確認

Google Search Consoleの所有権確認画面から所有権を確認します。

Indexng API | 8

「You are a verified owner」と表示されていることを確認します。

Google Search Consoleに所有者を追加

Google Search Consoleの権限管理画面を開き、所有権を確認したウェブサイトを選択します。そしてGoogle Cloudで作成したサービスアカウントのJSONキーの中のclient_emailに記載されているアドレスを所有者として追加します。

Indexng API | 9

Google ColabでIndexing APIを実行

Google Colabを開き、サービスアカウントのJSONキーファイルをアップロードします。

そして以下のコードを貼り付けます。

from oauth2client.service_account import ServiceAccountCredentials
import httplib2

import time

SCOPES = ["https://www.googleapis.com/auth/indexing"]
ENDPOINT = "https://indexing.googleapis.com/v3/urlNotifications:publish"

# Write path of json key file you got from GCP console.
JSON_KEY_FILE = "sandbox-aaaaaaaaaaaa.json"

credentials = ServiceAccountCredentials.from_json_keyfile_name(JSON_KEY_FILE, scopes=SCOPES)

http = credentials.authorize(httplib2.Http())

# Define contents here as a JSON string.
# This example shows a simple update request.
# Other types of requests are described in the next step.

# Write the website urls you want Google crawl
urls = [
    "https://io.traffine.com/id/articles/minikube",
    "https://io.traffine.com/id/articles/kubectl",
]

for url in urls:
    content = """{
    "url": "{url}",
    "type": "URL_UPDATED"
    }""".replace('{url}', url)

    response, content = http.request(ENDPOINT, method="POST", body=content)

    if response.status == 200:
        print(f"Succeeded. Status: {response.status} {url}")
    else:
        print(f"Failed. Status: {response.status} {url}")
        print(content)

    time.sleep(5)

コードを実行すると、以下のようにプリントアウトされます。

Succeeded. Status: 200 https://io.traffine.com/id/articles/minikube
Succeeded. Status: 200 https://io.traffine.com/id/articles/kubectl

リクエストを送信後、最大2分程度以内に当該URLがクロールされます。早い場合は数秒でクロールされます。

参考

https://developers.google.com/search/apis/indexing-api/v3/prereqs
https://developers.google.com/search/apis/indexing-api/v3/using-api

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!