Cum să folosești Python pentru a crea un Post în Wordpress?
10 feb. 2019, 09:02:02
Vizualizări: 16.4K
Voturi: 0
Am găsit referința API aici: https://v2.wp-api.org/reference/posts/
Pe baza referinței API de mai sus, am scris acest cod 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
}
postparam = json.dumps(params).encode('utf-8')
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("failed with rc=" + r.getcode())
return json.loads(r.read())
De ce, la apelarea acestui cod, API-ul Wordpress returnează pagina About a site-ului, în loc să creeze un Post nou? Cum altfel pot crea un Post în Wordpress, folosind Python pentru a apela API-ul WP?
Toate răspunsurile la întrebare
2
0
cum se generează
așa cum spune @prathamesh patil
, ai omis authentication
= your jwt token
cum se generează jwt token
?
- simplu = logică de bază
- instalează și activează pluginul WordPress: JWT Authentication for WP REST API
- asigură-te că serverul WordPress are activat
HTTP:Authorization
- scop: permite apelarea API-ului
/wp-json/jwt-auth/v1
- scop: permite apelarea API-ului
- adaugă
JWT_AUTH_SECRET_KEY
înwp-config.php
- apelează
POST https://www.yourWebsite.com/wp-json/jwt-auth/v1/token
cuusername
șipassword
WordPress, răspunsul va conține jwt token dorit- arătând ca:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvd3d3LmNyaWZhbi5jb20iLCJpYXQiOjE1ODQxMDk4OTAsIm5iZiI6MTU4NDEwOTg5MCwiZXhwIjoxNTg0NzE0NjkwLCJkYXRhIjp7InVzZXIiOnsiaWQiOiIxIn19fQ.YvFzitTfIZaCwtkxKTIjP715795OMAVQowgnD8G3wk0
- arătând ca:
- detalii
- te rog să consulți răspunsul meu pentru altă postare:
cod Python pentru apelarea API-ului REST WordPress pentru crearea postărilor
cod:
def createPost(self,
title,
content,
dateStr,
slug,
categoryNameList=[],
tagNameList=[],
status="draft",
postFormat="standard"
):
"""Creează o postare standard WordPress
prin apelarea API-ului REST: POST /wp-json/wp/v2/posts
Args:
title (str): titlul postării
content (str): conținutul postării în HTML
dateStr (str): șir de caractere reprezentând data
slug (str): URL-ul postării
categoryNameList (list): lista de nume de categorii
tagNameList (list): lista de nume de tag-uri
status (str): status, implicit 'draft'
postFormat (str): formatul postării, implicit 'standard'
Returns:
(bool, dict)
True, informații despre postarea încărcată
False, detalii despre eroare
Raises:
"""
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")
# lista nume categorii=['Mac'] -> lista ID-uri taxonomie=[1374]
if tagNameList:
# ['切换', 'GPU', 'pmset', '显卡模式']
tagIdList = self.getTaxonomyIdList(tagNameList, taxonomy="post_tag")
# lista nume tag-uri=['切换', 'GPU', 'pmset', '显卡模式'] -> lista ID-uri taxonomie=[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, # face automat json.dumps intern
)
logging.info("createPostUrl=%s -> resp=%s", createPostUrl, resp)
isUploadOk, respInfo = crifanWordpress.processCommonResponse(resp)
return isUploadOk, respInfo
- codul complet și actualizat poate fi găsit:
createPost
în crifanWordpress.py

crifan
146
3 ian. 2021 10:34:18
0
Cred că ai ratat partea de autentificare, verifică această https://stackoverflow.com/questions/41532738/publish-wordpress-post-with-python-requests-and-rest-api

prathamesh patil
1
10 feb. 2019 13:15:06
Întrebări similare
3
răspunsuri
1
răspunsuri
6
răspunsuri