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;
}
*参考文档
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值