Skip to content

Shinoryo/BloggerRegister

Repository files navigation

Blogger インデックス通知バッチ

概要

背景・目的

Bloggerで公開した記事のURLをGoogle Indexing APIに自動通知し、インデックス登録作業を自動化するためのバッチプログラムです。Firestoreで各URLの通知日時を管理し、結果をメールで通知します。

機能一覧

  • Blogger APIから全記事URLを取得し、FirestoreのURLを事前取得したキャッシュと突き合わせて登録・管理します。
  • Firestoreで各URLの通知日時を管理し、通知日時が古い順に指定件数だけURLを抽出してGoogle Indexing APIへ通知します。
  • 通知結果をHTML形式でまとめ、指定アドレスへメール送信します。
  • 各種設定値は環境変数で管理します。
  • 標準出力に実行ログを出力します(ファイル出力はありません)。

必要な環境変数

変数名 用途
BLOGGER_INDEX_REGIST_API_KEY Blogger APIキー
BLOG_ID 対象ブログのID
MAIL_FROM 送信元メールアドレス(Gmail)
MAIL_PASSWORD 送信元メールアドレスのアプリパスワード
MAIL_TO 通知先メールアドレス

変更可能な定数

blogger_register.py 冒頭で定義されています。用途に応じて値を調整してください。

定数名 用途 デフォルト値
BATCH_SIZE 1回のバッチで通知するURLの最大件数 5
SLEEP_SECONDS 1件ごとに通知後の待機秒数(API制限緩和用) 10
SMTP_SERVER メール送信に利用するSMTPサーバー "smtp.gmail.com"
SMTP_PORT SMTPサーバーのポート番号 587
INITIAL_TIMESTAMP 新規URL登録時のlast_sent初期値 Unix epoch (1970年1月1日)
MIN_NOTIFY_INTERVAL_DAYS 通知間隔の最小日数。この日数以内に通知されたURLはバッチ対象から除外される(0以下=制限なし) 0
FIRESTORE_BATCH_LIMIT Firestoreの取得・書き込みバッチ上限 500

入出力

入力

  • Blogger APIから取得した記事URL
  • Firestoreコレクション url_notifications

出力

  • Google Indexing APIへの通知
  • Firestoreの last_sent フィールド更新
  • 通知結果のHTMLメール

Firestore構造

  • コレクション名: url_notifications
  • ドキュメントID: URLをBase64エンコードした文字列
  • フィールド:
    • url: 記事URL
    • last_sent: 最終通知日時(タイムスタンプ)

実行方法

Google Cloud Functions等のサーバーレス環境での実行を想定していますが、ローカル実行も可能です。

python blogger_register/blogger_register.py

※必要な環境変数を事前に設定してください。

処理概要

  1. 環境変数から各種設定値を取得
  2. Google認証セッションを初期化
  3. Blogger APIから記事URL一覧をFirestoreに登録
  4. Firestoreから通知日時が古い順に指定件数だけURLを抽出
  5. Google Indexing APIへ通知し、結果をFirestoreに反映
  6. 全通知結果をHTMLメールで送信

注意制限事項

並列実行について

本プログラムは並列実行を想定していません。URL一覧のキャッシュは実行開始時のスナップショットであり、複数プロセスの同時実行時に競合が発生する可能性があります。

通知日時(last_sent)の扱い

  • 新規URL: Firestore登録時に Unix epoch (1970年1月1日) を設定し、優先的に通知されるようにします。
  • 既存URLでlast_sentなし: Unix epoch で初期化します。
  • 既存URLでlast_sentあり: 更新不要のため書き込みを行いません。
  • 通知成功後: バッチ終了時にまとめて現在時刻へ更新され、次回実行時の優先度が下がります。

エラー時の動作

  • 環境変数未設定: エラー出力し処理中断
  • API通知失敗: 標準出力にエラー内容を出力し、処理は継続
  • メール送信失敗: 標準出力にエラー内容を出力

メール通知

  • 通知結果はHTML形式でメール送信されます。
  • 件名は通知結果に応じて自動で変化します。
    • 失敗が1件でもあれば「【エラー】インデックス通知バッチ結果: 件数」
    • 全て成功の場合は「【完了】インデックス通知バッチ結果: 件数」
  • メール本文のサンプルは メール通知プレビュー.html を参照してください。

ライセンス

本プログラムのライセンス

  • このプログラムはMITライセンスに基づいて提供されます。

使用ライブラリーのライセンス

ライブラリ名 バージョン ライセンス
cachetools 5.5.2 Apache License 2.0
certifi 2025.6.15 Mozilla Public License 2.0
charset-normalizer 3.4.2 MIT License
google-api-core 2.25.1 Apache License 2.0
google-api-python-client 2.175.0 Apache License 2.0
google-auth 2.40.3 Apache License 2.0
google-auth-httplib2 0.2.0 Apache License 2.0
googleapis-common-protos 1.70.0 Apache License 2.0
httplib2 0.22.0 MIT License
idna 3.10 BSD 3-Clause License
proto-plus 1.26.1 Apache License 2.0
protobuf 6.31.1 BSD 3-Clause License
pyasn1 0.6.1 BSD 2-Clause License
pyasn1_modules 0.4.2 BSD 2-Clause License
pyparsing 3.2.3 MIT License
requests 2.32.4 Apache License 2.0
rsa 4.9.1 Apache License 2.0
uritemplate 4.2.0 Apache License 2.0
urllib3 2.5.0 MIT

開発詳細

開発環境

  • VSCode バージョン 1.101.2
  • Python 3.12.10

改訂履歴

バージョン 日付 内容
1.0.0 2025-07-31 初版リリース

About

Bloggerで公開した記事のURLをGoogle Indexing APIに自動通知し、インデックス登録作業を自動化するためのバッチプログラムです。

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors