Как использовать Python для создания записи в WordPress?
10 февр. 2019 г., 09:02:02
Просмотры: 16.4K
Голосов: 0
Я нашел справочник API здесь: https://v2.wp-api.org/reference/posts/
На основе приведенного справочника API я написал этот код на Python:
from urllib.request import Request, urlopen
from datetime import datetime
import json
def create(wordpressUrl, content):
# Параметры для создания записи
params = {
'date_gmt': datetime.now().replace(microsecond=0).isoformat() + "Z",
'status': 'publish', # Статус "опубликовано"
'title': 'The Title', # Заголовок записи
'author': 'The Author', # Автор записи
'content': content # Содержание записи
}
# Преобразуем параметры в JSON
postparam = json.dumps(params).encode('utf-8')
# Создаем POST-запрос
req = Request(wordpressUrl + "/wp-json/wp/v2/posts", method='POST', data=postparam)
# Добавляем заголовок
req.add_header('Content-Type', 'application/json')
r = urlopen(req)
# Проверяем код ответа
if(r.getcode() != 200):
raise Exception("Ошибка при создании записи, код ответа=" + str(r.getcode()))
return json.loads(r.read())
Почему при вызове этого кода API WordPress возвращает страницу "О сайте" вместо создания новой записи? Как еще можно создать запись в WordPress, используя Python для вызова API WordPress?
Все ответы на вопрос
2
0
как сгенерировать
как сказал @prathamesh patil
, вы пропустили authentication
= your jwt token
как сгенерировать jwt token
?
- простой способ = основная логика
- установите и активируйте плагин WordPress: JWT Authentication for WP REST API
- включите
HTTP:Authorization
на сервере WordPress- цель: разрешить вызов API
/wp-json/jwt-auth/v1
- цель: разрешить вызов API
- добавьте
JWT_AUTH_SECRET_KEY
вwp-config.php
- вызовите
POST https://www.yourWebsite.com/wp-json/jwt-auth/v1/token
сusername
иpassword
WordPress, в ответе будет ваш ожидаемый jwt token- выглядит так:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvd3d3LmNyaWZhbi5jb20iLCJpYXQiOjE1ODQxMDk4OTAsIm5iZiI6MTU4NDEwOTg5MCwiZXhwIjoxNTg0NzE0NjkwLCJkYXRhIjp7InVzZXIiOnsiaWQiOiIxIn19fQ.YvFzitTfIZaCwtkxKTIjP715795OMAVQowgnD8G3wk0
- выглядит так:
- подробности
- пожалуйста, ознакомьтесь с моим ответом в другом посте:
Python код для вызова REST API WordPress для создания записей
код:
def createPost(self,
title,
content,
dateStr,
slug,
categoryNameList=[],
tagNameList=[],
status="draft",
postFormat="standard"
):
"""Создать стандартную запись WordPress
через вызов REST API: POST /wp-json/wp/v2/posts
Аргументы:
title (str): заголовок записи
content (str): содержимое записи в HTML
dateStr (str): строка с датой
slug (str): URL-адрес записи
categoryNameList (list): список категорий
tagNameList (list): список тегов
status (str): статус, по умолчанию 'draft'
postFormat (str): формат записи, по умолчанию 'standard'
Возвращает:
(bool, dict)
True, информация о загруженной записи
False, детали ошибки
Вызывает:
"""
curHeaders = {
"Authorization": self.authorization,
"Content-Type": "application/json",
"Accept": "application/json",
}
logging.debug("curHeaders=%s", curHeaders)
categoryIdList = []
tagIdList = []
if categoryNameList:
# ['Mac']
categoryIdList = self.getTaxonomyIdList(categoryNameList, taxonomy="category")
# category nameList=['Mac'] -> taxonomyIdList=[1374]
if tagNameList:
# ['切换', 'GPU', 'pmset', '显卡模式']
tagIdList = self.getTaxonomyIdList(tagNameList, taxonomy="post_tag")
# post_tag nameList=['切换', 'GPU', 'pmset', '显卡模式'] -> taxonomyIdList=[1367, 13224, 13225, 13226]
postDict = {
"title": title, # '【记录】Mac中用pmset设置GPU显卡切换模式'
"content": content, # '<html>\n <div>\n 折腾:\n </div>\n <div>\n 【已解决】Mac Pro 2018款发热量大很烫非常烫\n </div>\n <div>\n 期间,...performance graphic cards\n </li>\n </ul>\n </ul>\n </ul>\n <div>\n <br/>\n </div>\n</html>'
# "date_gmt": dateStr,
"date": dateStr, # '2020-08-17T10:16:34'
"slug": slug, # 'on_mac_pmset_is_used_set_gpu_graphics_card_switching_mode'
"status": status, # 'draft'
"format": postFormat, # 'standard'
"categories": categoryIdList, # [1374]
"tags": tagIdList, # [1367, 13224, 13225, 13226]
# TODO: featured_media, excerpt
}
logging.debug("postDict=%s", postDict)
# postDict={'title': '【记录】Mac中用pmset设置GPU显卡切换模式', 'content': '<html>\n <div>\n 折腾:\n </div>\n <div>\。。。。<br/>\n </div>\n</html>', 'date': '2020-08-17T10:16:34', 'slug': 'on_mac_pmset_is_used_set_gpu_graphics_card_switching_mode', 'status': 'draft', 'format': 'standard', 'categories': [1374], 'tags': [1367, 13224, 13225, 13226]}
createPostUrl = self.apiPosts
resp = requests.post(
createPostUrl,
proxies=self.requestsProxies,
headers=curHeaders,
# data=json.dumps(postDict),
json=postDict, # внутренне автоматически делает json.dumps
)
logging.info("createPostUrl=%s -> resp=%s", createPostUrl, resp)
isUploadOk, respInfo = crifanWordpress.processCommonResponse(resp)
return isUploadOk, respInfo
- полный и актуальный код смотрите:
createPost
в crifanWordpress.py

crifan
146
3 янв. 2021 г. 10:34:18
0
Думаю, вы упускаете часть, связанную с аутентификацией, проверьте это https://stackoverflow.com/questions/41532738/publish-wordpress-post-with-python-requests-and-rest-api

prathamesh patil
1
10 февр. 2019 г. 13:15:06
Похожие вопросы
1
ответов