原文: 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 官方文档以了解如何操作。创建它后,你将看到如下内容:

0-2

不要忘记保存它,这是获得它的唯一机会!

编程时间

让我们开始从我们需要的库中检查代码。我们将使用 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:你从中获取内容的网站的 URL
  • wpBaseURL:你要导入翻译内容的新网站的 URL
  • sourceLang:内容的原始语言
  • 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 网站的基本 URL
  • la:从 API 调用中获得的内容的语言代码。在这个例子中,它是 “Lorem Ipsum” 内容,因此我们将其设置为拉丁文
  • en:要将内容翻译成的语言代码,我们将其设置为英语
  • publish:我们正在创建的 WordPress 帖子的状态

如果我们通过命令行运行脚本,会看到以下消息:

<Response [201]> 
1594

如果你访问这个网站,你可以看到该帖子:

1-1

为了给你一个完整的概述,这是我们从中获取内容的 JSON:

2

小结

在本文中,我们了解了如何使用 Python 用几行代码自动发布帖子。它可以用作批处理或在必要时运行。

管理网站时,内容始终是关键点。我希望这篇文章能帮助你快速翻译内容并更快地扩大你的受众。你可以在 GitHub 上查看仓库

祝你编程愉快!