杰瑞科技汇

python导入wordpress

实现这个目标最主流、最推荐的方法是使用 WordPress REST API,这是一个现代、强大且官方支持的接口,允许外部程序(如 Python 脚本)通过标准的 HTTP 请求来操作 WordPress。

python导入wordpress-图1
(图片来源网络,侵删)

下面我将为你详细介绍如何使用 Python 和 WordPress REST API 来实现内容导入和管理。


核心方法:使用 WordPress REST API

WordPress 4.7+ 版本内置了 REST API,无需安装额外插件即可使用基本功能(如文章、页面、分类、标签等),对于更复杂的需求(如媒体上传、自定义字段等),可能需要安装特定插件,但核心原理是相通的。

第一步:在 WordPress 网站上获取 API 信息

  1. 获取 API 端点:打开你的 WordPress 网站的后台,进入 设置 -> 固定链接,确保“普通”设置没有被修改(通常默认就是 /postname/ 格式,这对 REST API 无影响)。
  2. 测试 API 是否可用:在浏览器中访问 https://你的WordPress网站域名/wp-json/wp/v2/posts,如果能看到类似 JSON 格式的文章列表,说明 REST API 已经启用。
  3. 获取身份验证信息(推荐):为了安全地创建、修改内容,你应该使用应用密码,这比直接使用管理员用户名和密码更安全。
    • 安装插件:如果你的 WordPress 版本低于 5.6,需要安装并激活 Application Passwords 插件,5.6+ 版本通常已内置此功能。
    • 创建应用密码
      • 进入 用户 -> 个人资料 页面。
      • 滚动到最下方的“应用密码”部分。
      • 在“新应用名称”中输入一个你喜欢的名字,Python Content Poster
      • 点击“添加新应用密码”按钮。
      • 系统会生成一个密码,请立即复制并妥善保存,因为关闭此页面后将无法再次看到这个密码,这个密码就是你脚本需要的“密码”。

第二步:准备 Python 环境

你需要安装 requests 库,这是 Python 中最流行的 HTTP 请求库。

pip install requests

第三步:编写 Python 脚本

下面我将通过几个常见的例子来展示如何使用 Python 与 WordPress 交互。

python导入wordpress-图2
(图片来源网络,侵删)

示例 1:获取所有文章

import requests
import base64
# --- 配置信息 ---
WP_URL = "https://你的WordPress网站域名"
WP_USERNAME = "你的WordPress用户名"
WP_PASSWORD = "你在上一步生成的应用密码" # 直接粘贴在这里
# 将用户名和密码进行 base64 编码
auth_string = f"{WP_USERNAME}:{WP_PASSWORD}"
auth_bytes = auth_string.encode('ascii')
auth_base64 = base64.b64encode(auth_bytes).decode('ascii')
# 设置请求头
headers = {
    'Authorization': f'Basic {auth_base64}'
}
# API 端点
api_url = f"{WP_URL}/wp-json/wp/v2/posts"
try:
    # 发送 GET 请求
    response = requests.get(api_url, headers=headers, timeout=10)
    # 检查请求是否成功
    response.raise_for_status() # 如果请求失败 (401, 404), 会抛出异常
    # 解析 JSON 数据
    posts = response.json()
    # 打印文章标题
    for post in posts:
        print(f"文章ID: {post['id']}, 标题: {post['title']['rendered']}")
except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")

示例 2:创建一篇新文章

这是最常见的“导入”场景,你可以从 CSV、数据库、其他 API 等地方获取数据,然后通过 Python 脚本批量发布到 WordPress。

import requests
import base64
import json
# --- 配置信息 (同上) ---
WP_URL = "https://你的WordPress网站域名"
WP_USERNAME = "你的WordPress用户名"
WP_PASSWORD = "你的应用密码"
auth_string = f"{WP_USERNAME}:{WP_PASSWORD}"
auth_bytes = auth_string.encode('ascii')
auth_base64 = base64.b64encode(auth_bytes).decode('ascii')
headers = {
    'Authorization': f'Basic {auth_base64}',
    'Content-Type': 'application/json' # 发送 JSON 数据需要设置此头
}
# API 端点
api_url = f"{WP_URL}/wp-json/wp/v2/posts"
# 准备要发布的新文章数据
# status 可以是 'draft' (草稿), 'pending' (待审), 'publish' (已发布)
new_post_data = {: '我的第一篇 Python 发布的文章',
    'content': '这是通过 Python 脚本自动发布到 WordPress 的文章内容,支持 <strong>HTML</strong> 标签。',
    'status': 'publish',
    'author': 1, # 作者ID,1 通常是管理员
    'categories': [1], # 分类ID数组,1 通常是“未分类”
    'tags': ['python', '自动化'] # 标签名数组
}
try:
    # 发送 POST 请求
    response = requests.post(api_url, headers=headers, data=json.dumps(new_post_data), timeout=10)
    # 检查请求是否成功
    response.raise_for_status()
    # 获取新创建文章的信息
    created_post = response.json()
    print(f"文章发布成功!文章ID: {created_post['id']}, 链接: {created_post['link']}")
