🦀

【Rust】Google Indexing APIのURLを一括で送信

2023/09/14に公開

はじめに

求人サイトでは必須といって良いGoogleお仕事検索のインデックス登録を一括で行えるようにしました。
Rustで使えるgoogle-indexing-apiの使い方を紹介していきます。

GoogleIndexAPIのライブラリをインストール

[dependencies]
google-indexing-api = "0.1"  

実装

URLを一括で更新する方法

async fn update_url(token: &str) {
    let response = GoogleIndexingApi::url_notifications().batch(
        token,
        vec![
            "http://example.com/widgets/1".to_string(),
            "http://example.com/widgets/2".to_string(),
        ],
        UrlNotificationsType::UPDATED
    ).await;
    if let Ok(batch_list) = response {
        for batch in batch_list {
            println!("{} {:?}", batch.url(), batch.json());
        }
    }
}

URLを一括で削除する方法

async fn delete_url(token: &str) {
    let response = GoogleIndexingApi::url_notifications().batch(
        token,
        vec![
            "http://example.com/widgets/1".to_string(),
            "http://example.com/widgets/2".to_string(),
        ],
        UrlNotificationsType::DELETE
    ).await;
    if let Ok(batch_list) = response {
        for batch in batch_list {
            println!("{} {:?}", batch.url(), batch.json());
        }
    }
}

解説・補足

GoogleIndexingAPIを使うためにはサービスアカウントを用意し https://www.googleapis.com/auth/indexing の権限を付与する必要があります。
サンプルでは yup_oauth2 を使ってアクセストークンを取得していますが、別の方法でも構いません。

async fn test_token() -> AccessToken {
    // 認証
    let secret = yup_oauth2::read_service_account_key("./test.json")
        .await
        .expect("test.json");
    let auth = yup_oauth2::ServiceAccountAuthenticator::builder(secret).build().await.unwrap();
    let scopes = &["https://www.googleapis.com/auth/indexing"];

    let token = auth.token(scopes).await;
    token.unwrap()
}

また、IndexingAPIは一日に200件までしか送信できないため、送信するURLが多い場合は上限の割当を緩和する必要が有ります。
https://developers.google.com/search/apis/indexing-api/v3/quota-pricing?hl=ja#request-more-quota

GoogleAPI Consoleから上限の緩和をすれば割とすぐに緩和してくれます。

私が申請するときにはサイトにある求人数と一日の更新見込みを記載するとことで通りました。

GitHubで編集を提案

Discussion