知道的人知道这是什么,不知道的也不知道这是什么

用某人的话说,这种广告词根本让人不知所云,早点开掉算了。。。
这一天,你懂的。

当然,不是我一个人。嗯其实从很久以前,我就不再读书了。所以这里讲的也不是我啦。
今天是小朋友第一天去学校,据说丈母娘一夜没睡好,老婆也是迷迷糊糊,但早上醒来后就打电话给丈母娘说送到学校后就扔在学校里,不要拖拖拉拉,否则反而小朋友会哭的。
中午的时候,老婆就电话我说小朋友几乎没哭,就哇哇两下就没事了。然后还贴了一个小五角星。
说是学校的小朋友们有几个哭的非常厉害。
晚上到家的时候问他怎么样,他说,不错;还说不要外婆带他回家了,要陆老师带他回家。暈倒。
还说,有个小朋友在哭,我们问他你怎么不叫他别哭啊。他说我在玩玩具呀,没空。然后又说,我也哭了。问怎么回事,他说,我想你们了呀。。。
总之一天就这样愉快的过去了,对学校也没有害怕。真是一件令人快乐的事情。希望他能够在学校里过的快乐吧(毕竟第一天就遇到了有人抢他玩具还掰他手指抢玩具,真TMD纠结)
其实,不久前就知道新浪微博的ID的长度发生了变化,所以,原来的无符号长整形的长度是肯定不够了,超出后就变成了科学计数法。这样的URL可是没有办法在浏览器中打开的。
但服务器上一直没有这个问题,运行了uname -a后发现是64位系统,但测试机是32位的,怎么解决这个问题呢?
检查了一下oauth的代码,发现问题出在了json_decode函数上,因为取回来的数据都是字符串,只是在经过json_decode后,数字才超出长度了。知道这个问题后就好办了。
搜索json_decode,在这上面加上一行:
$response = preg_replace('@"id":(\d+)@','"id":"\\1"',$response);
为ID强制加上引号,变成字符串,而不是int型,所以在经过json_decode后,就仍然是字符串了。NND,新浪真偷懒,全部搞成字符串不就结了?到现在还在那里折腾整形不整形的。。
所幸,问题解决了。
这是一篇很小的例子,事实上网上这些例子是超多的,不过由于我是要模拟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代码
- <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 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代码
- <?php
- $xmlrpcurl='http://blog.bluesky.cn/xmlrpc.php';
- $blogid='1';
- $username='admin';
- $password='pass';
- $postTitle='标题';
- $postContent='正文内容';
-
- require('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代码
- <?php
- include("xmlrpc.inc");
- $GLOBALS['xmlrpc_internalencoding'] = 'UTF-8';
-
- define ('DOMAIN', 'blog.bluesky.cn');
- define ('BLOGID', 1);
- define ('USER', 'admin');
- define ('PASSWORD', 'pass');
-
-
- $cl = new xmlrpc_client ( "/xmlrpc.php", DOMAIN, 80);
-
-
- $req = new xmlrpcmsg('metaWeblog.newPost');
-
- $req->addParam ( new xmlrpcval ( BLOGID, 'int'));
- $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代码
- <?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"),
- 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代码
- <?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";
- }
- ?>
原文地址:
http://blog.bluesky.cn/archives/466/using-xml-rpc-protocol-to-read-and-write-articles-on-wordpress.html