wordpresssで対応しているxml-rpc api

wordpress の xml-rpc は、

XML-RPC wp « WordPress Codex
http://codex.wordpress.org/XML-RPC_wp

にあるのですが、ところどころ間違っています。blogid のところが、int 型と string 型が混在していて、xml-rpc のクライアントを実装してくとエラーになります、ってな具合です。

さて、ブログ系の xml-rpc は、種類が色々あって、

[WordPress] XML-RPC を使用する方法 | Sun Limited Mt.
http://www.syuhari.jp/blog/archives/1373

を参考にすると、

  • mt.* で始まる Movable Type
  • metaWeblog.* で始まる MetaWeblog
  • blogger.* で始まる Blogger
  • wp.* で始まる wordpress

と様々です。

一体、どれが対応しているのか?良くわからないので、結局は、ソースを見ることになります。

# まぁ、原点/原典に戻るというこでw

xmlrpc.php をそのまま見ると、133行目あたりから、 以下のように一覧が見れます。

 function wp_xmlrpc_server() {
        $this->methods = array(
            // WordPress API
            'wp.getUsersBlogs'      => 'this:wp_getUsersBlogs',
            'wp.getPage'            => 'this:wp_getPage',
            'wp.getPages'           => 'this:wp_getPages',
            'wp.newPage'            => 'this:wp_newPage',
            'wp.deletePage'         => 'this:wp_deletePage',
            'wp.editPage'           => 'this:wp_editPage',
            'wp.getPageList'        => 'this:wp_getPageList',
            'wp.getAuthors'         => 'this:wp_getAuthors',
            'wp.getCategories'      => 'this:mw_getCategories',      // Alias
            'wp.getTags'            => 'this:wp_getTags',
            'wp.newCategory'        => 'this:wp_newCategory',
            'wp.deleteCategory'     => 'this:wp_deleteCategory',
            'wp.suggestCategories'  => 'this:wp_suggestCategories',
            'wp.uploadFile'         => 'this:mw_newMediaObject', // Alias
            'wp.getCommentCount'    => 'this:wp_getCommentCount',
            'wp.getPostStatusList'  => 'this:wp_getPostStatusList',
            'wp.getPageStatusList'  => 'this:wp_getPageStatusList',
            'wp.getPageTemplates'   => 'this:wp_getPageTemplates',
            'wp.getOptions'         => 'this:wp_getOptions',
            'wp.setOptions'         => 'this:wp_setOptions',
            'wp.getComment'         => 'this:wp_getComment',
            'wp.getComments'        => 'this:wp_getComments',
            'wp.deleteComment'      => 'this:wp_deleteComment',
            'wp.editComment'        => 'this:wp_editComment',
            'wp.newComment'         => 'this:wp_newComment',
            'wp.getCommentStatusList' => 'this:wp_getCommentStatusList',

            // Blogger API
            'blogger.getUsersBlogs' => 'this:blogger_getUsersBlogs',
            'blogger.getUserInfo' => 'this:blogger_getUserInfo',
            'blogger.getPost' => 'this:blogger_getPost',
            'blogger.getRecentPosts' => 'this:blogger_getRecentPosts',
            'blogger.getTemplate' => 'this:blogger_getTemplate',
            'blogger.setTemplate' => 'this:blogger_setTemplate',
            'blogger.newPost' => 'this:blogger_newPost',
            'blogger.editPost' => 'this:blogger_editPost',
            'blogger.deletePost' => 'this:blogger_deletePost',

            // MetaWeblog API (with MT extensions to structs)
            'metaWeblog.newPost' => 'this:mw_newPost',
            'metaWeblog.editPost' => 'this:mw_editPost',
            'metaWeblog.getPost' => 'this:mw_getPost',
            'metaWeblog.getRecentPosts' => 'this:mw_getRecentPosts',
            'metaWeblog.getCategories' => 'this:mw_getCategories',
            'metaWeblog.newMediaObject' => 'this:mw_newMediaObject',

            // MetaWeblog API aliases for Blogger API
            // see http://www.xmlrpc.com/stories/storyReader$2460
            'metaWeblog.deletePost' => 'this:blogger_deletePost',
            'metaWeblog.getTemplate' => 'this:blogger_getTemplate',
            'metaWeblog.setTemplate' => 'this:blogger_setTemplate',
            'metaWeblog.getUsersBlogs' => 'this:blogger_getUsersBlogs',

            // MovableType API
            'mt.getCategoryList' => 'this:mt_getCategoryList',
            'mt.getRecentPostTitles' => 'this:mt_getRecentPostTitles',
            'mt.getPostCategories' => 'this:mt_getPostCategories',
            'mt.setPostCategories' => 'this:mt_setPostCategories',
            'mt.supportedMethods' => 'this:mt_supportedMethods',
            'mt.supportedTextFilters' => 'this:mt_supportedTextFilters',
            'mt.getTrackbackPings' => 'this:mt_getTrackbackPings',
            'mt.publishPost' => 'this:mt_publishPost',

            // PingBack
            'pingback.ping' => 'this:pingback_ping',
            'pingback.extensions.getPingbacks' => 'this:pingback_extensions_getPingbacks',

            'demo.sayHello' => 'this:sayHello',
            'demo.addTwoNumbers' => 'this:addTwoNumbers'
        );

例えば、wordpress の記事を取得するための API は、metaWeblog.getPost なので、mw_getPost メソッドを見ると、

入力値がこんな感じ

 /**
     * Retrieve post.
     *
     * @since 1.5.0
     *
     * @param array $args Method parameters.
     * @return array
     */
    function mw_getPost($args) {

        $this->escape($args);

        $post_ID     = (int) $args[0];
        $username  = $args[1];
        $password   = $args[2];

出力値がこんな感じ

         $resp = array(
                'dateCreated' => new IXR_Date($post_date),
                'userid' => $postdata['post_author'],
                'postid' => $postdata['ID'],
                'description' => $post['main'],
                'title' => $postdata['post_title'],
                'link' => $link,
                'permaLink' => $link,
                // commented out because no other tool seems to use this
                //        'content' => $entry['post_content'],
                'categories' => $categories,
                'mt_excerpt' => $postdata['post_excerpt'],
                'mt_text_more' => $post['extended'],
                'mt_allow_comments' => $allow_comments,
                'mt_allow_pings' => $allow_pings,
                'mt_keywords' => $tagnames,
                'wp_slug' => $postdata['post_name'],
                'wp_password' => $postdata['post_password'],
                'wp_author_id' => $author->ID,
                'wp_author_display_name'    => $author->display_name,
                'date_created_gmt' => new IXR_Date($post_date_gmt),
                'post_status' => $postdata['post_status'],
                'custom_fields' => $this->get_custom_fields($post_ID),
                'sticky' => $sticky
            );

            if ( !empty($enclosure) ) $resp['enclosure'] = $enclosure;

            return $resp;

ってな感じで分かります。

現在は、コマンドライン版を作成中。

 

 

カテゴリー: Wordpress パーマリンク

wordpresssで対応しているxml-rpc api への1件のコメント

  1. ピンバック: [ひとり言 2010.10.18] ぼちぼちプログラミング at Roguer

コメントは停止中です。