首页 > 编程语言 >PHP远程操纵WordPress的方法(流程剖析)

PHP远程操纵WordPress的方法(流程剖析)

时间:2023-02-07 14:06:51浏览次数:110  
标签:metaWeblog xmlrpc blogger 剖析 mt WordPress wp post PHP


一直想写一个给wordpress群发文章的应用,这样我就能自动采集文章,然后写个脚本自动发送文章了,哈哈。虽然用python干这种事情貌似更加擅长,但是我想做个web界面访问该应用,而python的虚拟主机现在还好少(至少PHP真的很容易有),于是拿起老本行,用PHP来搞定。

学PHP也已经有很长时间,从原来的纯手工编写,到后来的网上找类库自己整合,再到如今的直接使用框架。我再也不愿意从头开始写程序,现成的框架有大量的优秀代码,拿来用能实现目标何乐而不为,之前也用过zend、thinkphp、codeigniter,前两者其实都不错,但是现在我还是很偏爱codeigniter,就因为它强大的在线文档。


我使用的是CI(codeigniter)的“XML-RPC 和 XML-RPC 服务器类”,以下代码实现了将服务器wordpress站点的标签信息获取下来打印:



public                   function                   index         (         )         {

//加载CI的xmlrpc类库

$ this -> load -> library ( 'xmlrpc' ) ;

//设定远程的XMLRPC.php文件的地址

$ this -> xmlrpc -> server ( 'http://jobrule.sinaapp.com/xmlrpc.php' ) ;

/*

* 设定需要操作的方法,该字符串,可以在wordpress服务器上

* 的/wp-includes/class-wp-xmlrpc-server.php里面找到

*/

$ this -> xmlrpc -> method ( 'wp.getTags' ) ;

/*

* 设定请求参数,可以直接去看class-wp-xmlrpc-server.php的源代码,

* 其中第0个是id,第一个和第二个是用户名密码

*/

$ request = array ( '' , 'admin' , '123456789' ) ;

//将参数设定到请求里面,这时候还没有发送请求

$ this -> xmlrpc -> request ( $ request ) ;

//发送请求

if ( ! $ this -> xmlrpc -> send_request ( ) ) {

echo $ this -> xmlrpc -> display_error ( ) ;

}

//打印结果看一看

echo "<pre>" ;

print_r ( $ this -> xmlrpc -> display_response ( ) ) ;

echo "</pre>" ;

//$this->load->view('welcome_message');

}



 

CI的官方文档列出了xmlrpc类的API:

  • $this->xmlrpc->server():设定发送请求的服务器URL和端口号
  • $this->xmlrpc->timeout():设定一个发送请求的响应时间
  • $this->xmlrpc->method():设定请求的服务方法字符串(重要)
  • $this->xmlrpc->request():绑定发送请求的数据参数,并不发送请求
  • $this->xmlrpc->send_request():发送请求
  • $this->xmlrpc->display_error():打印错误信息
  • $this->xmlrpc->display_response():打印返回的响应信息
  • $this->xmlrpc->set_debug(TRUE):开发过程中打印一些调试信息

关键在于$this->xmlrpc->method(),该接口设定向服务器发送什么样的请求。下载一个wordpress源码,打开\wp-includes\class-wp-xmlrpc-server.php文件,可以看到所有的我们能够调用的服务:



// WordPress API

'wp.getUsersBlogs' = > 'this:wp_getUsersBlogs' ,

'wp.newPost' = > 'this:wp_newPost' ,

'wp.editPost' = > 'this:wp_editPost' ,

'wp.deletePost' = > 'this:wp_deletePost' ,

'wp.getPost' = > 'this:wp_getPost' ,

'wp.getPosts' = > 'this:wp_getPosts' ,

'wp.newTerm' = > 'this:wp_newTerm' ,

'wp.editTerm' = > 'this:wp_editTerm' ,

'wp.deleteTerm' = > 'this:wp_deleteTerm' ,

'wp.getTerm' = > 'this:wp_getTerm' ,

'wp.getTerms' = > 'this:wp_getTerms' ,

'wp.getTaxonomy' = > 'this:wp_getTaxonomy' ,

'wp.getTaxonomies' = > 'this:wp_getTaxonomies' ,

'wp.getPage' = > 'this:wp_getPage' ,

'wp.getPages' = > 'this:wp_getPages' ,

'wp.newPage' = > 'this:wp_newPage' ,

