HOME>WEBプログラム覚書>[WordPress]XML-RPCを利用して外部から投稿したりする。

[WordPress]XML-RPCを利用して外部から投稿したりする。

小粋空間: PHPでXML-RPCを利用する方法でMovable Typeで、XML-RPCを利用する方法がエントリーされてたのでWordPressについて書いておきます。もちろん適当に。

XML-RPCって?

XMLをPOSTしてXMLを取得するための規格です。POSTの誤用の最たる例として「Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)」でさらされてますw

そんなわけで現在では下火な感がありなかなかお目にかかれませんが、FotoliaのAPIはXML-RPCとなっています。

WordPressで何ができる?

WordPressでは、XML-RPCを利用することでエントリーの投稿、取得、カテゴリの作成、編集などをブラウザで管理画面にログインすることなく出来ます。

通常、複数のブログを運用している場合、それぞれログインして投稿しなければいけませんがXML-RPCを利用することで一ヶ所から投稿したりできます。

WordPressでXML-RPCを利用する

ここから下の内容は下記ページを参考にしています。とくにPEAR::XML_RPCを利用する場合は[WordPress] XML-RPC を使用する方法 | Sun Limited Mt.を読んだほうがよいでしょう。 とてもわかりやすかったです。

WordPressでXML-RPCを利用するには、管理画面の「設定 > 投稿設定」にある 「WordPress、 Movable Type、 MetaWeblog および Blogger XML-RPC 投稿プロトコルを有効にする。」にチェックを入れる必要があります。

XML-RPCのライブラリとして、 Zend FlameworkのZend_XmlRpc_Clientを利用します。

PEAR::XML_RPC2は利用したことないのでわかりませんが、Zend_XmlRpc_ClientではPHPの型を自動でXML-RPC型に変換してくれるので PEAR::XML_RPCよりは簡単に利用できます。

XML-RPCを利用した新規投稿と最新投稿の取得

実行結果はこちら

PHP

  1. <?php
  2. require_once 'Zend/XmlRpc/Client.php';
  3.  
  4. // URI、ログインユーザ名とパスワードの設定
  5. $uri = 'http://www.zaku055.com/xmlrpc.php';
  6. $user = 'user_name';
  7. $passwd = 'your_password';
  8.  
  9. $client = new Zend_XmlRpc_Client($uri);
  10.  
  11. // 接続してブログの基本情報を取得
  12. // 失敗すると例外がスローされる。
  13.  
  14. try {
  15.     $infos = $client->call('wp.getUsersBlogs', array($user, $passwd));
  16.  
  17. } catch (Zend_Exception $e) {
  18.     echo $e->getMessage();
  19. }
  20.  
  21. echo '<h2>ブログの基本情報</h2>';
  22. echo '<pre>';
  23. var_dump($infos);
  24. echo '</pre>';
  25.  
  26. // blog ID 基本的に1。
  27. // 3系では複数のブログが管理できるようなので増えるのかも?
  28. $blog_id = $infos[0]['blogid'];
  29.  
  30. // 投稿データの作成
  31. $contents = array(
  32.     'title'             => 'テスト投稿',
  33.     'categories'        => array('インテリア', '建築'),
  34.     'custom_fields'     => array(array('key' => 'field_key1', 'value' => 'field_key1のvalue'),
  35.                                  array('key' => 'field_key2', 'value' => 'field_key2のvalue')
  36.                                 ),
  37.     'description'       => 'テスト投稿の本文',
  38.     'dateCreated'       => null,
  39.     'wp_slug'           => 'xml-rpc-testpost',
  40.     'mt_allow_comments' => null,
  41.     'mt_allow_pings'    => null,
  42.     'mt_convert_breaks' => null,
  43.     'mt_text_more'      => null,
  44.     'mt_excerpt'        => 'Wordpress XML-RPCのテスト',
  45.     'mt_keywords'       => array('icon', 'インスピレーション', 'どらえもん'),
  46.     'mt_tb_ping_urls'   => null,
  47. );
  48.  
  49. // 公開設定
  50. $publish = false;
  51.  
  52. // 投稿を実行
  53. $result = $client->call('metaWeblog.newPost',
  54.                         array($blog_id, $user, $passwd, $contents, $publish)
  55.                         );
  56.  
  57. echo '<h2>実行結果 成功するとPost IDが返ってくる</h2>';
  58. echo '<pre>';
  59. echo $result;
  60. echo '</pre>';
  61.  
  62. // 最新の記事を取得
  63. // この構造見るとmetaWeblog.newPostで拡張されてるものがわかる
  64. // 多分wp_author_idとかも指定できるとおもわれ。
  65. $new_post = $client->call('metaWeblog.getRecentPosts',
  66.                            array($blog_id, $user, $passwd, 1)
  67.                           );
  68.  
  69. echo '<h2>最新の投稿データ</h2>';
  70. echo '<pre>';
  71. var_dump($new_post);
  72. echo '</pre>';
  73. ?>
  • カテゴリーは作成済みのものを名前で指定します。slugでは指定できません。 また存在していないカテゴリを入力しても新しく作成されることはありません。
  • mt_keywordsがタグになります。こちらはカテゴリと違ってslugでの指定が可能です。 存在しないタグは新しく作成されます。
  • metaWeblog.newPostじゃカスタムフィールドを設定出来そうな場所もないし、公式ページでも掲載されてないみたいなんですが、 拡張されてるみたいで「custom_fields」で指定可能です。同じく投稿のslugは「wp_slug」で設定できます。
  • WordPressだけにしか無いような設定項目はデータをgetしてみるとわかる感じです。

とまぁWordPressでXML-RPCを利用する方法を紹介しましたが、AtomPub を利用するのがもっとクールかもです。

情報が少ないのとAtomがいまいちわからないので、僕のZAN!NEN!な能力ではここが限界のようです。

投稿日 2010年5月22日 00:40
カテゴリ PHP
タグ WordPress | Zend Framework | サンプルコード
トラックバック URL http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1203

コメント

コメントする
Name
Email Address
URL