-
- 2005年4月 9日 18:12
- Movable Type | Programming
Quixotic PixelsのPhotoBlogテンプレがいまいち投稿が面倒というのは一つ前のエントリで述べました.
というわけで,今回は以下の作業をおこなうスクリプトをXML RPCを利用したPHPで書く事にしました.
- GDを利用してイメージを縮小し,サムネイルも作る.ファイル名は日付ベースにしてユニークなものにする
- タイトルと本文はフォームから入力してもらい,Extendedで入力すべきファイルURIのプリフィクスは自動入力にする
- 当然,カテゴリなども選べるようにする
一つ目のGDに関してはこれまでもソースを書いた事があったので,見当はついてました.問題はXML RPCを使ってポストする部分ですが,これも至って簡単でした.なお,今回はsunouchiさんのサイトであるdrifting blog by snotchの記事を参考にさせていただきました.ありがとうございます.
XML RPCをPHPで扱うためのライブラリはいくらかあるようですが,今回はPEARが用意しているものを使う事にしました.
さて,Movable Typeが用意するXML RPCインターフェースを眺めると,今回関係ありそうなのは
- 追記のエントリー・テキストも含めて投稿できるmetaWeblog.newPost
- ウェブログに定義された全カテゴリーのリストを返すmt.getCategoryList
- 記事にカテゴリを適用するmt.setPostCategories
- 記事を公開状態にするmt.publishPost
あたりでしょう.どうやら記事を投稿する際に一緒にカテゴリを送信する,という事はできないようなので,カテゴリ付きで記事を投稿する場合には
- まずはBlogからカテゴリをとってくる
- 次に,投稿状態を「下書き」としてmetaWeblog.newPostを叩く
- metaWeblog.newPostの返り値である記事IDを使ってmt.setPostCategoriesを叩く
- んで,同じく記事IDを使ってmt.publishPostを叩く
という手順を踏む事になりそうです.
ま,そんなことを勘案して,ちょろっと書いてみたコードの断片がこちらです.エラー処理はほとんどやってませんが,雰囲気は掴めるかも.PHP初心者なので,コードがダメダメかもしれません.そんときは突っ込んでくださいませ.
あ,そうそう.とりあえずこれはPrimary Categoryしか設定できませんのであしからず^^;
こんなんでも参考になれば幸いです.
<?php
include_once('config.php');
require_once("XML/RPC.php");
$GLOBALS['XML_RPC_defencoding'] = "UTF-8";
class XMLComm{
var $client;
var $appkey;
var $username;
var $passwd;
var $blogid;
var $publish;
var $content;
function XMLComm(){
$this->client = new XML_RPC_client(MT_XMLRPC_PATH, MT_HOST, 80);
$this->appkey = new XML_RPC_Value('', 'string');
$this->username = new XML_RPC_Value(MT_USER, 'string');
$this->passwd = new XML_RPC_Value(PASSWD, 'string');
$this->blogid = new XML_RPC_Value(BLOGID, 'string');
$this->publish = new XML_RPC_Value(0, 'boolean');
}
function getCategories(){
$message = new XML_RPC_Message(
'mt.getCategoryList',
array($this->blogid, $this->username, $this->passwd));
$result = $this->client->send($message);
return XML_RPC_decode( $result->value() );
}
function postEntry($title, $description, $extend, $category){
$tmptitle = new XML_RPC_Value($title, 'string');
$tmpdesc = new XML_RPC_Value($description, 'string');
$tmpextend = new XML_RPC_Value($extend, 'string');
$this->content = new XML_RPC_Value(array(
"title"=>$tmptitle,
"description"=>$tmpdesc,
"mt_text_more"=>$tmpextend), 'struct');
$message = new XML_RPC_Message(
'metaWeblog.newPost',
array($this->blogid, $this->username, $this->passwd, $this->content, $this->publish));
$postid = $this->client->send($message);
$categstruct = new XML_RPC_Value(array("categoryId" => new XML_RPC_Value($category, 'string'), "isPrimary" => new XML_RPC_Value(1, 'boolean')), 'struct');
$categ = new XML_RPC_Value(array($categstruct), 'array');
if( $postid ){
if ($category != ""){
$message = new XML_RPC_Message(
'mt.setPostCategories',
array($postid->value(), $this->username, $this->passwd, $categ));
$result = $this->client->send($message);
}
$message = new XML_RPC_Message(
'mt.publishPost',
array($postid->value(), $this->username, $this->passwd)
);
$result = $this->client->send($message);
return $result;
}
return false;
}
}
?>
- Newer: 続・PhotoBlogユーザビリティ改善計画
- Older: PhotoBlogを探してみる
Comments:0
Trackbacks:1
- TrackBack URL for this entry
- http://blog.hiroaki.jp/mt/mt-tb.cgi/241
- Listed below are links to weblogs that reference
- XML RPCを使ってMovable Typeのエントリをポスト from Hirolog
- Movable Type 3.3でXML-RPC APIの仕様が変わってた… from Hirolog 2006-08-19 (土) 04:19
- 以前XML RPCを使ってMovable Typeのエントリをポストという題で記...