'wp.deletePage' = > 'this:wp_deletePage' ,

'wp.editPage' = > 'this:wp_editPage' ,

'wp.getPageList' = > 'this:wp_getPageList' ,

'wp.getAuthors' = > 'this:wp_getAuthors' ,

'wp.getCategories' = > 'this:mw_getCategories' , // Alias

'wp.getTags' = > 'this:wp_getTags' ,

'wp.newCategory' = > 'this:wp_newCategory' ,

'wp.deleteCategory' = > 'this:wp_deleteCategory' ,

'wp.suggestCategories' = > 'this:wp_suggestCategories' ,

'wp.uploadFile' = > 'this:mw_newMediaObject' , // Alias

'wp.getCommentCount' = > 'this:wp_getCommentCount' ,

'wp.getPostStatusList' = > 'this:wp_getPostStatusList' ,

'wp.getPageStatusList' = > 'this:wp_getPageStatusList' ,

'wp.getPageTemplates' = > 'this:wp_getPageTemplates' ,

'wp.getOptions' = > 'this:wp_getOptions' ,

'wp.setOptions' = > 'this:wp_setOptions' ,

'wp.getComment' = > 'this:wp_getComment' ,

'wp.getComments' = > 'this:wp_getComments' ,

'wp.deleteComment' = > 'this:wp_deleteComment' ,

'wp.editComment' = > 'this:wp_editComment' ,

'wp.newComment' = > 'this:wp_newComment' ,

'wp.getCommentStatusList' = > 'this:wp_getCommentStatusList' ,

'wp.getMediaItem' = > 'this:wp_getMediaItem' ,

'wp.getMediaLibrary' = > 'this:wp_getMediaLibrary' ,

'wp.getPostFormats' = > 'this:wp_getPostFormats' ,

'wp.getPostType' = > 'this:wp_getPostType' ,

'wp.getPostTypes' = > 'this:wp_getPostTypes' ,



// Blogger API

'blogger.getUsersBlogs' = > 'this:blogger_getUsersBlogs' ,

'blogger.getUserInfo' = > 'this:blogger_getUserInfo' ,

'blogger.getPost' = > 'this:blogger_getPost' ,

'blogger.getRecentPosts' = > 'this:blogger_getRecentPosts' ,

'blogger.getTemplate' = > 'this:blogger_getTemplate' ,

'blogger.setTemplate' = > 'this:blogger_setTemplate' ,

'blogger.newPost' = > 'this:blogger_newPost' ,

'blogger.editPost' = > 'this:blogger_editPost' ,

'blogger.deletePost' = > 'this:blogger_deletePost' ,



// MetaWeblog API (with MT extensions to structs)

'metaWeblog.newPost' = > 'this:mw_newPost' ,

'metaWeblog.editPost' = > 'this:mw_editPost' ,

'metaWeblog.getPost' = > 'this:mw_getPost' ,

'metaWeblog.getRecentPosts' = > 'this:mw_getRecentPosts' ,

'metaWeblog.getCategories' = > 'this:mw_getCategories' ,

'metaWeblog.newMediaObject' = > 'this:mw_newMediaObject' ,



// MetaWeblog API aliases for Blogger API

// see http://www.xmlrpc.com/stories/storyReader$2460

'metaWeblog.deletePost' = > 'this:blogger_deletePost' ,

'metaWeblog.getTemplate' = > 'this:blogger_getTemplate' ,

'metaWeblog.setTemplate' = > 'this:blogger_setTemplate' ,

'metaWeblog.getUsersBlogs' = > 'this:blogger_getUsersBlogs' ,



// MovableType API

'mt.getCategoryList' = > 'this:mt_getCategoryList' ,

'mt.getRecentPostTitles' = > 'this:mt_getRecentPostTitles' ,

'mt.getPostCategories' = > 'this:mt_getPostCategories' ,

'mt.setPostCategories' = > 'this:mt_setPostCategories' ,

'mt.supportedMethods' = > 'this:mt_supportedMethods' ,

'mt.supportedTextFilters' = > 'this:mt_supportedTextFilters' ,

'mt.getTrackbackPings' = > 'this:mt_getTrackbackPings' ,

'mt.publishPost' = > 'this:mt_publishPost' ,



// PingBack

'pingback.ping' = > 'this:pingback_ping' ,

'pingback.extensions.getPingbacks' = > 'this:pingback_extensions_getPingbacks' ,



