手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

转:用XML-RPC协议读写WordPress上的文章

首页 > PHP >

 这是一篇很小的例子,事实上网上这些例子是超多的,不过由于我是要模拟metaweblog或者是wordpress的一些操作,那我就必须要先了解很多相关的背景。
不过这里只是模拟一些发布和读取的接口,稍作了解即可。
原文来自:用XML-RPC协议读写WordPress上的文章我这里只简要的摘取一部分。

WordPress提供了XML-RPC接口使得第三方的博客写作软件(如windows live writer等)可以与之通信来发布和修改博客。我们也可以在网站上使用这个接口做一些工作,例如:在网站首页显示最新的博客、在博客之外的页面上发表博 客文章、把博客与其他内容管理系统结合,等等。

一、开启XML-RPC支持

XML-RPC协议默认是未开启的,需要到WordPress管理后台的“设置–>撰写”里的“远程发布”给XML-RPC打上勾。其说明文 字为:启用 WordPress,Movable Type,MetaWeblog和Blogger 的 XML-RPC发布协议。

二、获取接口的信息

我们查看博客首页的源代码,在head中可以发现类似这样的link项

XML/HTML代码
  1. <link title="RSD" rel="EditURI" type="application/rsd+xml" href="http://blog.bluesky.cn/xmlrpc.php?rsd" />  

其中的"RSD"是“Really Simple Discovery”的意思,也就是说这是一个“简单的发现博客编辑接口”的地址。我们用浏览器直接访问这个地址就可以在其返回XML中获知博客的 ID(blogID,一般这个的值是“1”)以及它所支持的接口类型和接口地址。

三、API接口选择

WordPress提供了对Blogger APImetaWeblog APIMovable Type API以及其自身的WordPress API的支持。其中WordPress API最为丰富,提供了包括操作评论文章在内的各种各样的支持。Blogger API功能较少,基本上淘汰不用了;而metaWeblog API提供了常用的接口且参数比较简洁,用得较多一些。

四、例子代码

以下是使用Incutio的XML-RPC库和Blogger API发布文章的例子,其中IXR库也是Wordpress自身所用的库,可以在“wp-includes/class-IXR.php”找到。

