一个自动发布 WordPress 文章的脚本

前言

为了适合“AI 生成-发布文章一条龙”流程,整理了以下文章。

准备

WordPress 有 API 可以直接发布文章。先进入 Users,选用户名,进入后到 Application Passwords,创建一个应用密码,它是 24 位格式。建议一个密码对应一个应用专用。

脚本

它负责把 AI 生成的 markdown 文件发布到 wordpress:

#!/bin/bash

# WordPress REST API 文章发布脚本
# 用法: ./wp-publish.sh <markdown文件路径> [标题]

set -e

# 配置(请根据实际情况修改)
WP_URL="${WP_URL:-https://URL/wp-json/wp/v2/posts}"
WP_USER="${WP_USER:-username}"
WP_PASS="${WP_PASS:-xxxx xxxx xxxx xxxx xxxx xxxx}"

# 参数检查
if [ $# -lt 1 ]; then
    echo "用法: $0 <markdown文件路径> [标题]"
    exit 1
fi

MD_FILE="$1"
TITLE="$2"

# 检查文件是否存在
if [ ! -f "$MD_FILE" ]; then
    echo "错误: 文件 '$MD_FILE' 不存在"
    exit 1
fi

# 读取Markdown内容
CONTENT=$(cat "$MD_FILE")

# 如果没有提供标题,尝试从文件第一行提取(# 标题)
if [ -z "$TITLE" ]; then
    FIRST_LINE=$(head -n1 "$MD_FILE" | sed 's/^#* //')
    if [[ "$FIRST_LINE" != "$(cat "$MD_FILE")" ]]; then
        TITLE="$FIRST_LINE"
    else
        TITLE="$(basename "$MD_FILE" .md)"
    fi
fi

echo "标题: $TITLE"
echo "文件: $MD_FILE"
echo "长度: $(echo "$CONTENT" | wc -c) 字符"

# 转义JSON特殊字符(双引号、反斜杠、换行符)
ESCAPED_CONTENT=$(printf '%s' "$CONTENT" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | sed ':a;N;$!ba;s/\n/\\n/g')

# 构造JSON payload
JSON="{\"title\":\"$TITLE\",\"content\":\"$ESCAPED_CONTENT\",\"status\":\"draft\"}"

# 发布文章
echo "正在发布到 WordPress..."

RESPONSE=$(curl -s -X POST \
    -u "$WP_USER:$WP_PASS" \
    -H "Content-Type: application/json" \
    -d "$JSON" \
    "$WP_URL")

# 检查响应
if echo "$RESPONSE" | grep -q '"id"'; then
    POST_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | cut -d: -f2)
    if command -v jq &>/dev/null; then
        POST_URL=$(echo "$RESPONSE" | jq -r '.link // empty')
    else
        POST_URL=$(echo "$RESPONSE" | grep -o '"link":"[^"]*"' | cut -d'"' -f4 | sed 's#\\/#\/#g')
    fi
    echo "✅ 发布成功!"
    echo "文章ID: $POST_ID"
    echo "文章链接: $POST_URL"
    echo "状态: 草稿(draft)"
else
    echo "❌ 发布失败"
    echo "错误信息: $RESPONSE"
    exit 1
fi

最后就是给 AI agent 一个主题,让它生成文章,保存成 markdown 格式,再让它调用这个 shell 上传。在现在 AI agent 泛滥的时代,很容易完成这个任务。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注