ChatGPT API 自動寫文章+WordPress 自動發文完整教學|Python 實作

ChatGPT API 自動寫文章+WordPress 自動發文完整教學|Python 實作

想把 AI 文章生成與 WordPress 網站內容發布自動化,可以使用 ChatGPT API+Python+WordPress REST API 建立完整流程。 程式先將文章主題與寫作要求送給 OpenAI API,再取得 AI 產生的內容,經過格式整理後,最後使用 WordPress REST API 建立文章。

這種做法適合需要大量建立內容草稿、建立網站自動化流程,或希望將 AI 整合到既有 CMS 的使用者。 不過「自動生成」不代表可以完全省略人工審核。正式網站仍應確認文章內容、技術資料、來源、HTML、SEO、內部連結與圖片等項目。

完整流程:
文章主題 → ChatGPT API → 生成文章 → HTML 整理 → WordPress REST API → 建立 Draft → 人工審核 → Publish

ChatGPT API 自動寫文章的完整架構

整個系統可以分成四個主要階段:AI 文章生成、內容格式化、WordPress API 傳送,以及人工審核。 WordPress REST API 的 Posts endpoint 可用來建立文章,並設定標題、內容、狀態、分類與標籤等欄位。

階段工作工具
1產生文章內容OpenAI API
2整理 HTML 與文章結構Python / Node.js
3建立 WordPress 文章WordPress REST API
4審核與發布WordPress 後台

準備 OpenAI API

開始之前需要準備 OpenAI API Key。建議將 API Key 放在環境變數或 Secret 管理機制,而不要直接寫死在 Python 程式或網站前端。

Linux

export OPENAI_API_KEY="你的_API_KEY"

Windows PowerShell

$env:OPENAI_API_KEY="你的_API_KEY"

OpenAI 官方 SDK 可直接從環境變數讀取 API Key。官方 Python SDK 目前提供 OpenAI() Client 與 Responses API;Node.js 官方 SDK 也採用相同的 Responses API 方式。

安全注意: 不要把 API Key 寫入 Git Repository、公開網站、前端 JavaScript、文章內容或公開設定檔。 一旦金鑰外洩,應立即撤銷並重新建立新的金鑰。

Python 呼叫 ChatGPT API

目前 OpenAI 官方 Python SDK 支援 Responses API。基本方式是建立 OpenAI() Client,再使用 client.responses.create() 取得模型回應。

安裝 OpenAI SDK

pip install -U openai

Python 完整範例

import os
from openai import OpenAI


def generate_article(topic: str) -> str:
    api_key = os.getenv("OPENAI_API_KEY")

    if not api_key:
        raise RuntimeError("找不到 OPENAI_API_KEY 環境變數")

    client = OpenAI(api_key=api_key)

    instructions = """
你是一位網站內容編輯。

請使用繁體中文撰寫網站文章。

要求:
1. 文章結構清楚
2. 使用 H2 與 H3
3. 內容以事實為主
4. 不要捏造資料
5. 不確定的資訊請標示需要驗證
6. 適合一般讀者閱讀
7. 只輸出 HTML 文章內容
8. 不要使用 Markdown 程式碼框
"""

    prompt = f"""
請撰寫一篇網站文章。

文章主題:
{topic}
"""

    response = client.responses.create(
        model=os.getenv("OPENAI_MODEL", "gpt-5.5"),
        instructions=instructions,
        input=prompt
    )

    return response.output_text


if __name__ == "__main__":
    article = generate_article(
        "Ubuntu Server Docker 常見錯誤排查"
    )

    with open("article.html", "w", encoding="utf-8") as file:
        file.write(article)

    print("文章生成完成")

官方 Python SDK 提供 response.output_text 方便直接取得文字輸出。

Node.js 呼叫 ChatGPT API

如果自動化環境使用 Node.js,也可以使用官方 OpenAI Node SDK。 官方目前的 Responses API 寫法是 client.responses.create(),並可使用 response.output_text 取得文字結果。

安裝套件

npm install openai

Node.js 範例

const OpenAI = require("openai");
const fs = require("fs");

const apiKey = process.env.OPENAI_API_KEY;

if (!apiKey) {
  throw new Error("找不到 OPENAI_API_KEY");
}

const client = new OpenAI({
  apiKey: apiKey
});

async function generateArticle() {
  try {
    const response = await client.responses.create({
      model: process.env.OPENAI_MODEL || "gpt-5.5",
      instructions: `
你是一位網站內容編輯。

請使用繁體中文撰寫文章。
使用 H2、H3 結構。
內容必須清楚、可讀。
不要捏造資料。
只輸出 HTML。
`,
      input: `
請撰寫一篇網站文章。

主題:
Docker Ubuntu Server 常見錯誤排查
`
    });

    const articleContent = response.output_text;

    fs.writeFileSync(
      "article.html",
      articleContent,
      "utf8"
    );

    console.log("文章生成完成");

  } catch (error) {
    console.error("API 呼叫失敗:", error.message);
    process.exitCode = 1;
  }
}

