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

本文记录了使用 CPAN 中 WordPress::XMLRPC 模块遇到的问题及解决方案,包括示例代码运行失败、XMLRPC 响应错误、宽字符提交错误等,并对比了两种不同的模块初始化方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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><?xml version="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
    or die(
       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

CPAN::Meta::Requirements 是一个用于管理和解析Perl模块依赖关系的模块。它提供了一种方式来指定和检查Perl模块的版本要求。以下是CPAN::Meta::Requirements的一些主要功能和用法: 1. **创建需求对象**: 你可以通过多种方式创建CPAN::Meta::Requirements对象,例如使用`new`方法或`from_string_hash`方法。 ```perl use CPAN::Meta::Requirements; my $req = CPAN::Meta::Requirements->new; ``` 2. **添加版本要求**: 你可以使用`add_minimum`方法来指定模块的最低版本要求,使用`add_maximum`方法来指定模块的最高版本要求。 ```perl $req->add_minimum('Module::Name', '1.2'); $req->add_maximum('Module::Name', '2.0'); ``` 3. **检查版本**: 你可以使用`is_satisfied_by`方法来检查某个版本是否满足需求。 ```perl if ($req->is_satisfied_by('Module::Name', '1.5')) { print "Version 1.5 satisfies the requirements.\n"; } else { print "Version 1.5 does not satisfy the requirements.\n"; } ``` 4. **合并需求**: 你可以使用`merge_requirements`方法将多个需求对象合并成一个。 ```perl my $req2 = CPAN::Meta::Requirements->new; $req2->add_minimum('Module::Name', '1.3'); $req->merge_requirements($req2); ``` 5. **转换为哈希**: 你可以将需求对象转换为哈希格式,方便存储或传输。 ```perl my $hash = $req->as_string_hash; ``` CPAN::Meta::Requirements模块在处理Perl模块的依赖关系时非常有用,特别是在编写和分发Perl模块时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值