2025年6月28日土曜日

Blogger API v3 を使って Python スクリプトから記事を投稿する方法

Blogger API v3 を使って Python スクリプトから記事を投稿する方法

概要

前回 OAuth2.0 を実装しました
今回は認証後に記事を投稿する部分を実装します

環境

  • macOS 15.5
  • Python 3.12.11
  • google-api-python-client 2.174.0

Python スクリプト

blog_id の部分は適宜変更してください

  • vim app.py
import os

from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build

# スコープ(Blogger のフルアクセス)
SCOPES = ["https://www.googleapis.com/auth/blogger"]


if os.path.exists("token.json"):
    creds = Credentials.from_authorized_user_file("token.json", SCOPES)
else:
    flow = InstalledAppFlow.from_client_secrets_file("client_secrets.json", SCOPES)
    creds = flow.run_local_server(port=8080, access_type="offline")
    with open("token.json", "w") as token:
        token.write(creds.to_json())

# 以降のコードで自動リフレッシュ対応済み
service = build("blogger", "v3", credentials=creds)

# 対象のブログID
blog_id = "1234567890"

# ブログの一覧を取得したい場合は以下のコードを使用
# 対象ブログの取得(複数ある場合はリストされる)
# blogs = service.blogs().listByUser(userId='self').execute()
# for blog in blogs['items']:
#     print(f"Blog ID: {blog['id']}, Title: {blog['name']}")
#
# blog_id = blogs['items'][0]['id']  # 1つ目のブログを使う

body = {
    "kind": "blogger#post",
    "title": "テスト投稿",
    "content": "<p>これは Python からの Blogger API を使ったテスト投稿です。</p>",
}

# 投稿の実行
result = service.posts().insert(blogId=blog_id, body=body).execute()

print(f"Post published: {result['url']}")

動作確認

  • pipenv run python app.py

で記事を投稿し問題なく記事があることを確認しましょう
記事の URL などを変更したい場合は post では行えず put する必要があります

最後に

Blogger API v3 を使って記事を投稿する方法を紹介しました
Blogger API v3 では投稿した記事の URL 部分 (permalink) を変更することはできないようです
permalink の変更は GUI からのみ行えます

参考サイト

0 件のコメント:

コメントを投稿