generateArticle();

文章 HTML 格式化

如果 AI 已經直接輸出 HTML,就不要再把每一行文字重新包成 <p>。 原本使用 split("\n") 將所有行直接轉成段落,容易破壞 H2、H3、清單與其他 HTML 結構。

比較好的方式是從 Prompt 就要求 AI 輸出完整 HTML,再直接保存。 如果你取得的是純文字,才需要另外進行段落轉換。

純文字轉簡單 HTML

import html


def text_to_html(text: str) -> str:
    paragraphs = []

    for line in text.splitlines():
        line = line.strip()

        if not line:
            continue

        safe_text = html.escape(line)
        paragraphs.append(
            f"<p>{safe_text}</p>"
        )

    return "\n".join(paragraphs)


if __name__ == "__main__":
    with open("article_raw.txt", "r", encoding="utf-8") as file:
        article_text = file.read()

    article_html = text_to_html(article_text)

    with open("article.html", "w", encoding="utf-8") as file:
        file.write(article_html)

    print("HTML 轉換完成")
注意: 這段程式適合純文字,不適合已經包含 HTML 標籤的內容。 如果 AI 回傳的是 HTML,直接保存原始 HTML 即可。

WordPress REST API 與 Application Password

WordPress REST API 建立文章的 endpoint 是:

POST https://你的網站/wp-json/wp/v2/posts

WordPress Posts API 支援 titlecontentstatuscategoriestagsfeatured_media 等欄位。

建立 Application Password

WordPress 的 Application Password 是提供程式、Script 或其他整合服務使用的專用憑證,可以個別撤銷,不需要把主要 WordPress 登入密碼交給自動化程式。

一般操作位置為 WordPress 後台的:

使用者 → 個人資料 → Application Passwords

建立一組專門供自動發文使用的 Application Password,例如:

AI Article Publisher
非常重要: Application Password 屬於敏感憑證,應使用 HTTPS 傳送並安全保存。不要把它直接寫死在公開的 Python 程式或 Git Repository 中。WordPress 官方也建議使用 HTTPS 來保護 Basic Authentication 傳輸。

Python 自動建立 WordPress 文章

以下範例使用 HTTP Basic Authentication 搭配 WordPress Application Password,並預設建立為 Draft

安裝 requests

pip install requests

設定環境變數

export WORDPRESS_URL="https://www.itmaster.tw"
export WORDPRESS_USERNAME="你的WordPress帳號"
export WORDPRESS_APP_PASSWORD="你的ApplicationPassword"

完整 Python 程式

import os
import requests
from requests.auth import HTTPBasicAuth


WORDPRESS_URL = os.getenv("WORDPRESS_URL")
WORDPRESS_USERNAME = os.getenv("WORDPRESS_USERNAME")
WORDPRESS_APP_PASSWORD = os.getenv(
    "WORDPRESS_APP_PASSWORD"
)


def create_wordpress_post(
    title: str,
    content: str,
    status: str = "draft"
):
    if not WORDPRESS_URL:
        raise RuntimeError("缺少 WORDPRESS_URL")

    if not WORDPRESS_USERNAME:
        raise RuntimeError("缺少 WORDPRESS_USERNAME")

    if not WORDPRESS_APP_PASSWORD:
        raise RuntimeError(
            "缺少 WORDPRESS_APP_PASSWORD"
        )

    url = (
        f"{WORDPRESS_URL.rstrip('/')}"
        "/wp-json/wp/v2/posts"
    )

    data = {
        "title": title,
        "content": content,
        "status": status
    }

    response = requests.post(
        url,
        auth=HTTPBasicAuth(
            WORDPRESS_USERNAME,
            WORDPRESS_APP_PASSWORD
        ),
        json=data,
        timeout=30
    )

    response.raise_for_status()

    result = response.json()

    print("文章建立成功")
    print("Post ID:", result.get("id"))
    print("Status:", result.get("status"))
    print("Link:", result.get("link"))

    return result


if __name__ == "__main__":

    with open(
        "article.html",
        "r",
        encoding="utf-8"
    ) as file:
        content = file.read()

    create_wordpress_post(
        title="Docker Ubuntu Server 常見錯誤排查",
        content=content,
        status="draft"
    )

WordPress 官方 Posts API 明確支援 draftpublish 等文章狀態,因此可以先建立草稿,確認內容後再從後台發布。

為什麼建議先建立 Draft?

第一次建立自動發文系統時,建議先使用:

"status": "draft"

而不要一開始就使用:

"status": "publish"

原因是 AI 產生文章後,仍然需要進行人工驗證。 尤其 IT 技術文章可能包含版本號、設定檔、指令、API、網路設定與安全建議,其中任何一項錯誤都可能造成實際問題。

