[PHP] XML-RPC を使って FC2ブログに投稿1

ブログに投稿をするには、そのブログに用意されている投稿専用の画面を開いて必要な項目に入力を行い、投稿をします。
でも、PHP 等のプログラムから投稿できれば便利ですよね。
そんな仕組みが、XML-RPC です。xml形式の構文をpostすれば、ブログに投稿したり、記事を更新したりすることができます。
無料のブログにも、XML-RPC 経由で記事を投稿できるものがあります。もちろん、WordPressでも可能です。
無料ブログのFC2は、XML-RPC に対応しており、PHPから記事の投稿をすることができます。しかし、FC2 の XML-RPC に関するドキュメントが全然見つかりませんでした。なので、詳細部分がいろいろ不明です。

PHPから、XML-RPC を利用するためには、XML構文を作成してXML-RPCをコールする必要があります。自前でやるのは大変ですしライブラリが用意されているので、それを使用します。
ライブラリとしては、Zend Flamework、PEAR::XMLRPC、The Incutio XML-RPC Library for PHP などがあるようです。
このなかで、一番簡単に利用できそうだった、The Incutio XML-RPC Library for PHPを使うことにします。
The Incutio XML-RPC Library for PHPは、小さなファイルを1個PHPにインクルードするだけで
サーバーへのインストール等必要なく、お気軽に使うことができます。
The Incutio XML-RPC Library for PHP のサイトで、php-ixr-1.7.4.tar.gzをダウンロードして解凍します。
何故だか、リンク切れになっているので
https://code.google.com/archive/p/php-ixr/downloadsからダウンロードしました。
利用するには、解凍したIXR_Library.php を適当な場所にアップロードすればOKです。

まず最初に、FC2では XML-RPC のどのメソッドに対応しているかを調べてみることにしましょう。

現時点において、FC2で使えるメソッド一覧
•blogger.getUsersBlogs ブログの情報を取得 ["blogid"]["url"]["blogName"]
•blogger.getUserInfo ブログの情報を取得 ["userid"]["url"]["nickname"]["email"]
•blogger.newPost 新しい投稿を作成
•blogger.editPost 既存の投稿についての情報を更新
•blogger.deletePost 投稿を削除
•blogger.getRecentPosts 最新の投稿リストを返します
•metaWeblog.newPost 新しい投稿を作成
•metaWeblog.editPost 既存の投稿についての情報を更新
•metaWeblog.getPost 特定の投稿についての情報を返します
•metaWeblog.getRecentPosts システムにおける最新の投稿リストを返します
•metaWeblog.newMediaObject ファイルをアップロードします
•metaWeblog.getCategories カテゴリを取得します
•mt.getRecentPostTitles 最新の投稿を載せた必要最小限のリストを返します
•mt.getCategoryList 全カテゴリーのリストを返します
•mt.getPostCategories 投稿されたエントリーに割り当てた全カテゴリーのリストを返します
•mt.setPostCategories 投稿されたエントリーにカテゴリーを指定します
•mt.supportedMethods サーバーがサポートするXML-RPCメソッドについての情報を取得します
•mt.supportedTextFilters テキストフォーマットのプラグインについての情報を取得
•mt.getTrackbackPings トラックバックpingのリストを取得します
•mt.publishPost 公開(再構築)します pingを送信ません
•mt.setNextScheduledPost 投稿を予約します

それでは、投稿してみましょう。

下記は必要がなければ、省略可能です
・'dateCreated'
・'mt_allow_comments'
・'mt_allow_pings'
・'mt_convert_breaks'
・'mt_text_more'

投稿カテゴリーは、投稿時に指定することが出来ません。
'mt.setPostCategories'にて、別途指定します。その場合、カテゴリーIDを指定する必要があります。
カテゴリーIDは'mt.getCategoryList'で求めるとこができます。

記事を投稿する際に、FC2のどのテーマに投稿するのかの指定方法が不明でした。
もしかしたら、指定できないのかも?しれません。

Top