🦀
【Rust】Google Indexing APIのURLを一括で送信
はじめに
求人サイトでは必須といって良い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が多い場合は上限の割当を緩和する必要が有ります。
GoogleAPI Consoleから上限の緩和をすれば割とすぐに緩和してくれます。
私が申請するときにはサイトにある求人数と一日の更新見込みを記載するとことで通りました。
Discussion