審核項目檢查內容
事實技術資料、版本、日期、數據
程式碼指令與範例是否可以正確執行
HTML標題、段落、表格、清單是否正常
SEOTitle、Description、H1、內部連結
連結內外部 URL 是否有效
安全是否包含危險或不安全操作
推薦流程: AI 生成 → Draft → 人工審核 → 修正 → Publish

ChatGPT API 與 WordPress 常見錯誤

錯誤一:找不到 OPENAI_API_KEY

KeyError
OPENAI_API_KEY is not set

先確認環境變數是否存在:

echo $OPENAI_API_KEY

如果沒有值,重新設定環境變數,再執行程式。

錯誤二:OpenAI API 回傳 401

通常需要確認 API Key 是否正確,以及程式執行環境是否讀得到正確的 OPENAI_API_KEY。 不要將 Key 直接貼進程式碼中作為長期解法。

錯誤三:WordPress API 回傳 401

先確認:

  1. 使用的是 WordPress Application Password。
  2. WordPress 使用者名稱正確。
  3. 網站使用 HTTPS。
  4. Authorization Header 沒有被 Proxy 或安全外掛移除。

WordPress Application Password 是給程式化 API 存取使用的專用憑證,基本使用方式是 HTTP Basic Authentication。

錯誤四:WordPress API 回傳 403

403 通常代表請求已經抵達網站,但目前帳號或伺服器規則不允許執行該操作。 可以檢查 WordPress 使用者角色、權限、安全外掛、WAF、反向代理與伺服器規則。

錯誤五:WordPress API 回傳 404

確認 REST API 路徑:

https://你的網站/wp-json/wp/v2/posts

也確認 WordPress 實際安裝位置,以及網站是否正確處理 REST API 路由。 Posts API 的正式 endpoint 是 /wp/v2/posts

錯誤六:文章 HTML 格式錯亂

常見原因是文章原始內容已經包含 HTML,卻再次執行純文字轉 HTML。 請先確認 AI 回傳的是 HTML 還是純文字,再選擇相對應的處理方法。

ChatGPT API+WordPress 完整自動化流程

如果要把整套系統做成網站內容自動化,可以採用以下架構:

1. 輸入文章主題
        ↓
2. ChatGPT API
        ↓
3. 生成文章
        ↓
4. HTML 格式檢查
        ↓
5. 產生 SEO Title
        ↓
6. 產生 Meta Description
        ↓
7. 加入內部連結
        ↓
8. WordPress REST API
        ↓
9. 建立 Draft
        ↓
10. 人工審核
        ↓
11. Publish

進一步還可以自動建立分類、Tag、文章摘要與特色圖片,甚至可以加入網站內部連結規則,讓 AI 成為網站內容工作流程的一部分。

建議不要一開始就做到「完全自動發布」

比較穩定的做法是先建立「半自動」系統。 也就是讓 AI 負責內容生成與整理,程式負責傳送到 WordPress,而最後的發布仍由管理員確認。

等測試完成、錯誤率確認穩定後,再考慮針對低風險內容建立更高程度的自動化。

FAQ 常見問題

ChatGPT API 可以自動寫文章嗎?

可以。程式可以將文章主題與寫作要求送給 OpenAI API,再取得模型生成的內容。目前官方 Python 與 Node.js SDK 都支援 Responses API。

WordPress 可以自動建立文章嗎?

可以。WordPress REST API 提供 /wp/v2/posts endpoint,可以使用 POST 建立文章,並設定 title、content、status 等欄位。

WordPress Application Password 是什麼?

它是 WordPress 提供給程式、Script 與整合服務使用的專用 API 憑證,可以個別撤銷,也不需要把主要 WordPress 登入密碼提供給自動化程式。

需要把 OpenAI API Key 寫在 Python 裡嗎?

不建議。應使用環境變數或 Secret 管理方式保存 API Key,避免程式碼進入 Git Repository 後造成金鑰外洩。

可以讓 AI 直接自動發布文章嗎?

技術上可以,但正式網站比較建議先建立 Draft,再由人工檢查內容後發布。這樣可以避免錯誤資訊、程式碼錯誤與 HTML 格式問題直接出現在正式網站。

WordPress API 回傳 401 怎麼辦?

確認 WordPress Application Password、使用者名稱、HTTPS,以及反向代理或安全外掛是否移除了 Authorization Header。

文章建立成功但沒有公開是正常的嗎?

如果程式設定 "status": "draft",WordPress 會建立草稿而不是公開文章。Posts API 支援 draft、publish、future、pending 與 private 等文章狀態。

如果你想進一步建立 AI、自動化與網站管理流程,可以繼續閱讀以下文章:

總結: ChatGPT API+Python+WordPress REST API 可以將文章生成與網站發布流程串接起來。 最推薦的架構不是「AI 生成後直接發布」,而是 AI 生成 → HTML 整理 → SEO 處理 → WordPress Draft → 人工審核 → Publish。 這樣可以兼顧自動化效率與網站內容品質。