except requests.exceptions.RequestException as e:
    print(f"发布失败: {e}")
    # 如果失败,打印服务器返回的错误信息
    if response is not None:
        print(f"服务器响应: {response.text}")

示例 3:上传图片并作为文章特色图片

这是一个稍微复杂但非常实用的例子。

import requests
import base64
# --- 配置信息 ---
WP_URL = "https://你的WordPress网站域名"
WP_USERNAME = "你的WordPress用户名"
WP_PASSWORD = "你的应用密码"
# 1. 上传图片
image_path = 'path/to/your/image.jpg' # 替换为你的图片路径
# 计算文件名
filename = image_path.split('/')[-1]
# 读取图片文件内容
with open(image_path, 'rb') as f:
    image_data = f.read()
# 构造上传请求
upload_url = f"{WP_URL}/wp-json/wp/v2/media"
headers = {
    'Authorization': f'Basic {base64.b64encode(f"{WP_USERNAME}:{WP_PASSWORD}".encode()).decode()}',
    'Content-Disposition': f'attachment; filename={filename}',
    'Content-Type': 'image/jpeg' # 根据图片类型设置
}
try:
    # 发送 POST 请求上传图片
    image_response = requests.post(upload_url, data=image_data, headers=headers, timeout=30)
    image_response.raise_for_status()
    # 获取上传后的媒体信息
    media_item = image_response.json()
    print(f"图片上传成功!媒体ID: {media_item['id']}")
    # 2. 使用上传的图片作为特色图片创建文章
    auth_string = f"{WP_USERNAME}:{WP_PASSWORD}"
    auth_bytes = auth_string.encode('ascii')
    auth_base64 = base64.b64encode(auth_bytes).decode('ascii')
    post_headers = {
        'Authorization': f'Basic {auth_base64}',
        'Content-Type': 'application/json'
    }
    post_api_url = f"{WP_URL}/wp-json/wp/v2/posts"
    new_post_with_featured_image = {
        'title': '带特色图片的文章',
        'content': '这篇文章包含了一张通过 Python 上传的特色图片。',
        'status': 'publish',
        'featured_media': media_item['id'] # 使用刚刚上传的媒体ID
    }
    post_response = requests.post(post_api_url, headers=post_headers, data=json.dumps(new_post_with_featured_image), timeout=10)
    post_response.raise_for_status()
    created_post = post_response.json()
    print(f"文章发布成功!特色图片已设置,文章链接: {created_post['link']}")
except requests.exceptions.RequestException as e:
    print(f"操作失败: {e}")
    if 'image_response' in locals() and image_response is not None:
        print(f"图片上传错误: {image_response.text}")
    if 'post_response' in locals() and post_response is not None:
        print(f"文章发布错误: {post_response.text}")

其他方法(了解即可)

除了 REST API,还有其他一些方式可以实现与 WordPress 的交互,但它们通常不如 REST API 灵活和现代。

  1. XML-RPC

    python导入wordpress-图3
    (图片来源网络,侵删)
    • 简介:这是一个更老的远程调用协议,WordPress 也支持,它功能强大,但配置相对复杂,且官方社区对其未来的支持态度不如 REST API 积极。
    • Python 库:可以使用 xmlrpc.client (Python 内置) 或第三方库如 python-wordpress-xmlrpc
    • 适用场景:如果你在使用一个非常老的 WordPress 版本,或者使用的特定插件/主题只支持 XML-RPC。
  2. 直接操作数据库

    • 简介:通过 Python 的数据库连接库(如 pymysql, psycopg2)直接连接 WordPress 的 MySQL 数据库,并插入或修改 wp_posts, wp_postmeta 等表的数据。
    • 优点:速度极快,绕过了 WordPress 的所有逻辑。
    • 缺点
      • 极度危险:容易破坏数据库结构,导致网站崩溃。
      • 脆弱:WordPress 更新后,数据库表结构可能改变,导致你的脚本失效。
      • 无法处理附件:上传文件并生成正确的路径和元数据非常复杂。
    • 适用场景:仅限于高级开发者进行底层数据迁移,并且对数据库结构有非常深入的了解。绝对不推荐初学者使用

总结与推荐

方法 优点 缺点 推荐度
WordPress REST API 官方支持、现代、安全、功能全面、易于使用 需要理解 HTTP 请求和 JSON ⭐⭐⭐⭐⭐ (强烈推荐)
XML-RPC 功能强大,历史较长 配置复杂,社区支持度下降 ⭐⭐☆☆☆ (备选方案)
直接操作数据库 速度最快,无性能开销 极度危险、脆弱、不维护 ⭐☆☆☆☆ (不推荐,除非有特殊需求)

对于绝大多数用户来说,学习和使用 WordPress REST API 是与 Python 交互的最佳方式。 它安全、灵活,并且是 WordPress 官方主推的标准化接口,上面的示例代码为你提供了一个坚实的基础,你可以基于此进行扩展,例如从 CSV 文件批量读取数据、处理 Markdown 格式内容、定时发布文章等。

分享:
扫描分享到社交APP
上一篇
下一篇