画像RSS

2025年12月14日日曜日

C#でBloggerページの自動更新

禍話リライトまとめを作る際に、Bloggerのページを自動で更新するプログラムが欲しくなり、Blogger APIを叩くプログラムを自作しました。

下準備: ページIDの取得

ページの自動更新のためには、ブログのIDとページのIDを知っている必要があるようです。

ブログのIDは簡単に確認できます。Bloggerのサイトを開いたときに、自動でリダイレクトされる先のURLを見れば解決します。URLは「https://www.blogger.com/blog/posts/(数字の羅列)」という形式であり、この数字の羅列がブログのIDです。

ただ、ページのIDは簡単には確認できないようでした。そのため、まずはページのIDを調べるプログラムを作成しました。

以下のプログラムは次の2点を予め実施する必要があります。

  • GoogleのAPIの認証のため、APIキーまたはOAuthクライアントIDを作成する (参考: アクセス認証情報を作成する)。作成したAPIキーまたはOAuthクライアントIDはすぐには有効にはならないため注意する。
  • NuGetパッケージで「Google.Apis.Blogger.v3」をインストールする。

このプログラムは、ページのキーを列挙し、そのID、題名、URLを出力します。 この例ではAPIキーを使用していますが、OAuthクライアントIDを使用しても良いです。どうせ必要になることを考えると、OAuthクライアントIDを作成した方が良いかもしれません。


using Google.Apis.Blogger.v3;
using Google.Apis.Services;

// Bloggerサービス
var service = new BloggerService(new BaseClientService.Initializer()
{
    ApiKey = "APIキー",
    ApplicationName = "アプリケーション名"
});

// リクエスト
var request = service.Pages.List("ブログのID");
request.MaxResults = 100;      // 結果の最大数

// レスポンス
var response = request.Execute();

// レスポンスを出力
using (var sw = new StreamWriter("output.txt"))
{
    foreach (var item in response.Items)
    {
        sw.WriteLine(item.Id);
        sw.WriteLine(item.Title);
        sw.WriteLine(item.Url);

        sw.WriteLine();
    }
}

本番: ページの更新

ようやく本題に入ります。以下のプログラムは次の2点を予め実施する必要があります。

  • GoogleのAPIの認証のため、OAuthクライアントIDを作成する (参考: アクセス認証情報を作成する)。“client_secret.json”をダウンロードしておくこと。作成したOAuthクライアントIDはすぐには有効にはならないため注意する。
  • NuGetパッケージで「Google.Apis.Blogger.v3」をインストールする。

このプログラムは、既存のBloggerのページの題名、内容を更新します。


using Google.Apis.Auth.OAuth2;
using Google.Apis.Blogger.v3;
using Google.Apis.Blogger.v3.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using static Google.Apis.Blogger.v3.Data.Page;

namespace BloggerPageUpdateProgram
{
    public class Program()
    {
        public static void Main()
        {
            new Program().Run().Wait();
        }
    
        private async Task Run()
        {
            // Googleの認証
            UserCredential credential;
            using (var stream = new FileStream("client_secret.jsonのパス", FileMode.Open, FileAccess.Read))
            {
                credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.FromStream(stream).Secrets,
                    new[] { BloggerService.Scope.Blogger },
                    "user",
                    CancellationToken.None,
                    new FileDataStore(this.GetType().ToString())
                );
            }

            // Bloggerサービス
            var service = new BloggerService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "アプリケーション名"
            });

            // Blogger接続用のデータ
            var blog = new BlogData();
            blog.Id = "ブログのID";
            
            // Bloggerのページへの書き込みデータ
            var page = new Page();
            page.Kind = "blogger#page";
            page.Blog = blog;
            page.Id = "ページのID";
            page.Title = "ページの題名";
            page.Content = "ページの内容";

            // リクエスト
            var request = service.Pages.Update(page, "ブログのID", "ページのID");

            // レスポンス
            var response = request.Execute();
        }
    }
}

0 件のコメント:

コメントを投稿