通过 XMLRPC 实现 WordPress 微信小程序发布文章
更新时间:2018-10-22 分类:小程序 浏览量:3410
准确的说,这篇内容是通过 XML-RPC 功能实现 WordPress 远程发布帖子笔记。WordPress 官方 APP 也是通过 XML-RPC 功能实现发布文章,如果禁用 XML-RPC 功能,则 WordPress APP 是无法发布文章的。所以才有了通过 XML-RPC 来实现微信小程序发布内容的实践。
之前学习 Python 爬虫的时候,学习了通过 XMLRPC 自动发布文章到 WordPress。于是,最近在折腾 WordPress 微信小程序的时候,就想着如何通过 XML-RPC 实现小程序的发布文章,免去安装 JWT 身份认证插件及授权的问题。经过一番的搜索和折腾,终于实现了免安装 JWT 插件实现小程序发帖。现在提供一下初始成果,后期有时间完善再整合至 WordPress 连接微信小程序 API 增强插件,如果有兴趣的,可以先行动手折腾一下。
内容发布代码
/*
* https://codex.wordpress.org/XML-RPC_WordPress_API/Posts
* PHP 版 XMLRPC 远程发布内容至 WordPress
* Author : 艾码汇
* HomePage : www.imahui.com
*/
function wp_post_insert( $title, $body, $category, $user, $passwd ){
$url = get_bloginfo('wpurl').'/xmlrpc.php';
$content = array(
'post_title' => $title,
'post_content' => $body,
'post_type' => 'post', // 文章类型,默认 post;
'post_status' => 'pending', // 发布状态
'post_category' => array($category) // 分类id
);
$params = array(0,$user,$passwd,$content,true);
$request = xmlrpc_encode_request("wp.newPost", $params, array('encoding' => 'UTF-8', 'escaping' => 'markup'));
$ch = curl_init();
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
$results = curl_exec($ch);
curl_close($ch);
$data = simplexml_load_string($results);
return $data;
}
图像上传代码
/*
* https://codex.wordpress.org/XML-RPC_WordPress_API/Media
* PHP 版 XMLRPC 远程发布内容至 WordPress
* Author : 艾码汇
* HomePage : www.imahui.com
*/
function wp_uploads_media( $file, $type, $user, $passwd ){
$url = get_bloginfo('wpurl').'/xmlrpc.php';
if($type == 'jpg' || $type == 'jpeg') {
$extension = 'image/jpeg';
} else if($type == 'png') {
$extension = 'image/png';
} else if($type == 'gif') {
$extension = 'image/gif';
} else {
$extension = 'text/plain';
}
$image = date("Ymdhis").'.'.$type;
$content = array(
'name'=>$image,
'type'=>$extension,
'bits'=>$file, // $file 必须是 base64 图像格式
'overwrite'=>false
);
$params = array(0,$user,$passwd,$content);
$request = xmlrpc_encode_request("wp.uploadFile", $params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
$results = curl_exec($ch);
curl_close($ch);
$data = simplexml_load_string($results);
return $data;
}