XML-RPCによるWordPressブログの操作

April 17, 2012 – 10:24 am

ここ数週間、XML-RPCについて学習していた。WordPressをはじめ、各種のブログツールで、XML-RPCがサポートされている。WordPressのCodexを見ると、次期バージョン3.4.xでは、XML-RPC用のAPIが拡張されるようだ。WordPerssを活用してゆくうえで、このXML-RPCの基本的な仕組みを習得しておくことに意味がある。

このエントリーでは、XML-RPCによるWordPressブログの操作の理解に向けて、典型的な操作例をメモしておいた。

WordPressがサポートするXML-RPC API: WordPressのCodex(XML-RPC Support)によると、WordPressによるXML-RPC インタフェースについて解説されている。

WordPressが、現在、サポートしているインタフェースには、

  • Blogger API
  • metWeblog API
  • Movable Type API
  • Pinback API

があり、加えてWordPress特有のAPIについても実装している。

Movable Type APIのなかにmt.supportedMethodというインタフェースがある。これを用いて、以下、現行のWordPress(vers. 3.3.1)がサポートしているXML-RPC API(metods) の一覧を出力させてみた。

PHP Source: wptest_supported.php:

<?php
require_once("XML/RPC.php");

$host = "wptest.yamasnet.com";
$xmlrpc_path = "/xmlrpc.php";

$c = new XML_RPC_client($xmlrpc_path, $host, 80);

$message = new XML_RPC_Message('mt.supportedMethods');
$response = $c->send($message);

$supportedMethods = XML_RPC_decode( $response->value() );

print_r( $supportedMethods );
?>

上記のPHP sourceを実行し、Wordpressで現在サポートされているAPIのリストを出力してみると:

# php wptest_supported.php
Array
(
    [0] => wp.getUsersBlogs
    [1] => wp.getPage
    [2] => wp.getPages
    [3] => wp.newPage
    [4] => wp.deletePage
    [5] => wp.editPage
    [6] => wp.getPageList
    [7] => wp.getAuthors
    [8] => wp.getCategories
    [9] => wp.getTags
    [10] => wp.newCategory
    [11] => wp.deleteCategory
    [12] => wp.suggestCategories
    [13] => wp.uploadFile
    [14] => wp.getCommentCount
    [15] => wp.getPostStatusList
    [16] => wp.getPageStatusList
    [17] => wp.getPageTemplates
    [18] => wp.getOptions
    [19] => wp.setOptions
    [20] => wp.getComment
    [21] => wp.getComments
    [22] => wp.deleteComment
    [23] => wp.editComment
    [24] => wp.newComment
    [25] => wp.getCommentStatusList
    [26] => wp.getMediaItem
    [27] => wp.getMediaLibrary
    [28] => wp.getPostFormats
    [29] => blogger.getUsersBlogs
    [30] => blogger.getUserInfo
    [31] => blogger.getPost
    [32] => blogger.getRecentPosts
    [33] => blogger.getTemplate
    [34] => blogger.setTemplate
    [35] => blogger.newPost
    [36] => blogger.editPost
    [37] => blogger.deletePost
    [38] => metaWeblog.newPost
    [39] => metaWeblog.editPost
    [40] => metaWeblog.getPost
    [41] => metaWeblog.getRecentPosts
    [42] => metaWeblog.getCategories
    [43] => metaWeblog.newMediaObject
    [44] => metaWeblog.deletePost
    [45] => metaWeblog.getTemplate
    [46] => metaWeblog.setTemplate
    [47] => metaWeblog.getUsersBlogs
    [48] => mt.getCategoryList
    [49] => mt.getRecentPostTitles
    [50] => mt.getPostCategories
    [51] => mt.setPostCategories
    [52] => mt.supportedMethods
    [53] => mt.supportedTextFilters
    [54] => mt.getTrackbackPings
    [55] => mt.publishPost
    [56] => pingback.ping
    [57] => pingback.extensions.getPingbacks
    [58] => demo.sayHello
    [59] => demo.addTwoNumbers
)

この出力例から、WordPressの現行版では、60種類のインタフェース(methods)が利用可能になっていることが理解される。

サンプル:異なるブログ間でコンテンツをコピーしてみる XML-RPCのインタフェース利用法を示すために、WordPressを使って構築されているふたつの異なるブログの間でコンテンツをコピーする例を示す。

この例では、このブログ(Yama’s Memorandum(memorandum.yamasnet.com))の最近の3つのエントリーを、これを新たに構築したブログ(WordPress Test(wptest.yamasnet.com))上にコピーしてみる。

まずPHPのsource: wpcpy.php:


<?php
require_once("XML/RPC.php");  

$xmlrpc_path   = "/xmlrpc.php";  

$host_source       = "memorandum.yamasnet.com";  
$username_source   = "user_source";  
$passwd_source     = "passwd_source";  

$host_target       = "wptest.yamasnet.com";
$username_target   = "user_target";
$passwd_target     = "passwd_target";
  
$client_source = new XML_RPC_client($xmlrpc_path, $host_source, 80);  
$client_target = new XML_RPC_client($xmlrpc_path, $host_target, 80);

$blog_id         = new XML_RPC_Value('dummy', 'string');
$username_source = new XML_RPC_Value($username_source, 'string');
$username_target = new XML_RPC_Value($username_target, 'string');
$passwd_source   = new XML_RPC_Value($passwd_source, 'string');
$passwd_target   = new XML_RPC_Value($passwd_target, 'string');
$numbers         = new XML_RPC_Value(3, 'int');  

$message = new XML_RPC_Message(  
    'metaWeblog.getRecentPosts',  
    array( $blog_id, $username_source, $passwd_source, $numbers) );  
  
$result = $client_source->send($message);  
  
if( !$result ){  
    exit('Could not connect to the server.');  
}else if( $result->faultCode() ){  
    exit($result->faultString());  
}  

$post_data = XML_RPC_decode($result->value());

for($i=0; $i<sizeof($post_data); $i++ ) {
  $content = new XML_RPC_Value(
    array(
        'title' => new XML_RPC_Value($post_data[$i]['title'], 'string'),
        'description' => new XML_RPC_Value($post_data[$i]['description'], 'string'),
        'dateCreated' => new XML_RPC_Value($post_data[$i]['dateCreated'], 'datetime'),
        'post_type' => new XML_RPC_Value('post', 'string'),
        'mt_text_more' => new XML_RPC_Value($post_data[$i]['mt_text_more'], 'string')
    ),
    'struct');
  $publish = new XML_RPC_Value( 1, 'boolean');

 $message = new XML_RPC_Message(
     'metaWeblog.newPost',
     array( $blog_id, $username_target, $passwd_target, $content, $publish ) );

 $result = $client_target->send($message);

 if( !$result ){
    exit('Could not connect to the server.');
 }else if( $result->faultCode() ){
    exit($result->faultString());
 }
}
?>

これを実行し、コピーのターゲット側のブログサイトを見ると、下図のようにコンテンツがコピーされている。


  1. 2 Responses to “XML-RPCによるWordPressブログの操作”

  2. ここでは pear の XML_RPC パッケージがインストールされていることを前提とする。

    インストールは

    pear install XML_RPC

    By yama on Sep 20, 2015

  1. 1 Trackback(s)

  2. May 8, 2012: XML-RPCによるWordPressブログの操作 | Yama’s Memorandum | TextMagic

Post a Comment