FeedFetcherのユーザエージェントは、LDRとそっくり「Fastladder FeedFetcher/0.01」でした。
さて、弄り倒しますか。

あわせて「フィード購読者数カウンタ for blosxom」も修正しました。
ダウンロード:
ダウンロード:
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>メソッド名</methodName>
<params>
<param><value><string>パラメータ1</string></value></param>
<param><value><string>パラメータ2</string></value></param>
</params>
</methodCall>
またレスポンスフォーマットは以下の様になります。
<?xml version="1.0" encoding="utf-8"?>
<methodResponse>
<params>
<param>
<value>
<string>結果</string>
</value>
</param>
</params>
</methodResponse>
リクエストパラメータは「params」というノードを括られており、配列になっているのが分かるかと思います。また値が格納される「value」ノードには「<string>」や「<int>」といった、その値の型が定義されています。
<?xml version="1.0" encoding="utf-8"?>
<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>メンバ1</name>
<value><int>157</int></value>
</member>
<member>
<name>メンバ2</name>
<value><string>Sample</string></value>
</member>
</struct>
</value>
</param>
</params>
</methodResponse>
と書く事が出来ます。
presence.send({
user => 'your username as string',
personal_key => 'your personal key as string',
message => 'message as string',
optional icon => 'icon number as int',
optional location => 'location as string',
optional generated => 'generat flag as boolean'
})
こんなイメージとして表現出来ます。
#!/usr/bin/perl
use strict;
use Encode qw(from_to);
use XMLRPC::Lite;
use Data::Dumper;
my ($user,$personal_key,$message,$icon) = @ARGV;
from_to($message, "shiftjis", "utf8") if $^O eq "MSWin32";
print Dumper(XMLRPC::Lite
->proxy('http://api.jaiku.com/xmlrpc')
->call('presence.send', {
user => $user,
personal_key => $personal_key,
message => $message,
icon => ($icon || 300),
})->result);
と書く事が出来ますね。これをコマンドラインから
./jaiku.pl username xxxxxxx 本日は晴天なり
※「xxxxxxx」はpersonal_keyです。APIドキュメントの右下あたりに記述されています。
./jaiku.pl username xxxxxxx 曇り 398
と実行すればといった感じにアイコンを付ける事が出来ます。![]()
アイコンリストを表示さて話をXMLRPCに戻して、Perlでは「XMLRPC::Transport::HTTP」というXMLRPCを透過的にPerlのパッケージおよびサブルーチンとバインドしてくれるモジュールがあり、XMLRPCサーバを簡単に実装する事が出来ます。
#!/usr/bin/perl
use strict;
use XMLRPC::Transport::HTTP;
package calc;
sub plus {
shift if UNIVERSAL::isa( $_[0] => __PACKAGE__ );
my $lhs = shift;
my $rhs = shift;
my $res = $lhs + $rhs;
return {result=>SOAP::Data->type('int' => $res)};
}
XMLRPC::Transport::HTTP::CGI
->dispatch_to('calc')->handle;
モジュール名がpackage「calc」に、メソッド名がサブルーチン「plus」にバインドされている事が分かるかと思います。
#!/usr/bin/perl
use strict;
use warnings;
use Encode qw(from_to);
use XMLRPC::Lite;
use Data::Dumper;
my $url = 'http://example.com/xmlrpc/calc.cgi';
warn Dumper(XMLRPC::Lite
->proxy($url)
->call('calc.plus', 1, 2)->result);
というクライアント側のコードで実行出来ます。
from xmlrpclib import ServerProxy
proxy = ServerProxy("http://example.com/xmlrpc/calc.cgi")
print proxy.calc.plus(1, 2)
という実装になります。このブログを応援する