PythonとWordPress REST APIでブログ自動投稿パイプラインを構築:文字化けとレイアウト崩れへの対処法
本記事は、クライアントのブログ運用自動化を目指し、「記事生成(Markdown)→ WordPress自動投稿」のパイプラインを構築した際の技術的な課題とその解決策を詳細に解説している。
【何が起こったか】当初、Pythonスクリプトを用いてWordPress REST API (POST /wp-json/wp/v2/posts) から記事を自動投稿しようとした際、本文の日本語が文字化けする問題と、レイアウトが崩れるという二重のトラブルに遭遇した。
【原因と解決策】
1. **文字化けの原因(エンコードミス)**: 最初に試みたシェルスクリプトと`curl`コマンドによる投稿では、JSONとして変数のエスケープ処理やロケール依存のエンコーディングが不安定であったため、日本語が「ã�ã�®è¨」のような文字化けを引き起こした。これを解決するため、Pythonの`requests`ライブラリを使用し、`json=payload`引数を用いることで、内部的にUTF-8でのシリアライズを任せる手法に切り替えたことが決定的なポイントとなった。
2. **レイアウト崩れの原因(フォーマット混在)**: 記事生成時にMarkdown形式で出力されたテキストをそのままWordPressの`content`フィールドに渡したため、一部HTMLタグが正しく解釈されず、見出しやリストなどのレイアウトが崩れた。対策として、投稿前に必ず`markdown`ライブラリを用いて「Markdown → HTML変換」の工程(`md_to_html`関数)を挟むことで、この問題は完全に解消された。
【設計上のポイント】また、自動化パイプラインでは、セキュリティと品質管理の観点から、投稿ステータスをいきなり公開せず、必ず`status: draft`として下書き保存し、人間の最終確認プロセスを経る設計を採用している。本記事は、これらの具体的なコード修正や技術的な落とし穴(例:Application Passwordsでの401エラー対策など)を提示することで、同様の自動化開発を行うエンジニアに向けて実践的な知見を提供している。
背景
本記事は、Webコンテンツの自動生成とCMS(WordPress)への投稿という、現代のデジタルマーケティングにおける一般的な課題を扱っている。特にAPI連携によるワークフロー構築は必須技術であり、エンコーディングやデータフォーマットの不一致が初期段階で大きな障壁となることが多い。
重要用語解説
- REST API: Representational State Transfer Application Programming Interfaceの略。HTTPプロトコルを利用して、Webサービス間でデータを交換するための標準的な設計指針である。WordPressなど多くのCMSが採用している。
- エンコーディング: 文字コードをコンピュータが処理できるバイナリデータに変換する仕組み(例:UTF-8)。日本語の文字化けは、このエンコーディング指定が不適切であった場合に発生する。
- Markdown: 軽量マークアップ言語の一つ。記号的な記述だけで構造化されたテキストを作成でき、HTMLよりも直感的に編集できるため、コンテンツ生成の初期段階で広く利用される。
今後の影響
本記事の内容は、単なる技術解説に留まらず、自動化システムの堅牢な設計指針を提供するものである。特に「draft保存」や「Markdown→HTML変換レイヤーの必須化」といったプロセス管理の視点は、今後の業務自動化システム構築において標準的なベストプラクティスとなることが期待される。