用XML-RPC协议读写WordPress上的文章
2009年09月6日WordPress提供了XML-RPC接口使得第三方的博客写作软件(如windows live writer等)可以与之通信来发布和修改博客。我们也可以在网站上使用这个接口做一些工作,例如:在网站首页显示最新的博客、在博客之外的页面上发表博客文章、把博客与其他内容管理系统结合,等等。
一、开启XML-RPC支持
XML-RPC协议默认是未开启的,需要到WordPress管理后台的“设置-->撰写”里的“远程发布”给XML-RPC打上勾。其说明文字为:启用 WordPress,Movable Type,MetaWeblog和Blogger 的 XML-RPC发布协议。
二、获取接口的信息
我们查看博客首页的源代码,在head中可以发现类似这样的link项
<link title="RSD" href="http://blog.bluesky.cn/xmlrpc.php?rsd" type="application/rsd+xml" rel="EditURI" />
其中的"RSD"是“Really Simple Discovery”的意思,也就是说这是一个“简单的发现博客编辑接口”的地址。我们用浏览器直接访问这个地址就可以在其返回XML中获知博客的ID(blogID,一般这个的值是“1”)以及它所支持的接口类型和接口地址。
三、API接口选择
WordPress提供了对Blogger API、metaWeblog API、Movable Type API以及其自身的WordPress API的支持。其中WordPress API最为丰富,提供了包括操作评论文章在内的各种各样的支持。Blogger API功能较少,基本上淘汰不用了;而metaWeblog API提供了常用的接口且参数比较简洁,用得较多一些。
四、例子代码
以下是使用Incutio的XML-RPC库和Blogger API发布文章的例子,其中IXR库也是Wordpress自身所用的库,可以在“wp-includes/class-IXR.php”找到。
<?php
$xmlrpcurl='http://blog.bluesky.cn/xmlrpc.php';
$blogid='1';
$username='admin';
$password='pass';
$postTitle='标题';
$postContent='正文内容';
require('class-IXR.php'); // /wordpress/wp-includes/class-IXR.php
$client = new IXR_Client($xmlrpcurl);
$params=array(
'',
'blog_ID'=>$blogid,
'user_login'=>$username,
'user_pass'=>$password,
'post_content'=>'' . $postContent,
'publish'=>true
);
$params=array_values($params);
$client->query("blogger.newPost",$params);
$response=$client->getResponse();
if ($response['faultCode']==0){
print 'Success';
} else {
print 'Fail:' . $response['faultString'];
}
?>
以下是用XML-RPC for PHP库和metaWeblog接口发布文章的例子。要先下载phpxmlrpc库取出其中的xmlrpc.inc来用。
<?php
include("xmlrpc.inc"); // 这里要改成xmlrpc.inc所在的路径
$GLOBALS['xmlrpc_internalencoding'] = 'UTF-8';
define ('DOMAIN', 'blog.bluesky.cn'); // 博客的域名
define ('BLOGID', 1); // 博客ID,一般为1
define ('USER', 'admin'); // 博客登录的用户名
define ('PASSWORD', 'pass'); // 博客登录的密码
// 创建 xml-rpc client
$cl = new xmlrpc_client ( "/xmlrpc.php", DOMAIN, 80);
// 准备请求
$req = new xmlrpcmsg('metaWeblog.newPost');
// 逐个列出请求的参数:
$req->addParam ( new xmlrpcval ( BLOGID, 'int')); // 博客ID
$req->addParam ( new xmlrpcval ( USER, 'string' )); // 用户名
$req->addParam ( new xmlrpcval ( PASSWORD, 'string' )); // 密码
$struct = new xmlrpcval (
array (
"title" => new xmlrpcval ( '标题', 'string' ), // 标题
"description" => new xmlrpcval ( '正文内容', 'string'), // 内容
), "struct"
);
$req->addParam ( $struct );
$req->addParam ( new xmlrpcval (1, 'int')); // 立即发布
// 发送请求
$ans = $cl->send($req);
var_dump ( $ans );
?>
注意一定要加上:$GLOBALS['xmlrpc_internalencoding'] = 'UTF-8';这一句,否则不能正确处理中文。
另一段也是用phpxmlrpc库和metaWeblog接口发表文章的例子代码,该代码使用了返回类型为“phpvals”,这样可以直接用返回结果的$r->val来获取文章ID号。
<?php
include("xmlrpc.inc");
$GLOBALS['xmlrpc_internalencoding'] = 'UTF-8';
$c = new xmlrpc_client("/xmlrpc.php", "blog.bluesky.cn", 80);
$content['title']="标题"; //标题
$content['description']="正文内容"; //内容
$content['mt_keywords']="标签1,标签2"; //标签
$content['wp_password']=""; //文章密码,输入后显示加密
$content['categories'] = array("分类1","分类2"); //分类名
$x = new xmlrpcmsg("metaWeblog.newPost",
array(php_xmlrpc_encode("1"), //BLOG ID
php_xmlrpc_encode("admin"), //用户名
php_xmlrpc_encode("pass"), //密码
php_xmlrpc_encode($content),
php_xmlrpc_encode("1"))); //立即发表
$c->return_type = 'phpvals';
$r =$c->send($x);
if ($r->errno=="0")
echo "发表成功,文章序号为:".$r->val;
else {
echo "出错了";
print_r($r);
}
?>
以下是读取最新一篇文章的例子代码:
<?php
include("xmlrpc.inc");
$GLOBALS['xmlrpc_internalencoding'] = 'UTF-8';
$c = new xmlrpc_client("/xmlrpc.php", "blog.bluesky.cn", 80);
$msg = new xmlrpcmsg('metaWeblog.getRecentPosts',
array(php_xmlrpc_encode("1"),
php_xmlrpc_encode("admin"),
php_xmlrpc_encode("pass"),
php_xmlrpc_encode("1")) );
$res = $c->send($msg);
$val = $res->value();
$val->arraymem(0)->structreset();
while (list($key, $v) = $val->arraymem(0)->structeach())
{
echo "Element: $key; Type: ".$v->kindOf()."; Value:".$v->scalarval()."\n";
}
?>
[...] 用XML-RPC协议读写WordPress上的文章 分类: php 标签: 评论 (0) Trackbacks (0) 发表评论 Trackback [...]
好文章,支持
[...] 用XML-RPC协议读写WordPress上的文章 [...]
[...] 原文地址:http://blog.bluesky.cn/archives/466/using-xml-rpc-protocol-to-read-and-write-articles-on-wordpress.h... 发布于 2010-02-22 1:17 下午 | 分类: php, wordpress | 标签: php, xmlrpc | 查看:1 次 订阅 | 引用通知 | 我要说话 | Windows隐藏命令行窗口启动进程,让进程在后台运行PHP CLI模式开发解决Apache目录浏览乱码问题PHP中的CHECKBOXPHP类(Class)入门教程PHP5中初次使用phplib小记HOOK的根源HOOK的发展Limesurvey 1.85+ 统计模块pChart中文乱码问题解决php中搜集了几个常用函数 « 利用HDDErase 擦写重置Intel SSD,解决长期使用性能下降问题 var blogurl="http://ict.tigerrr.cn"; var needemail="1"; var nowurl="484"; var md5 = "07e2237ecad93446fd9f126ed92a11ff"; [...]
[...] 相依黄昏Using Nginx As Reverse-Proxy Server On High-Loaded Sites « Alexey Kovyrin’s BlogShark UI » Linux/UbuntuCGI入门MYSQL高性能优化.pdf CSDN 下载频道启动QQWeb输入法算法之家 收集整理算法相关资源 – Powered by SupeSite【精品推荐】:Linux命令大集合[分类整理] – LinuxSir.Org【shell脚本欣赏区】:[展示你的作品的好去处!欢迎投帖] – LinuxSir.OrgLinux系统急救工具箱:SystemRescueCD| OwnLinux.cn通用线程 — sed 实例,第 3 部分公正:该如何做是好?第1讲【哈佛大学最受新生喜爱公共课】 – 视频 – 优酷视频 – 在线观看Vi`blog · 唯音 » linux使用Msmtp mutt shell自动发邮件(备份mysql)SED单行脚本快速参考[同时包含awk实现] – iTech’s Blog – 博客园Paris 26 Gigapixels – Interactive virtual tour of the most beautiful monuments of Parisshell基础十二篇 – Shell – ChinaUnix.netNoSQL数据库探讨之一 - 为什么要用非关系数据库? – robbin的自言自语 – JavaEye技术网站刚写了个写日记的脚本,记录一下 – LinuxSir.Org开源编程语言之Python学习专题Shell精华文章 – ChinaUnix.net本周写的“Linux服务器监控系统 ServMon V1.0”[原创] – 回忆未来[张宴] – 服务器系统架构与底层研发BothLog » Blog Archive » Ubuntu 9.10 安装TOR【shell脚本欣赏区】:[展示你的作品的好去处!欢迎投帖] – 第8页 – LinuxSir.OrgParameter Substitution$RANDOM: generate random integerTinyBox – JavaScript Popup Script编程中国 – PHP中使用XML-RPC构造Web Service简单入门Meng Yan ( 孟岩 )’s Weblog » Blog Archive » XML-RPCInfoQ: 一个技术观察者的年度展望FLEX/AIR项目开发-项目[个人]在线知识管理系统flex写的名片管理系统(AIR习作,还不完善) – 记事本…… – JavaEye技术网站AIR 制作Mini档案管理系统 – 第1页 – Adobe AIR – 艾睿论坛 – Flex论坛、Flash Builder 4、 Flex教程、Flash Catalyst、Actionscript、RIA开发交流 – Powered by bbsMaxFLEX写的名片管理系统(源代码无注释版)…… – 记事本…… – JavaEye技术网站Tim[后端技术]Ubuntu中文论坛 • 查看主题 – 硬盘安装 Ubuntu 9.04 与 XP 双系统 (含 Grub 不写入 MBR 的方法)写完“Linux服务器监控系统 ServMon V1.1”[原创] – 回忆未来[张宴] – 服务器系统架构与底层研发linux crontab 命令详解 – 方寸心间 – 博客园Complex CommandsFile and Archiving CommandsBash Shell Scripting Directory For Linux / UNIX Page 3使用ssh公钥实现ssh免密码登录_脉络印象_百度空间将PHP作为Shell脚本语言使用 – Shell – Linux教程Ubuntu中文论坛 • 查看主题 – 关于Ubuntu 10.04 Release Party和Beijing Ubuntu User Group又一次更新pxiaohai的专栏 – CSDN博客web.py 0.3 新手指南 (web.py)PHP JSON转数组 – 建站教程 – 合肥家园工作室|专业建站|建站教程Zend_Db_Table Relationships 翻译和自己的注释 | 生生不息PHP Socket 编程 – ☆ – PHP高级应用区 – PHP中文俱乐部 – Powered by Discuz!MySQL分区(Partition)功能试验2008-07-06 20:02目录_互联网是个江湖_百度空间电信3G无线上网卡 EVDO资费卡/用多少扣多少 无月租 5分卡-淘宝网Propel ORMPixelpostgdict.sh: 最简单的中文字典 — LinuxTOYDoctrine – PHP Object Relational MapperFetch Feed Subscribers from Google Reader with CURLSelectors如何编写PHP扩展 – 这就是我自己 – CSDN博客乱炖_老王的技术手册_百度空间python验证码识别之Discuz(一) | Observer专栏杂记python blog woodlog发布 – 程序源码交易 – A5论坛 bbs.admin5.com – 站长交易和服务中心InfoQ: QCon北京2010大会简要总结:博客+Twitter由MySQL中char和varchar效率想到的 – i am a dummy – CSDN博客数据库开发规范 | OracleDBA Blog—三少个人涂鸦地!Lucene学习总结之一:全文检索的基本原理 – - JavaEye技术网站Google时间复杂度的计算 – zhuchangzhi的专栏 – CSDN博客Elixir – Tracjleider’s extensible-php-caching-library at master – GitHubkla’s php-activerecord at master – GitHubPHP ActiveRecord – Quick StartHAProxy MySQL负载均衡 – 开源中国社区高可用性、负载均衡的mysql集群解决方案 — 1 – MySQL – 刘军的博客Derivante – PHP on RailsPHP实现MVC开发: 一个简单的MVC | TinowebPHP实现MVC开发得最简单的方法——单点入口 – 笨笨【贲志强】 – 博客园WordPress › iDream « Free WordPress ThemesWordPress › plaintxtBlog « Free WordPress ThemesWordPress › Core « Free WordPress ThemesUbuntu下通过SSH翻墙_空_百度空间cURL基础教程 | 标点符about:blankDashboard – Google Analytics用XML-RPC协议读写WordPress上的文章 [...]
[...] this article is created by cron 相依黄昏Using Nginx As Reverse-Proxy Server On High-Loaded Sites « Alexey Kovyrin’s BlogShark UI » Linux/UbuntuCGI入门MYSQL高性能优化.pdf CSDN 下载频道启动QQWeb输入法算法之家 收集整理算法相关资源 – Powered by SupeSite【精品推荐】:Linux命令大集合[分类整理] – LinuxSir.Org【shell脚本欣赏区】:[展示你的作品的好去处!欢迎投帖] – LinuxSir.OrgLinux系统急救工具箱:SystemRescueCD| OwnLinux.cn通用线程 — sed 实例,第 3 部分公正:该如何做是好?第1讲【哈佛大学最受新生喜爱公共课】 – 视频 – 优酷视频 – 在线观看Vi`blog · 唯音 » linux使用Msmtp mutt shell自动发邮件(备份mysql)SED单行脚本快速参考[同时包含awk实现] – iTech’s Blog – 博客园Paris 26 Gigapixels – Interactive virtual tour of the most beautiful monuments of Parisshell基础十二篇 – Shell – ChinaUnix.netNoSQL数据库探讨之一 - 为什么要用非关系数据库? – robbin的自言自语 – JavaEye技术网站刚写了个写日记的脚本,记录一下 – LinuxSir.Org开源编程语言之Python学习专题Shell精华文章 – ChinaUnix.net本周写的“Linux服务器监控系统 ServMon V1.0”[原创] – 回忆未来[张宴] – 服务器系统架构与底层研发BothLog » Blog Archive » Ubuntu 9.10 安装TOR【shell脚本欣赏区】:[展示你的作品的好去处!欢迎投帖] – 第8页 – LinuxSir.OrgParameter Substitution$RANDOM: generate random integerTinyBox – JavaScript Popup Script编程中国 – PHP中使用XML-RPC构造Web Service简单入门Meng Yan ( 孟岩 )’s Weblog » Blog Archive » XML-RPCInfoQ: 一个技术观察者的年度展望FLEX/AIR项目开发-项目[个人]在线知识管理系统flex写的名片管理系统(AIR习作,还不完善) – 记事本…… – JavaEye技术网站AIR 制作Mini档案管理系统 – 第1页 – Adobe AIR – 艾睿论坛 – Flex论坛、Flash Builder 4、 Flex教程、Flash Catalyst、Actionscript、RIA开发交流 – Powered by bbsMaxFLEX写的名片管理系统(源代码无注释版)…… – 记事本…… – JavaEye技术网站Tim[后端技术]Ubuntu中文论坛 • 查看主题 – 硬盘安装 Ubuntu 9.04 与 XP 双系统 (含 Grub 不写入 MBR 的方法)写完“Linux服务器监控系统 ServMon V1.1”[原创] – 回忆未来[张宴] – 服务器系统架构与底层研发linux crontab 命令详解 – 方寸心间 – 博客园Complex CommandsFile and Archiving CommandsBash Shell Scripting Directory For Linux / UNIX Page 3使用ssh公钥实现ssh免密码登录_脉络印象_百度空间将PHP作为Shell脚本语言使用 – Shell – Linux教程Ubuntu中文论坛 • 查看主题 – 关于Ubuntu 10.04 Release Party和Beijing Ubuntu User Group又一次更新pxiaohai的专栏 – CSDN博客web.py 0.3 新手指南 (web.py)PHP JSON转数组 – 建站教程 – 合肥家园工作室|专业建站|建站教程Zend_Db_Table Relationships 翻译和自己的注释 | 生生不息PHP Socket 编程 – ☆ – PHP高级应用区 – PHP中文俱乐部 – Powered by Discuz!MySQL分区(Partition)功能试验2008-07-06 20:02目录_互联网是个江湖_百度空间电信3G无线上网卡 EVDO资费卡/用多少扣多少 无月租 5分卡-淘宝网Propel ORMPixelpostgdict.sh: 最简单的中文字典 — LinuxTOYDoctrine – PHP Object Relational MapperFetch Feed Subscribers from Google Reader with CURLSelectors如何编写PHP扩展 – 这就是我自己 – CSDN博客乱炖_老王的技术手册_百度空间python验证码识别之Discuz(一) | Observer专栏杂记python blog woodlog发布 – 程序源码交易 – A5论坛 bbs.admin5.com – 站长交易和服务中心InfoQ: QCon北京2010大会简要总结:博客+Twitter由MySQL中char和varchar效率想到的 – i am a dummy – CSDN博客数据库开发规范 | OracleDBA Blog—三少个人涂鸦地!Lucene学习总结之一:全文检索的基本原理 – - JavaEye技术网站Google时间复杂度的计算 – zhuchangzhi的专栏 – CSDN博客Elixir – Tracjleider’s extensible-php-caching-library at master – GitHubkla’s php-activerecord at master – GitHubPHP ActiveRecord – Quick StartHAProxy MySQL负载均衡 – 开源中国社区高可用性、负载均衡的mysql集群解决方案 — 1 – MySQL – 刘军的博客Derivante – PHP on RailsPHP实现MVC开发: 一个简单的MVC | TinowebPHP实现MVC开发得最简单的方法——单点入口 – 笨笨【贲志强】 – 博客园WordPress › iDream « Free WordPress ThemesWordPress › plaintxtBlog « Free WordPress ThemesWordPress › Core « Free WordPress ThemesUbuntu下通过SSH翻墙_空_百度空间cURL基础教程 | 标点符about:blankDashboard – Google Analytics用XML-RPC协议读写WordPress上的文章 [...]
[...] this article is created by cron 相依黄昏Using Nginx As Reverse-Proxy Server On High-Loaded Sites « Alexey Kovyrin’s BlogShark UI » Linux/UbuntuCGI入门MYSQL高性能优化.pdf CSDN 下载频道启动QQWeb输入法算法之家 收集整理算法相关资源 – Powered by SupeSite【精品推荐】:Linux命令大集合[分类整理] – LinuxSir.Org【shell脚本欣赏区】:[展示你的作品的好去处!欢迎投帖] – LinuxSir.OrgLinux系统急救工具箱:SystemRescueCD| OwnLinux.cn通用线程 — sed 实例,第 3 部分公正:该如何做是好?第1讲【哈佛大学最受新生喜爱公共课】 – 视频 – 优酷视频 – 在线观看Vi`blog · 唯音 » linux使用Msmtp mutt shell自动发邮件(备份mysql)SED单行脚本快速参考[同时包含awk实现] – iTech’s Blog – 博客园Paris 26 Gigapixels – Interactive virtual tour of the most beautiful monuments of Parisshell基础十二篇 – Shell – ChinaUnix.netNoSQL数据库探讨之一 - 为什么要用非关系数据库? – robbin的自言自语 – JavaEye技术网站刚写了个写日记的脚本,记录一下 – LinuxSir.Org开源编程语言之Python学习专题Shell精华文章 – ChinaUnix.net本周写的“Linux服务器监控系统 ServMon V1.0”[原创] – 回忆未来[张宴] – 服务器系统架构与底层研发BothLog » Blog Archive » Ubuntu 9.10 安装TOR【shell脚本欣赏区】:[展示你的作品的好去处!欢迎投帖] – 第8页 – LinuxSir.OrgParameter Substitution$RANDOM: generate random integerTinyBox – JavaScript Popup Script编程中国 – PHP中使用XML-RPC构造Web Service简单入门Meng Yan ( 孟岩 )’s Weblog » Blog Archive » XML-RPCInfoQ: 一个技术观察者的年度展望FLEX/AIR项目开发-项目[个人]在线知识管理系统flex写的名片管理系统(AIR习作,还不完善) – 记事本…… – JavaEye技术网站AIR 制作Mini档案管理系统 – 第1页 – Adobe AIR – 艾睿论坛 – Flex论坛、Flash Builder 4、 Flex教程、Flash Catalyst、Actionscript、RIA开发交流 – Powered by bbsMaxFLEX写的名片管理系统(源代码无注释版)…… – 记事本…… – JavaEye技术网站Tim[后端技术]Ubuntu中文论坛 • 查看主题 – 硬盘安装 Ubuntu 9.04 与 XP 双系统 (含 Grub 不写入 MBR 的方法)写完“Linux服务器监控系统 ServMon V1.1”[原创] – 回忆未来[张宴] – 服务器系统架构与底层研发linux crontab 命令详解 – 方寸心间 – 博客园Complex CommandsFile and Archiving CommandsBash Shell Scripting Directory For Linux / UNIX Page 3使用ssh公钥实现ssh免密码登录_脉络印象_百度空间将PHP作为Shell脚本语言使用 – Shell – Linux教程Ubuntu中文论坛 • 查看主题 – 关于Ubuntu 10.04 Release Party和Beijing Ubuntu User Group又一次更新pxiaohai的专栏 – CSDN博客web.py 0.3 新手指南 (web.py)PHP JSON转数组 – 建站教程 – 合肥家园工作室|专业建站|建站教程Zend_Db_Table Relationships 翻译和自己的注释 | 生生不息PHP Socket 编程 – ☆ – PHP高级应用区 – PHP中文俱乐部 – Powered by Discuz!MySQL分区(Partition)功能试验2008-07-06 20:02目录_互联网是个江湖_百度空间电信3G无线上网卡 EVDO资费卡/用多少扣多少 无月租 5分卡-淘宝网Propel ORMPixelpostgdict.sh: 最简单的中文字典 — LinuxTOYDoctrine – PHP Object Relational MapperFetch Feed Subscribers from Google Reader with CURLSelectors如何编写PHP扩展 – 这就是我自己 – CSDN博客乱炖_老王的技术手册_百度空间python验证码识别之Discuz(一) | Observer专栏杂记python blog woodlog发布 – 程序源码交易 – A5论坛 bbs.admin5.com – 站长交易和服务中心InfoQ: QCon北京2010大会简要总结:博客+Twitter由MySQL中char和varchar效率想到的 – i am a dummy – CSDN博客数据库开发规范 | OracleDBA Blog—三少个人涂鸦地!Lucene学习总结之一:全文检索的基本原理 – - JavaEye技术网站Google时间复杂度的计算 – zhuchangzhi的专栏 – CSDN博客Elixir – Tracjleider’s extensible-php-caching-library at master – GitHubkla’s php-activerecord at master – GitHubPHP ActiveRecord – Quick StartHAProxy MySQL负载均衡 – 开源中国社区高可用性、负载均衡的mysql集群解决方案 — 1 – MySQL – 刘军的博客Derivante – PHP on RailsPHP实现MVC开发: 一个简单的MVC | TinowebPHP实现MVC开发得最简单的方法——单点入口 – 笨笨【贲志强】 – 博客园WordPress › iDream « Free WordPress ThemesWordPress › plaintxtBlog « Free WordPress ThemesWordPress › Core « Free WordPress ThemesUbuntu下通过SSH翻墙_空_百度空间cURL基础教程 | 标点符about:blankDashboard – Google Analytics用XML-RPC协议读写WordPress上的文章 [...]