原文: How to Generate WordPress Posts Automatically with Python
如果你运营一个网站,你就会意识到内容的重要性。这对你的网络形象、帮助你被公认为你所在领域的领导者、提高你的 SEO 排名、增加你的受众等很重要。
WordPress 是创建博客、电子商务平台和网站的最流行和最广泛使用的工具之一。
在本文中,我将向你展示如何使用 Python 自动创建内容并将其推送到你的 WordPress 网站。
这是它的工作原理:
- 从某些来源获取内容(例如,我们运营的另一个网站)
- 把它翻译成我们的语言
- 选择我们网站上已有的特色图片,最后将其作为帖子发布到我们的 WordPress 实例
如果你想以另一种语言快速创建内容以扩大你的受众,我们即将开发的脚本可能会很有用。
假设你有一个包含英语内容的网络杂志,并且你希望说西班牙语的用户开始阅读你的帖子,你可以创建一个新博客并运行你的脚本,将你的帖子翻译成西班牙语以供用户阅读。
让我们开始吧
这是我们将在本文结尾开发的脚本:
import requests
import json
import random
from googletrans import Translator
from requests.auth import HTTPBasicAuth
def post_creator(sourceURL, wpBaseURL, sourceLang, targetLang, postStatus):
response_API = requests.get(sourceURL)
data = response_API.text
parse_json = json.loads(data)
get_article_title = parse_json['title']
get_article_content = parse_json['body']
image_list = ["1689","1594","1612"]
translator = Translator()
title_translation = translator.translate(get_article_title, src=sourceLang, dest=targetLang)
title_translation_text = title_translation.text
content_translation = translator.translate(get_article_content, src=sourceLang, dest=targetLang)
content_translation_text = content_translation.text
random_image_list = random.choice(image_list)
WP_url = wpBaseURL + "/wp-json/wp/v2/posts"
auth = HTTPBasicAuth(<USERNAME>, <PASSWORD>)
headers = {
"Accept": "application/json",
"Content-Type": "application/json"
}
payload = json.dumps({
"status":postStatus,
"title": title_translation_text,
"content": content_translation_text,
"featured_media": random_image_list
})
response = requests.request(
"POST",
WP_url,
data=payload,
headers=headers,
auth=auth
)
print(response)
print(random_image_list)
post_creator("https://jsonplaceholder.typicode.com/posts/5", "<BASE_URL>", "la", "en", "publish")
我们将把它分解成单个部分,然后一步一步地看看我们需要做什么。
在此之前,我们需要转到我们的 WordPress 网站的仪表板,并创建一个新的应用程序密码。在将帖子推送到我们的网站时,我们将使用它来构建基本身份验证。
如果你以前从未这样做过,你可以查看 WordPress 官方文档以了解如何操作。创建它后,你将看到如下内容:
不要忘记保存它,这是获得它的唯一机会!
编程时间
让我们开始从我们需要的库中检查代码。我们将使用 googletrans 库通过 Google 翻译 API 翻译内容。所以,从命令行,我移动到我的项目目录并输入:
pip install googletrans
你可能会在运行脚本时遇到此错误:
AttributeError: 'NoneType' object has no attribute 'group'
如果你看到此错误消息,则应安装此版本:
pip install googletrans==4.0.0-rc1
我在这篇 StackOverflow 文章中找到了它。如果你想了解更多信息,请看一下。
如何翻译内容
安装 googletrans 后,我们定义一个新函数并将其命名为 “post_creator”:
def post_creator(sourceURL, wpBaseURL, sourceLang, targetLang, postStatus):
我们向这个函数传递五个参数:
sourceURL
:你从中获取内容的网站的 URLwpBaseURL
:你要导入翻译内容的新网站的 URLsourceLang
:内容的原始语言targetLang
:你希望将内容翻译成的语言postStatus
:你的 WordPress 帖子的状态:例如“草稿”、“已发布”等。
在函数内部,我们声明了六个变量。让我们看看它们。
我们使用 GET
方法调用 API 来获取要翻译的内容:
response_API = requests.get(sourceURL)
然后我们将请求的文本存储在 data
变量中:
data = response_API.text
我们使用 .loads()
方法解析 JSON 以将其转换为 Python 字典:
parse_json = json.loads(data)
然后我们存储 JSON 键 title
的值:
get_article_title = parse_json['title']
我们对 body
键做同样的事情:
get_article_content = parse_json['body']
最后,我们将一个列表存储在一个变量中,其中有我们想要用作“特色图像(featured image)”的媒体的 ID:
image_list = ["1689","1594","1612"]
在创建了上述变量之后,我们实例化了 Translator():
translator = Translator()
现在我们可以开始翻译内容了。我们翻译从之前的 API 调用中获得的文章标题,并将其存储在 title_translation
变量中。然后我们获取它的文本并将其存储在 title_translation_text
变量中:
title_translation = translator.translate(get_article_title, src=sourceLang, dest=targetLang)
title_translation_text = title_translation.text
我们对文章内容做同样的事情:
content_translation = translator.translate(get_article_content, src=sourceLang, dest=targetLang)
content_translation_text = content_translation.text
我们从之前创建的图像 ID 列表中获取随机图像。图像必须已经在我们的 WordPress 实例中可用。然后我们只通过指定它的 ID 来选择一个:
random_image_list = random.choice(image_list)
如何创建我们的 WordPress 博客文章
现在我们进行设置以将我们拥有的内容推送到 WordPress 网站。首先,我们将调用的 URL 存储在一个变量中以推送内容:
WP_url = wpBaseUrl + "/wp-json/wp/v2/posts"
我们将基本身份验证的凭据存储在一个变量中:我们之前创建的用户名和应用程序密码。使用 “HTTPBasicAuth” 来处理我们的身份验证:
auth = HTTPBasicAuth(<USERNAME>, <PASSWORD>)
我们将要传递的标头存储在一个变量中。我们将输出类型设置为 JSON,并指明请求正文格式为 JSON:
headers = {
"Accept": "application/json",
"Content-Type": "application/json"
}
是时候定义有效载荷了。我们使用 dumps()
函数将我们创建的 Python 对象转换为 JSON 字符串,然后传递创建博客文章所需的数据:
payload = json.dumps({
"status":postStatus,
"title": title_translation_text,
"content": content_translation_text,
"featured_media": random_image_list
})
然后我们使用 request()
方法进行 API 调用:
response = requests.request(
"POST",
WP_url,
data=payload,
headers=headers,
auth=auth
)
在函数结束时,我们打印 POST 调用的响应以及我们将用作特色图像的媒体 ID:
print(response)
print(random_image_list)
完成函数了,是时候调用它并传递正确的参数了:
post_creator("https://jsonplaceholder.typicode.com/posts/5", <BASEURL>, "la", "en", "publish")
https://jsonplaceholder.typicode.com/posts/5
:我们调用来获取要翻译的内容的 URL<BASEURL>
:我们 WordPress 网站的基本 URLla
:从 API 调用中获得的内容的语言代码。在这个例子中,它是 “Lorem Ipsum” 内容,因此我们将其设置为拉丁文en
:要将内容翻译成的语言代码,我们将其设置为英语publish
:我们正在创建的 WordPress 帖子的状态
如果我们通过命令行运行脚本,会看到以下消息:
<Response [201]>
1594
如果你访问这个网站,你可以看到该帖子:
为了给你一个完整的概述,这是我们从中获取内容的 JSON:
小结
在本文中,我们了解了如何使用 Python 用几行代码自动发布帖子。它可以用作批处理或在必要时运行。
管理网站时,内容始终是关键点。我希望这篇文章能帮助你快速翻译内容并更快地扩大你的受众。你可以在 GitHub 上查看仓库。
祝你编程愉快!