PHP代码
  1. <?php  
  2. $xmlrpcurl='http://blog.bluesky.cn/xmlrpc.php';  
  3. $blogid='1';  
  4. $username='admin';  
  5. $password='pass';  
  6. $postTitle='标题';  
  7. $postContent='正文内容';  
  8.    
  9. require('class-IXR.php');  // /wordpress/wp-includes/class-IXR.php  
  10. $client = new IXR_Client($xmlrpcurl);  
  11.    
  12. $params=array(  
  13.    '',  
  14.    'blog_ID'=>$blogid,  
  15.    'user_login'=>$username,  
  16.    'user_pass'=>$password,  
  17.    'post_content'=>'' . $postContent,  
  18.    'publish'=>true  
  19. );  
  20. $params=array_values($params);  
  21.    
  22. $client->query("blogger.newPost",$params);  
  23. $response=$client->getResponse();  
  24.    
  25. if ($response['faultCode']==0){  
  26.    print 'Success';  
  27. else {  
  28.    print 'Fail:' . $response['faultString'];  
  29. }  
  30. ?>  
以下是用XML-RPC for PHP库和metaWeblog接口发布文章的例子。要先下载phpxmlrpc库取出其中的xmlrpc.inc来用。
PHP代码
  1. <?php  
  2. include("xmlrpc.inc"); // 这里要改成xmlrpc.inc所在的路径  
  3. $GLOBALS['xmlrpc_internalencoding'] = 'UTF-8';  
  4.    
  5. define ('DOMAIN''blog.bluesky.cn'); // 博客的域名  
  6. define ('BLOGID', 1); // 博客ID,一般为1  
  7. define ('USER''admin'); // 博客登录的用户名  
  8. define ('PASSWORD''pass'); // 博客登录的密码  
  9.    
  10. // 创建 xml-rpc client  
  11. $cl = new xmlrpc_client ( "/xmlrpc.php", DOMAIN, 80);  
  12.    
  13. // 准备请求  
  14. $req = new xmlrpcmsg('metaWeblog.newPost');  
  15. // 逐个列出请求的参数:  
  16. $req->addParam ( new xmlrpcval ( BLOGID, 'int')); // 博客ID  
  17. $req->addParam ( new xmlrpcval ( USER, 'string' )); // 用户名  
  18. $req->addParam ( new xmlrpcval ( PASSWORD, 'string' )); // 密码  
  19. $struct = new xmlrpcval (  
  20.     array (  
  21.         "title" => new xmlrpcval ( '标题''string' ), // 标题  
  22.         "description" => new xmlrpcval ( '正文内容''string'), // 内容  
  23.     ), "struct"  
  24. );  
  25. $req->addParam ( $struct );  
  26. $req->addParam ( new xmlrpcval (1, 'int')); // 立即发布  
  27.    
  28. // 发送请求  
  29. $ans = $cl->send($req);  
  30.    
  31. var_dump ( $ans );  
  32. ?>  
注意一定要加上:$GLOBALS['xmlrpc_internalencoding'] = ‘UTF-8′;这一句,否则不能正确处理中文。 另一段也是用phpxmlrpc库和metaWeblog接口发表文章的例子代码,该代码使用了返回类型为“phpvals”,这样可以直接用返回结果 的$r->val来获取文章ID号。
PHP代码
  1. <?php  
  2.   include("xmlrpc.inc");  
  3.   $GLOBALS['xmlrpc_internalencoding'] = 'UTF-8';   
  4.    
  5.   $c = new xmlrpc_client("/xmlrpc.php""blog.bluesky.cn", 80);  
  6.   $content['title']="标题";  //标题  
  7.   $content['description']="正文内容"//内容  
  8.   $content['mt_keywords']="标签1,标签2";  //标签  
  9.   $content['wp_password']="";  //文章密码,输入后显示加密  
  10.   $content['categories'] = array("分类1","分类2"); //分类名  
  11.   $x = new xmlrpcmsg("metaWeblog.newPost",  
  12.                       array(php_xmlrpc_encode("1"), //BLOG ID  
  13.                       php_xmlrpc_encode("admin"),  //用户名  
  14.                       php_xmlrpc_encode("pass"),  //密码  
  15.                       php_xmlrpc_encode($content),  
  16.                       php_xmlrpc_encode("1")));    //立即发表  
  17.    
  18.   $c->return_type = 'phpvals';  
  19.   $r =$c->send($x);  
  20.   if ($r->errno=="0")  
  21.     echo "发表成功,文章序号为:".$r->val;  
  22.   else {  
  23.     echo "出错了";  
  24.     print_r($r);  
  25.   }  
  26. ?>  

以下是读取最新一篇文章的例子代码:

PHP代码
  1. <?php  
  2.   include("xmlrpc.inc");  
  3.   $GLOBALS['xmlrpc_internalencoding'] = 'UTF-8';  
  4.   $c = new xmlrpc_client("/xmlrpc.php""blog.bluesky.cn", 80);  
  5.    
  6.   $msg = new xmlrpcmsg('metaWeblog.getRecentPosts',  
  7.                         array(php_xmlrpc_encode("1"),  
  8.                         php_xmlrpc_encode("admin"),  
  9.                         php_xmlrpc_encode("pass"),  
  10.                         php_xmlrpc_encode("1")) );  
  11.   $res = $c->send($msg);  
  12.   $val = $res->value();  
  13.    
  14.   $val->arraymem(0)->structreset();  
  15.   while (list($key$v) = $val->arraymem(0)->structeach())  
  16.   {  
  17.     echo "Element: $key; Type: ".$v->kindOf()."; Value:".$v->scalarval()."\n";  
  18.   }  
  19. ?>  
原文地址:http://blog.bluesky.cn/archives/466/using-xml-rpc-protocol-to-read-and-write-articles-on-wordpress.html

 

 




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: wordpress, xml-rpc, metaweblog

« 上一篇 | 下一篇 »

只显示10条记录相关文章

WordPress 500错误 (浏览: 32911, 评论: 6)
利用.htaccess绑定域名到子目录 (浏览: 31038, 评论: 2)
Wordpress MYSQL数据库优化技巧 (浏览: 27904, 评论: 1)
推荐一款插件:ScribeFire (浏览: 27644, 评论: 4)
如何解决wordpress后台打开超慢的总是 (浏览: 27539, 评论: 2)
typecho 一天下来的心得 (浏览: 25453, 评论: 0)
Drupal 的钩子(Hooks) (浏览: 25348, 评论: 1)
有点意思:QQ 我的好友想到的信息架构 (浏览: 25010, 评论: 2)
用 wpToGo 在 Android 上写 WordPress 博文 (浏览: 24359, 评论: 2)
资料:WordPress的四种远程XML-RPC发布协议 (浏览: 23313, 评论: 0)

1条记录访客评论

不错支持下,再分享35本编程入门教程(ITPUX技术网的编程书籍下载地址:http://www.itpux.com/article-17-1.html ),推荐的包括HTML/CSS/JavaScript/HTML5/jQuery/PHP/ASP/Python/Android/iOS/C/LINUX等编程自学入门书籍。

Post by it技术网站 on 2015, March 8, 12:05 PM 引用此文发表评论 #1


发表评论

评论内容 (必填):