'demo.sayHello' = > 'this:sayHello' ,

'demo.addTwoNumbers' = > 'this:addTwoNumbers'



 

根据方法名字,很容易知道是什么意思。要知道某一个方法需要发送什么参数,直接找到该方法,方法的注释可以看出需要什么参数,比如发送文章的newpost方法,根据注释知道需要如下参数:


/**

* Create a new post for any registered post type.

*

* @since 3.4.0

*

* @param array $args Method parameters. Contains:

* - int $blog_id

* - string $username

* - string $password

* - array $content_struct

* $content_struct can contain:

* - post_type (default: 'post')

* - post_status (default: 'draft')

* - post_title

* - post_author

* - post_exerpt

* - post_content

* - post_date_gmt | post_date

* - post_format

* - post_password

* - comment_status - can be 'open' | 'closed'

* - ping_status - can be 'open' | 'closed'

* - sticky

* - post_thumbnail - ID of a media item to use as the post thumbnail/featured image

* - custom_fields - array, with each element containing 'key' and 'value'

* - terms - array, with taxonomy names as keys and arrays of term IDs as values

* - terms_names - array, with taxonomy names as keys and arrays of term names as values

* - enclosure

* - any other fields supported by wp_insert_post()

* @return string post_id

*/



 

至此PHP远程操作wordpress的基本流程已经非常清晰,本文使用的是CI的xmlrpc类,网友可以自己网上随便找个开源类代替,他们的接口肯定大同小异。关键是弄懂了服务端提供了什么服务,直接调用就好了。

标签:metaWeblog,xmlrpc,blogger,剖析,mt,WordPress,wp,post,PHP
From: https://blog.51cto.com/peishuai/6042035

相关文章

  • 国外10个非常有趣的PHP博客
    ​​DavidWalshblog​​​​​​DavidWalsh是一个非常有经验的PHP开发者,他参与了很多大型的项目。在他的博客中你能发现几乎每天的对PHP开发的建议。​​Roshan’sblog......
  • PHP数组使用、特性、函数的总结
    包含其他数组的数组成为多维数组关联数组(即非数字索引数组)使用更有意义的数据作为数组的索引1、数组索引数组$products = array(‘a’, ‘b’, ‘c’);//就像一个......
  • 新浪微博的mid转换成base62格式的PHP函数
    最近有用到将新浪微博的mid地址转换成短格式编码的方法,例如:221110410216147026转换后:zF4mOFpN7A比如新浪微博地址可以组装成这样:​​http://weibo.com/1642634100/5en0UftjV......
  • PHP的验证码实现(w3schools推荐)
    本文使用PHP一些可用的特性实现了验证码功能。该教程非常的简单,使用可以改变的字体生成了验证码图片,正如我们所了解的,验证码是用于避免垃圾评论或者自动提交的。本验证码程......
  • PHP中文乱码解决
    网上转载的,但是代码不完全,补充了下,再发通过把Content-Type设置为application/octet-stream,可以把动态生成的内容当作文件来下载,相信这个大家都会。那么用Content-Disp......
  • PHP安全笔记
    1、          MagicQuotes选项PHP.INI中中有三个以magic_quotes_开头的选项magic_quotes_gpc如果是On的话,就会自动用‘\’转义从GET,POST,COOKIE来的数据,这是为......
  • 17个非常有用的PHP类和库
    本文转自互联网。在我们日常程序开发当中,使用一个好的而且成熟的PHP类,可以减少很多手工编码,通过这些通用API的使用,可以大大减轻我们的开发工作。今天,我们将重点介绍了一些很......
  • PHP字符串函数、知识要点总结
    主要包括以下方面:字符串的格式化字符串的连接与分割字符串的比较使用字符串函数匹配和替换子字符串使用正则表达式(下一篇文章专门总结)1、字符串的格式化:chop(rtrim)、ltrim......
  • 数据采集必备知识-php计划任务的实现
    站点如果做的多了,难免要发些伪原创的文章,文章的来源必然来源于网络采集,对于采集这里不详述,我自己用的是”SimpleHTMLDOM”,见我另一篇关于他的介绍:​​数据采集利器-PHP用......
  • PHP获取IP的多种方式解析
    PHP获取IP的方法有许多种,我们今天向大家总结了六种方法,希望通过对这六种方法的学习,能够加深我们对PHP语言的进一步了解,巩固我们所掌握的知识。PHP获取IP方法一:<?phpecho"<......