Python通过REST API向wordpress插入文章
先安装REST API Authentication for WP – JWT Auth, Basic Auth 插件, 插件市场搜索Basic Auth 橘色圆形图标, 安装完成 点击配置 获取Authorization Basic
def request_create_post_api(title, cid, content, imgUrl):
# 配置信息
site_url = '' #wordpress 地址 http://dojava.cn
url = f"{site_url}/wp-json/wp/v2/posts"
headers = {
"Content-Type": "application/json",
"Authorization": "Basic YWRtaW46YXNkMTIzNDU1" # 使用Basic Auth
}
data = {
"title": "文章标题",
"content": "文章内容",
"status": "publish",
"categories": [cid,cid], # 分类ID
"featured_media": upload_image_from_url(imgUrl)
}
response = requests.post(url, json=data, headers=headers)
print("post创建结果==", response.json())
return response.json()
封面图上传 返回媒体ID
def upload_image_from_url(image_url, alt_text="文章封面图"):
"""
从远程URL直接上传图片到WordPress媒体库
返回媒体ID
"""
try:
# 从环境变量获取配置
site_url = '' #wordpress 地址 http://dojava.cn
# 获取图片信息
head_response = requests.head(image_url, allow_redirects=True, timeout=10)
head_response.raise_for_status()
# 从响应头获取内容类型
content_type = head_response.headers.get('Content-Type', 'image/jpeg')
# 生成唯一文件名
parsed_url = urlparse(image_url)
filename = os.path.basename(parsed_url.path) or f"{uuid.uuid4()}.jpg"
# 下载图片内容
response = requests.get(image_url, stream=True, timeout=30)
response.raise_for_status()
# 准备上传请求
upload_url = f"{site_url}/wp-json/wp/v2/media"
headers = {
'Authorization': 'Basic YWRtaW46YXNkMTIzNDU1',
'Content-Disposition': f'attachment; filename="{filename}"',
'Content-Type': content_type
}
# 直接上传图片内容
upload_response = requests.post(
upload_url,
headers=headers,
data=response.content
)
upload_response.raise_for_status()
# 处理响应
media_data = upload_response.json()
media_id = media_data['id']
print(f"✅ 远程图片上传成功! ID: {media_id} | URL: {image_url}")
return media_id
except requests.exceptions.RequestException as e:
print(f"❌ 远程图片上传失败: {str(e)} | URL: {image_url}")
return None
except Exception as e:
print(f"❌ 其他错误: {str(e)}")
return None

