`
lovecontry
  • 浏览: 1036576 次
文章分类
社区版块
存档分类
最新评论

[技术学习] CPAN::WordPress:XMLRPC折腾记录

 
阅读更多
<!-- body { color: #000; background-color: #fff; margin: 0px 10%; min-width: 720px; font-family: Verdana, sans-serif; counter-reset: chapter section subsection subsubsection paragraph lchapter lsection lsubsection lsubsubsection lparagraph} div.footnote { border-left: 1px solid #000; margin-left: 0em; clear: both } div.ftext { position: relative; margin-left: 50px } div.fnumber { float: left; width: 40px; padding: 0em; margin-left: 0.5em; margin-top: 0em } div.fnumber a { margin: 0px; padding: 0px } div.ctext { position: relative; margin-left: 100px } div.cnumber { float: left; width: 90px; padding: 0em; margin-left: 0.5em; margin-top: 0em } div.cnumber a { margin: 0px; padding: 0px } div.tip { border: 2px solid #0d0; margin: 0.5em 2em 1em 2em; padding: 0em 1em } div.warning, div.caution, div.danger, div.error { border: 2px solid #f00; margin: 0.5em 2em 1em 2em; padding: 0em 1em } div.note, div.hint, div.important { border: 2px solid #000; margin: 0.5em 2em 1em 2em; padding: 0em 1em } div.figure { display: block; padding: 1em; width: 400px; clear: both} div.topic { margin: 2em } div.vstsidebar, div.sidebar { border: 2px solid #aaa; color: #000; background-color: #ffffee; float: right; width: 40%; margin-left: 1em; margin-right: -1em; padding: 1em } span.strike { text-decoration: line-through } span.big { font-size: large } span.small { font-size: small } span.title { font-style: italic } span.notetitle { font-size: large; font-weight: 900; font-family: Verdana, sans-serif } p.toc { font-size: large; font-weight: 900 } p.notesubtitle { font-weight: 900; font-family: Verdana, sans-serif } p.attribution { font-style: italic; margin-left: 8em; text-indent: -1.4em } .vstright { float: right; margin: 1em } .vstleft { float: left; margin: 1em } .vstcenter { margin: 1em auto } blockquote.pull { font-size: large } p.rubric { font-size: large; margin-left: 2em } dd.normal { margin-bottom: 0.5em } dt.option { float: left; margin: 0em 0em 5px 2em; padding: 0px; font-family: monospace } dd.option { padding: 0px; margin: 0em 0em 5px 10em; text-indent: 0.5em } dd.option > p { margin: 0px } dd.normal > p { margin: 0px } table { border-collapse: collapse; margin: 0.5em 0em } thead, tfoot { text-align: center; font-weight: bold } td { border: 1px solid #000; padding: 0.25em; _top: 0%; vertical-align: top } td blockquote p{ margin: 0px; padding: 0px} td blockquote { margin: 0px; padding: 0px} table.vstbless td { border: 0px solid #000; padding: 0.25em; _top: 0%; vertical-align: top } td > p { margin: 0px } table.field { border: 0px solid #000; margin-left: 2em; padding: 0.25em; _top: 0%; vertical-align: top } td.fkey { font-weight: 900 } td.fval { border: 0px solid #000; padding: 0.25em; _top: 0%; vertical-align: top } td.fkey { font-weight: 900; border: 0px solid #000; padding: 0.25em; _top: 0%; vertical-align: top } td.fdkey { text-align: center; font-weight: 900 } td.fdval { text-align: center; font-style: italic } td.fakey { text-align: center; font-weight: 900 } td.faval { border: 0px solid #000; padding: 0.25em; _top: 0%; vertical-align: top } hr { width: 80%; margin: 1.5em auto } h1 { text-align: center; clear: both } h2, h3, h4, h5, h6 { text-align: left; margin-top: 1em; clear: both } h2 { counter-reset: section subsection subsubsection paragraph } h3 { counter-reset: subsection subsubsection paragraph } h4 { counter-reset: subsubsection paragraph } h5 { counter-reset: paragraph } h1 a { color: #000; background-color: transparent } h2 a { color: #000; background-color: transparent } h3 a { color: #000; background-color: transparent } h4 a { color: #000; background-color: transparent } h5 a { color: #000; background-color: transparent } h6 a { color: #000; background-color: transparent } p.subh1 { text-align: center; font-size: 120%; font-variant: small-caps } p.subh2, p.subh3, p.subh4, p.subh5, p.subh6 { text-align: left; font-size: 120%; font-variant: small-caps } h2:before { content: counter(chapter)" "; counter-increment: chapter } h3:before { content: counter(chapter)"."counter(section)" "; counter-increment: section } h4:before { content: counter(chapter)"."counter(section)"."counter(subsection)" "; counter-increment: subsection } h5:before { content: counter(chapter)"."counter(section)"."counter(subsection)"."counter(subsubsection)" "; counter-increment: subsubsection } h6:before { content: counter(chapter)"."counter(section)"."counter(subsection)"."counter(subsubsection)"."counter(paragraph)" "; counter-increment: paragraph} li.h1 { margin-left: 0em } li.h2 { margin-left: 1em; counter-reset: lsection lsubsection lsubsubsection lparagraph } li.h3 { margin-left: 2em; counter-reset: lsubsection lsubsubsection lparagraph } li.h4 { margin-left: 3em; counter-reset: lsubsubsection lparagraph } li.h5 { margin-left: 4em; counter-reset: lparagraph } li.h2:before { content: counter(lchapter)" "; counter-increment: lchapter } li.h3:before { content: counter(lchapter)"."counter(lsection)" "; counter-increment: lsection } li.h4:before { content: counter(lchapter)"."counter(lsection)"."counter(lsubsection)" "; counter-increment: lsubsection } li.h5:before { content: counter(lchapter)"."counter(lsection)"."counter(lsubsection)"."counter(lsubsubsection)" "; counter-increment: lsubsubsection } li.h6:before { content: counter(lchapter)"."counter(lsection)"."counter(lsubsection)"."counter(lsubsubsection)"."counter(lparagraph)" "; counter-increment: lparagraph} li.h6 { margin-left: 5em } ol, ul { margin-bottom: 0.5em; margin-top: 0.5em } ol.loweralpha { list-style-type: lower-alpha } ol.upperalpha { list-style-type: upper-alpha } ol.lowerroman { list-style-type: lower-roman } ol.upperroman { list-style-type: upper-roman } ol.decimal { list-style-type: decimal } ul.square { list-style-type: square } ul.circle { list-style-type: circle } ul.disc { list-style-type: disc } li > p { margin: 0em } img { border: 1px solid #000; padding: 0em; display: block; margin: 1em auto } img.inline { border: 1px solid #000; padding: 0em; margin: 0em; display: inline } pre { color: #000; background-color: #eee; margin-left: 2em; clear: both; overflow: auto } div.unknown { font-family: monospace; color: #000; background-color: #fff; margin: 1em; padding: 1em; clear: both; border: 3px solid red} pre.quoted { color: #000; background-color: #eee; margin-left: 0em; clear: both; overflow: auto } pre.rawlatex { color: #000; background-color: #ddd; border: 1px solid #000; padding: 0.1em; clear: both; overflow: auto } pre.address { font-family: Verdana, sans-serif; display: inline; margin: 0px; color: #000; background-color: #fff; overflow: auto } span.target { text-decoration: underline } div.vstfooter hr { width: 100%; margin: 0px } div.vstfooter p { margin: 0px } --> <!-- .tohtml-xml evening { color: #ffffff; background-color: #333333; font-family: monospace; } .tohtml-xml evening .Constant { color: #ffa0a0; background-color: #0d0d0d; } .tohtml-xml evening .Identifier { color: #40ffff; } .tohtml-xml evening .Error { color: #ffffff; background-color: #ff0000; } .tohtml-xml evening .Comment { color: #80a0ff; } .tohtml-xml evening .Type { color: #60ff60; font-weight: bold; } .tohtml-perl evening { color: #ffffff; background-color: #333333; font-family: monospace; } .tohtml-perl evening .Identifier { color: #40ffff; } .tohtml-perl evening .Constant { color: #ffa0a0; background-color: #0d0d0d; } .tohtml-perl evening { color: #ffffff; background-color: #333333; font-family: monospace; } .tohtml-perl evening .Statement { color: #ffff60; font-weight: bold; } .tohtml-perl evening .Constant { color: #ffa0a0; background-color: #0d0d0d; } .tohtml-perl evening .Identifier { color: #40ffff; } .tohtml-perl evening { color: #ffffff; background-color: #333333; font-family: monospace; } .tohtml-perl evening .Statement { color: #ffff60; font-weight: bold; } .tohtml-perl evening .Constant { color: #ffa0a0; background-color: #0d0d0d; } .tohtml-perl evening .Identifier { color: #40ffff; } .tohtml-perl evening { color: #ffffff; background-color: #333333; font-family: monospace; } .tohtml-perl evening .Statement { color: #ffff60; font-weight: bold; } .tohtml-perl evening .Identifier { color: #40ffff; } .tohtml-perl evening .Constant { color: #ffa0a0; background-color: #0d0d0d; } .tohtml-perl evening { color: #ffffff; background-color: #333333; font-family: monospace; } .tohtml-perl evening .Statement { color: #ffff60; font-weight: bold; } .tohtml-perl evening .Identifier { color: #40ffff; } .tohtml-perl evening .Constant { color: #ffa0a0; background-color: #0d0d0d; } /*]]>*/ -->
Keyword: WordPress XMLRPC 博客 Perl
Title: CPAN::WordPress:XMLRPC折腾记录
Date: 2010年 01月 24日 星期日

1 这个页面的例程不能运行

http://kobesearch.cpan.org/htdocs/WordPress-API/WordPress/API/Page.htm

2 XMLRPC response错误

unclosed token at line 45, column 0, byte 2508 at /usr/lib/perl5/XML/Parser.pm line 187

 <feff><?xmlversion="1.0"?>
<methodResponse>
<params>
<param>
<value>
<struct>
<member><name>dateCreated</name><value><dateTime.iso8601>20100123T15:23:59</dateTime.iso8601></value></member>
<member><name>userid</name><value><string>3</string></value></member>
<member><name>postid</name><value><int>551</int></value></member>
<member><name>description</name><value><string>Array</string></value></member>
<member><name>title</name><value><string>Vim reStructured Text DEMO</string></value></member>
<member><name>link</name><value><string>http://www.disandu.com/?p=551</string></value></member>
<member><name>permaLink</name><value><string>http://www.disandu.com/?p=551</string></value></member>
<member><name>categories</name><value><array><data>
<value><string>开源软件</string></value>
</data></array></value></member>
<member><name>mt_excerpt</name><value><string></string></value></member>
<member><name>mt_text_more</name><value><string></string></value></member>
<member><name>mt_allow_comments</name><value><int>1</int></value></member>
<member><name>mt_allow_pings</name><value><int>1</int></value></member>
<member><name>mt_keywords</name><value><string></string></value></member>
<member><name>wp_slug</name><value><string>vim-restructured-text-demo</string></value></member>
<member><name>wp_password</name><value><string></string></value></member>
<member><name>wp_author_id</name><value><string>3</string></value></member>
<member><name>wp_author_display_name</name><value><string>thinkhy</string></value></member>
<member><name>date_created_gmt</name><value><dateTime.iso8601>20100123T07:23:59</dateTime.iso8601></value></member>
<member><name>post_status</name><value><string>publish</string></value></member>
<member><name>custom_fields</name><value><array><data>
<value><struct>
<member><name>id</name><value><string>961</string></value></member>
<member><name>key</name><value><string>_encloseme</string></value></member>
<member><name>value</name><value><string>1</string></value></member>
</struct></value>
<value><struct>
<member><name>id</name><value><string>960</string></value></member>
<member><name>key</name><value><string>_pingme</string></value></member>
<member><name>value</name><value><string>1</string></value></member>
</struct></value>
</data></array></value></member>
<member><name>sticky</name><value><boolean>0</boolean></value></member>
</struct>
</value>
</param>
</params>
</methodRespons at /usr/local/share/perl/5.10.0/WordPress/XMLRPC.pm line 601

注意上面返回的response缺少最后两个字符 e>

解决办法:
/usr/local/share/perl/5.10.0/SOAP/Lite.pm

Line:3715/5613 加上这一行:

 $response= $response. "e>";

3 宽字符提交出错

Wide character in subroutine entry at /usr/local/share/perl/5.10.0/XMLRPC/Lite.pm line 181.

出错位置: MIME::Base64::encode_base64 解决方法: http://perldoc.perl.org/MIME/Base64.html 修改/usr/local/share/perl/5.10.0/XMLRPC/Lite.pm 函数 as_base64 Line: 178 将

 return['base64', {}, MIME::Base64::encode_base64($value, '')];

改为:

 return['base64', {}, MIME::Base64::encode_base64(encode("UTF-8", $value),'')];

参考: http://bbs.chinaunix.net/archiver/?tid-1340623.html

4 重大发现

以下两种方式不同:

 my$o= WordPress:::XMLRPC->new({
username => 'author1',
password => 'superpass',
proxy => 'http://mysite.com/xmlrpc.php',
});

上面这种方式返回的response 缺少se 另一种方面

 my$o= WordPress:::XMLRPC->new;
$o->username('author1');
$o->password('superpass');
$o->proxy('http://mysite.com/xmlrpc.php');

$o->server
ordie(
sprintf'could not connect with %s:%s to %s',
$self->username,
$self->password,
$self->proxy,
);

而这种形式的调用,返回一个HTML页面,导致之前添加的“se”变为多余。


100123 21:50 今天还是完不成博客提交工具:

  • title部分有问题,不能上传包含汉字的标题(上传后为空)。

  • 上传的图片大小为0。


后记: 近两周每周六都会折腾Perl,CPAN太强大了,但其中的代码不一定适合自己,好在Perl代码都是开源的,可以折腾这些代码以实现自己想要的功能,在折腾的过程也发现了CPAN中的代码之美,并学习XMLRPC编程方式。最近突然有种开悟,学习一门编程语言最好的办法可能直接杀到它的库代码中,看个空间,这样在不知不觉中就学会了。以前看过《千万不能学英语》这本书,提倡 Just learn English,Not study English,学编程或许也可以To learn去感受。


http://www.disandu.com/?p=590

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics