禍話リライトまとめを作る際に、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 件のコメント:
コメントを投稿