Solarized
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
- <?php
- require_once 'Zend/XmlRpc/Client.php';
-
-
- $uri = 'http://www.zaku055.com/xmlrpc.php';
- $user = 'user_name';
- $passwd = 'your_password';
-
- $client = new Zend_XmlRpc_Client($uri);
-
-
-
-
- try {
- $infos = $client->call('wp.getUsersBlogs', array($user, $passwd));
-
- } catch (Zend_Exception $e) {
- echo $e->getMessage();
- }
-
- echo '<h2>ブログの基本情報</h2>';
- echo '<pre>';
- var_dump($infos);
- echo '</pre>';
-
-
-
- $blog_id = $infos[0]['blogid'];
-
-
- $contents = array(
- 'title' => 'テスト投稿',
- 'categories' => array('インテリア', '建築'),
- 'custom_fields' => array(array('key' => 'field_key1', 'value' => 'field_key1のvalue'),
- array('key' => 'field_key2', 'value' => 'field_key2のvalue')
- ),
- 'description' => 'テスト投稿の本文',
- 'dateCreated' => null,
- 'wp_slug' => 'xml-rpc-testpost',
- 'mt_allow_comments' => null,
- 'mt_allow_pings' => null,
- 'mt_convert_breaks' => null,
- 'mt_text_more' => null,
- 'mt_excerpt' => 'Wordpress XML-RPCのテスト',
- 'mt_keywords' => array('icon', 'インスピレーション', 'どらえもん'),
- 'mt_tb_ping_urls' => null,
- );
-
-
- $publish = false;
-
-
- $result = $client->call('metaWeblog.newPost',
- array($blog_id, $user, $passwd, $contents, $publish)
- );
-
- echo '<h2>実行結果 成功するとPost IDが返ってくる</h2>';
- echo '<pre>';
- echo $result;
- echo '</pre>';
-
-
-
-
- $new_post = $client->call('metaWeblog.getRecentPosts',
- array($blog_id, $user, $passwd, 1)
- );
-
- echo '<h2>最新の投稿データ</h2>';
- echo '<pre>';
- var_dump($new_post);
- echo '</pre>';
- ?>
-
カテゴリーは作成済みのものを名前で指定します。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 |
2010年5月22日 00:47
PHP+jQuery+Fotolia APIでつくるちょいエロ カルーセル。続きを読む
2010年6月 9日 03:28
WordPressの強引なキャッシュ。実用性はない。続きを読む
2011年6月28日 12:13
投稿タイプ、タクソノミー、タームとか意味わかんね続きを読む
2011年7月29日 14:42
GAE/JからXMLRPCを使ってWordPressにカスタムフィールドも含めて投稿する。続きを読む
2011年10月 5日 03:48
ローカル環境で動いて本番環境で動かない。ローカル環境と本番環境で$table_prefixが異なる場合などget_user_meta()使ってないか確認し...続きを読む
2012年1月 8日 06:05
囲み型ショートコードのコンテンツを普通に受け取ると、改行があったりセミコロンとかがエスケープされた状態になっている。
JavascriptとかPHPを書く...続きを読む
2012年1月12日 01:13
どこからでも次の投稿と前の投稿を取得できるよう、get_adjacent_post()を変更してみる。続きを読む
2012年1月14日 05:55
テンプレートのごちゃごちゃが限界にきたのでラッパー書いてみた。でも僕なんかではなくもっとデキる人が書いたものを使いたいw続きを読む