活用法 / ブログ運営 / Python・API
約2,400文字
ブログ記事をLLMで執筆する際、最も一般的なパターンは、ChatGPTやClaudeのチャット画面に「このテーマでガイド記事を書いて」と入力し、出力されたHTMLを手動でコピーしてBloggerの管理画面UIに貼り付けることです。これには5分ほどかかり、ラベル、メタディスクリプション、カテゴリは毎回設定し直さなければなりません。そこで私たちは、LLMチャットの出力を1行のcurlコマンドでBloggerのDRAFT(下書き)まで送信する迂回エンドポイントを作成しました。
作成した理由
LLMのAPIを直接呼び出す方法(例:Anthropic / Google)はトークン費用が累積し、記事1本あたり$0.10〜0.50かかります。100本なら$10〜50。当サイトのような個人運営のブログにとっては負担になります。
一方、ChatGPT Plus、Claude Pro、Gemini Advancedのサブスクリプションは月額$20の定額制です。月に100本の記事を書いても追加費用はゼロ。ただし、チャット画面からBloggerへのコピペ作業のワークフローが非常に面倒なため、結局はAPI呼び出しに戻ってしまいがちです。
解決策:LLMチャットから取得したHTMLを、Webアプリケーションの投稿エンドポイントへ1行で送信するだけで、ラベル、メタ情報、グラフの自動挿入、SEOメタ検証のフックチェーンをすべて通過し、BloggerのDRAFT(下書き)に保存されます。人間が行う作業は、チャットで回答を受け取った後にcurlを1回実行するだけです。
月額$20の定額料金で、100本の記事をWebアプリケーションの投稿フックチェーン(サニタイズ / クオリティゲート / インデックス5チャンネル)にすべて通しながら投稿できます。
動作原理
Webアプリケーション内に、専用のエンドポイント POST /api/writer/external-publish を用意しています。
Request shape
{
"title": "記事のタイトル",
"content_html": "<p>本文HTML...</p><h2>セクション</h2>...",
"label": "活用法",
"post_type": "guide",
"primary_keyword": "キーワード",
"meta_description": "100-160文字のメタ説明"
}
LLMチャットから受け取ったHTMLを content_html にそのまま入れ、残りの5つのフィールドを埋めるだけで完了です。
サーバー側の処理
- 認証 — localhost限定(127.0.0.1)。外部への露出なし。
- ラベルの正規化(Label normalize) —
["活用法", "使い方", "tips"]のような表記揺れのある入力を、サイトの正規(canonical)ラベル6つのうちの1つに自動マッピング。定義されていないラベルの場合は{"error":"unknown_label","allowed":["..."]}を返却。 - HTMLチェック —
/の除去(strip)、生のプロンプトテンプレートの自動生成
GET /api/writer/external-publish/prompt-template?topic=foo&label=活用法を呼び出すと、サイトのトーンや構造に合わせたLLMプロンプトのテンプレートを返却します。それをそのままChatGPTやClaudeのチャット画面に貼り付けて回答を得るだけです。実際の効果
- LLM API費用:月$0.10〜0.50 × 100本 → 月額$20の定額(ChatGPT Plus)
- 記事1本の投稿時間(LLMの回答 → Blogger DRAFT):5分 → 30秒
- 投稿フックチェーンの通過率:外部LLMによる記事47本中47本(publish_quality_gate 15/15通過が平均)
- ラベル設定ミスの事故:導入前は平均月3件 → 導入後は0件(canonical normalizeによる)
- 最も一般的な使用パターン:ChatGPTでチャット → 回答をコピー → ターミナルからcurlを1行実行
月に100本の記事をChatGPT Plusのサブスクリプション1つで処理すれば、年間のLLM費用は$240(サブスクリプション) vs $1,200〜6,000(API呼び出し)になります。個人運営者にとっては無視できない差です。
検証方法
3つの方法で検証を行いました
Category Coverage Notice
This article follows our label-specific editorial criteria. Details: