WordPress

Perlを使ってXML-RPCでブログの情報を取得する

PHPを使ってXML-RPCでブログの情報を取得するの、Perl版です。RPC::XML::Clientというパッケージを使ってみることにします。なければ、cpanmでインストール。

ThinkITの第2回:XML-RPCを利用したWeb APIをベースにしていますが、WordPressの関数名を使うところと、値を取り出すところを変えました。

以下、ブログ情報を取得するためのソースです。

use strict;
use warnings;
use RPC::XML::Client;
use utf8;
use Encode;

# XML-RPCのURL
my $url = 'http://yoursite';

# 対象サイトのアカウント名とパスワード
my $id = 'yourid';
my $pw = 'yourpassword';

# クライアントの生成
my $client = RPC::XML::Client->new($url);

# リクエストの生成
my $req = RPC::XML::request->new(
  'wp.getUsersBlogs',
  RPC::XML::string->new($id),
  RPC::XML::string->new($pw)
);

# リクエストの発行
my $res = $client->send_request($req);

if($res->is_fault){
  print 'Error: '.encode('utf8',$res->value->{faultString})."\n";
} else {
  # 結果はリファレンスで渡されるので、デリファレンスをする
  my @blogs = @$res;
  my %blogDataHash = %{$blogs[0]};
  my $blogNameRef = $blogDataHash{'blogName'};
  print encode($$blogNameRef)."\n";
}

まず、リクエストの生成で、wp.getUsersBlogs関数を使いました。これは、WordPress標準のXML-RPC関数なので、この関数を使うほうがよいでしょう。

また、結果はリファレンスで渡されますので、デリファレンスをします。ブログ情報は配列で渡されるので、ハッシュのデリファレンス、配列のデリファレンス、スカラー値のデリファレンスを使います。

XML-RPC WordPress APIを参照すれば与える値と受け取れる値が確認できます。また、返戻値の仕様をいちいち確認するのが面倒な場合は、Data::Dumperを使って表示し、データ構造を確認するのが手っ取り早いと思います。

エラーチェックは、$res->is_faultメソッドで行います。例えば、アカウント名やパスワードを間違えた時は、次のエラーメッセージを取得できます。

Error: ユーザー名またはパスワードが正しくありません。

Perlはデリファレンスをするとか、PHPに比べると若干面倒ではあるのですが、慣れてる言語で実装すると良いでしょう。