Node服務器代理將文章自動發佈到WordPress網站

背景

公司爲了將網站生產的內容自動發佈到WordPress博客網站,但由於CORS問題,需要在服務器做代理轉發路由。一是實現前後端分離,而是方便接口統一管理。該項目提供使用Node方式的XMLRPC使用思路。

記錄

項目已發佈到 Github - zhwanng/WordPressNodeProxyServer

1、通過研究python-wordpress-xmlrpc庫及WordPress官方文檔,瞭解XMLRPC協議機制,瞭解WP網站參數傳遞與返回

from wordpress_xmlrpc import Client, WordPressPost, WordPressTerm
from wordpress_xmlrpc.methods.posts import GetPosts, NewPost
from wordpress_xmlrpc.methods.users import GetUserInfo
from wordpress_xmlrpc.methods import taxonomies
import csv
 
wp = Client('http://www.your_wordpress_domain.com/xmlrpc.php', 'wordpress_login_account', 'wordpress_login_pwd')

post = WordPressPost()
post.title = '文章標題'
post.content = '文章內容'
post.post_status = 'publish'
post.terms_names = {
  'post_tag': ['唐詩'],
  'category': ['古詩詞']
}

wp.call(NewPost(post))

2、以向WP網站發佈文章舉例

WordPress網站可通過XMLRPC方式來操作博客數據,所以需生成XML格式數據

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
	<methodName>
		wp.newPost
	</methodName>
	<params>
		<param>
			<value>
				<int>
					0
				</int>
			</value>
		</param>
		<param>
			<value>
				<string>
					WordPress網站用戶賬號
				</string>
			</value>
		</param>
		<param>
			<value>
				<string>
					WordPress網站用戶密碼
				</string>
			</value>
		</param>
		<param>
			<value>
				<struct>
					<member>
						<name>
							post_status
						</name>
						<value>
							<string>
								publish
							</string>
						</value>
					</member>
					<member>
						<name>
							post_title
						</name>
						<value>
							<string>
								文章標題
							</string>
						</value>
					</member>
					<member>
						<name>
							post_thumbnail
						</name>
						<value>
							<int>
								封面圖或者縮略圖ID
							</int>
						</value>
					</member>
					<member>
						<name>
							post_excerpt
						</name>
						<value>
							<string>
								摘要
							</string>
						</value>
					</member>
					<member>
						<name>
							post_content
						</name>
						<value>
							<string>
								<![CDATA[文章內容]]>
							</string>
						</value>
					</member>
					<member>
						<name>
							post_type
						</name>
						<value>
							<string>
								post
							</string>
						</value>
					</member>
				</struct>
			</value>
		</param>
	</params>
</methodCall>
  • 以上是基本的XML格式數據,還可自定義添加Tag、Category、Term等其他內容。
  • 此XML格式是固定的。
  • 封面圖ID是int類型,需要先上傳圖片並獲取一個ID。

3、NodeServer接口使用request庫向WP網站發送請求

關於WP網站Endpoint,一般是"域名/xmlrpc.php",其他情況官網有說明,如下
Endpoint說明

router.post('/post', function (req, res, next) {
    var domain = req.body.domain;
    var wpEndpoint = domain + "/xmlrpc.php";
    var reqBody = coverToXml(req.body);//轉換成上面第2點的XML格式數據
	request({
        url: wpEndpoint,
        method: "POST",
        headers: {
            "Accept": "*/*",
            "content-type": "text/xml",
            "User-Agent": "nodejs-xmlrpc-1.0"
        },
        body: reqBody
    }, function (error, response, body) {
       	res.send(body);// body is xml
    });
});

4、返回參數是XML格式,可通過fast-xml-parser庫解析

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
    <params>
        <param>
            <value>
                <string>1602</string>
            </value>
        </param>
    </params>
</methodResponse>

解析代碼如下

function getResArticle(resBody) {
    var xml2json = fxp.parse(resBody);//require("fast-xml-parser");
	var articleId = xml2json.methodResponse.params.param.value.string;
	return articleId;
}
*參考文檔
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章