(最終更新: 2004年7月28日 [第2版])
(新規作成: 2004年3月14日 [第1版])
takayama氏の 「Movable Type のマニュアル日本語訳」 の中から、 XML-RPCに関連する部分 を取り出し、若干の注釈、参考例を追加したものです。 (注意: 現在、takayama氏のサイト http://kompeito.org/ は Not Found になってしまっています)
Movable Type や TypePad、 ココログ 用の XML-RPC クライアントを作ろうとしている人の参考になれば幸いです。
また、XML-RPC がどういうものであるかは、
「XML-RPC仕様書」
が参考になります。
update ping の送信も XML-RPC を使いますが、ここでは触れません。
「Weblogs.Com XML-RPC interface」
を参照してください。
注意: blogger API における appkey の値はすべて、Movable Type、TypePad、ココログ では無視されます。
String appkey, /* Movable Type, TypePad, ココログでは任意の文字列でよい */ String blogid, /* blog の ID */ String username, /* blog のユーザ名(アカウント) */ String password, /* 上記ユーザの blog への login 用パスワード */ String content, /* 記事本文 */ boolean publish /* 公開するか否か? (0: 「下書き」状態で記事を登録, */ /* 1: 「公開」状態で記事を登録) */
String appkey, /* Movable Type, TypePad, ココログでは任意の文字列でよい */ String postid, /* 上書き対象の記事ID */ String username, /* blog のユーザ名(アカウント) */ String password, /* 上記ユーザの blog への login 用パスワード */ String content, /* (編集済みの)記事本文 */ boolean publish /* 公開するか否か? (0: 「下書き」状態で記事を登録, */ /* 1: 「公開」状態で記事を登録) */
String appkey, /* Movable Type, TypePad, ココログでは任意の文字列でよい */ String postid, /* 削除対象の記事ID */ String username, /* blog のユーザ名(アカウント) */ String password, /* 上記ユーザの blog への login 用パスワード */ boolean publish /* 0 または 1 を指定(無視される) */
String appkey, /* Movable Type, TypePad, ココログでは任意の文字列でよい*/ String blogid, /* blog ID */ String username, /* blog のユーザ名(アカウント) */ String password, /* 上記ユーザの blog への login 用パスワード */ int numberOfPosts /* 取得する記事数 */
ISO.8601 dateCreated, /* 投稿日時 */ String userid, /* 投稿者のユーザID */ String postid, /* 記事ID */ String content /* 記事本文 */が含まれます(構造体のメンバーの出現順序は不定)。
Movable Type Ver2.661 での返り値の例: (最新の記事1個を取得した場合)20040116T14:10:03 (Movable Type での例) 2004-01-16T14:10:03Z (ココログ での例) →字義通り UTC として解釈すると 9時間 ずれてしまう。2004-01-16T14:10:03+09:00 とみなす必要あり2004年7月1日以降、ココログでは、XML-RPC API に関し ては、「現地時間」ではなく常にUTCを使うようになった。 [参考: お知らせココログ: 【修正】 XMLRPC API で取得する記事の時刻について]
<?xml version="1.0" encoding="UTF-8" ?> <methodResponse> <params> <param> <value> <array> <data> <value> <struct> <member> <name>postid</name> <value> <string>104</string> </value> </member> <member> <name>userid</name> <value> <string>1</string> </value> </member> <member> <name>content</name> <value> <string>記事本文</string> </value> </member> <member> <name>dateCreated</name> <value> <dateTime.iso8601>20040116T14:10:03</dateTime.iso8601> </value> </member> </struct> </value> </data> </array> </value> </param> </params> </methodResponse>
String appkey, /* Movable Type, TypePad, ココログでは任意の文字列でよい */ String username, /* blog のユーザ名(アカウント) */ String password /* 上記ユーザの blog への login 用パスワード */
String url, /* 当該 weblog のトップページの URL */ String blogid, /* 当該 weblog の blog ID */ String blogName /* 当該 weblog の名前 */が含まれます(構造体のメンバーの出現順序は不定)。
String appkey, /* Movable Type, TypePad, ココログでは任意の文字列でよい */ String username, /* blog のユーザ名(アカウント) */ String password /* 上記ユーザの blog への login 用パスワード */
String userid, /* 当該 weblog でのユーザID */ String firstname, /* ユーザの名前 */ String lastname, /* ユーザの苗字 */ String nickname, /* ユーザのニックネーム(ハンドル) */ String email, /* ユーザの Email アドレス */ String url /* 当該 weblog のトップページの URL */が含まれます(構造体のメンバーの出現順序は不定)。
String blogid, /* blog ID */ String username, /* blog のユーザ名(アカウント) */ String password, /* 上記ユーザの blog への login 用パスワード */ struct content, /* content構造体 (記事情報) */ boolean publish /* 公開するか否か (0: 「下書き」状態で記事を登録, */ /* 1: 「公開」状態で記事を登録 */注意: content 構造体は、次のような標準的な項目を含みます:
String title, /* 記事の件名 */ String description, /* 記事の本文 */ ISO.8601 dateCreated, /* 記事の投稿日時 */それに加えて、Movable Type では次の7つの項目に値を入れて渡すことができます:
int mt_allow_comments, /* コメントを受け入れるか否か */ int mt_allow_pings, /* トラックバックPingを受け入れるか否か */ String mt_convert_breaks, /* 記事本文の改行の扱いをどうするか */ String mt_text_more, /* 追記 */ String mt_excerpt, /* 概要 */ String mt_keywords, /* キーワードの値 */ array mt_tb_ping_urls, /* 当該記事に関して送信したい */ /* トラックバック Ping 先の URL 群 */mt_convert_breaks に 0 (もしくは none) を指定した場合、 「記事の本文」および「追記」中の改行は <br /> あるいは </p><p> に変換されません。 1 (もしくは convert_breaks)を指定した場合、 「記事の本文」および「追記」中の改行は <br /> あるいは </p><p> に変換されます。
String postid, /* 上書き対象の記事ID */ String username, /* blog のユーザ名(アカウント) */ String password, /* 上記ユーザの blog への login 用パスワード */ struct content, /* content構造体 (記事情報) */ boolean publish /* 公開するか否か (0: 「下書き」状態で記事を登録, */ /* 1: 「公開」状態で記事を登録 */注意: content 構造体は、次のような標準的な項目を含みます:
String title, /* 記事の件名 */ String description, /* 記事の本文 */ ISO.8601 dateCreated, /* 記事の投稿日時 */それに加えて、Movable Type では次の7つの項目に値を入れて渡すことができます:
int mt_allow_comments, /* コメントを受け入れるか否か */ int mt_allow_pings, /* トラックバックPingを受け入れるか否か */ String mt_convert_breaks, /* 記事本文の改行の扱いをどうするか */ String mt_text_more, /* 追記 */ String mt_excerpt, /* 概要 */ String mt_keywords, /* キーワードの値 */ array mt_tb_ping_urls, /* 当該記事に関して送信したい */ /* トラックバック Ping 先の URL 群 */dateCreated は、ISO.8601 形式で表記してください。 (ただし、省略することも可能です。 省略した場合は元の記事の投稿日時がそのまま引き継がれます)。
String postid, /* 取得したい記事の記事ID */ String username, /* blog のユーザ名(アカウント) */ String password /* 上記ユーザの blog への login 用パスワード */
String userid, /* 投稿者のユーザID */ ISO.8601 dateCreated, /* 記事の投稿日時 */ String postid, /* 記事ID */ String description, /* 記事の本文 */ String title, /* 記事の件名 */ String link, /* 記事 の URL (下記の permalink と同一) */ String permaLink, /* permalink (ココログでは「固定リンク」) */ String mt_excerpt, /* 概要 */ String mt_text_more, /* 追記 */ int mt_allow_comments, /* コメントを受け入れるか否か */ int mt_allow_pings, /* トラックバック Ping を受け入れるか否か */ String mt_convert_breaks, /* 改行の扱いをどうするか */ String mt_keywords; /* キーワード */失敗すると、fault が返ります。
String blogid, /* blog ID */ String username, /* blog のユーザ名(アカウント) */ String password, /* 上記ユーザの blog への login 用パスワード */ int numberOfPosts /* 取得する記事数 */
ISO.8601 dateCreated, /* 記事の投稿日時 */ String userid, /* 投稿者のユーザID */ String postid, /* 記事ID */ String description, /* 記事本文 */ String title, /* 記事の件名 */ String link, /* 記事 の URL (下記の permalink と同一) */ String permaLink, /* permalink (ココログでは「固定リンク」) */ String mt_excerpt, /* 概要 */ String mt_text_more, /* 追記 */ int mt_allow_comments, /* コメントを受け入れるか否か */ int mt_allow_pings, /* トラックバック Ping を受け入れるか否か */ String mt_convert_breaks, /* 改行の扱いをどうするか */ String mt_keywords; /* キーワード */失敗すると、fault が返ります。
String blogid, /* blog ID */ String username, /* blog のユーザ名(アカウント) */ String password, /* 上記ユーザの blog への login 用パスワード */ struct file注意: file 構造体には、2つの項目があります:
base64 bits, /* BASE64 で符号化された、ファイルの中身 */ String name, /* ファイル名 */(3つ目の項目になる予定の) type [ファイルの種類] は、 今のところ無視されます。
String blogid, /* blog ID */ String username, /* blog のユーザ名(アカウント) */ String password, /* 上記ユーザの blog への login 用パスワード */ int numberOfPosts /* 情報を取得したい記事の数 */
ISO.8601 dateCreated, /* 投稿日時 */ String userid, /* 投稿者のユーザID */ String postid, /* 記事ID */ String title; /* 記事の件名 */なお、構造体のメンバーの出現順序は不定です。
String blogid, /* blog ID */ String username, /* blog のユーザ名(アカウント) */ String password /* 上記ユーザの blog への login 用パスワード */
String categoryId /* カテゴリID */ String categoryName; /* カテゴリの名前 */なお、構造体のメンバーの出現順序は不定です。
String postid, /* カテゴリ取得対象の記事ID */ String username, /* blog のユーザ名(アカウント) */ String password /* 上記ユーザの blog への login 用パスワード */
String categoryName, /* カテゴリの名前 */ String categoryId, /* カテゴリID */ boolean isPrimary; /* 第一カテゴリか否か */失敗すると、fault が返ります。
String postid, /* カテゴリ設定対象の記事ID */ String username, /* blog のユーザ名(アカウント) */ String password, /* 上記ユーザの blog への login 用パスワード */ array categories /* カテゴリに関する情報 */注意: categories は、設定したカテゴリの数だけ次の要素を含む、構造体の配列です:
String categoryId, /* カテゴリID */ boolean isPrimary /* 当該カテゴリを第一カテゴリに指定するか否か */isPrimary を使い、第一カテゴリを指定することも可能です。
<?xml version="1.0" encoding="UTF-8"?> <methodResponse> <params> <param><value><array><data> <value><string>blogger.newPost</string></value> <value><string>blogger.editPost</string></value> <value><string>blogger.getRecentPosts</string></value> <value><string>blogger.getUsersBlogs</string></value> <value><string>blogger.getUserInfo</string></value> <value><string>blogger.deletePost</string></value> <value><string>metaWeblog.getPost</string></value> <value><string>metaWeblog.newPost</string></value> <value><string>metaWeblog.editPost</string></value> <value><string>metaWeblog.getRecentPosts</string></value> <value><string>metaWeblog.newMediaObject</string></value> <value><string>mt.getCategoryList</string></value> <value><string>mt.setPostCategories</string></value> <value><string>mt.getPostCategories</string></value> <value><string>mt.getTrackbackPings</string></value> <value><string>mt.supportedTextFilters</string></value> <value><string>mt.getRecentPostTitles</string></value> <value><string>mt.publishPost</string></value> </data></array></value></param> </params> </methodResponse>
参考: 本API (mt.supportedMethods) 自身は、上記、返り値に含まれていないことに注意。
String key, /* フィルタ識別子 */ String label /* フィルタの説明 */を含む構造体の配列が、フィルタの数だけ、返ってきます。
<?xml version="1.0" encoding="UTF-8"?> <methodResponse> <params><param><value><array><data> <value><struct> <member> <name>label</name> <value><string>Convert Line Breaks</string></value> </member> <member> <name>key</name> <value><string>__default__</string></value> </member> </struct></value> </data></array></value></param></params> </methodResponse>
String postid /* 記事ID */
String pingTitle, /* Ping 元の記事の 件名 */ String pingURL, /* Ping 元の記事の URL */ String pingIP /* Ping してきたホストの IP アドレス */
String postid, /* 公開対象の記事ID */ String username, /* blog のユーザ名(アカウント) */ String password /* 上記ユーザの blog への login 用パスワード */
String postid, /* 公開予約対象の記事ID */ ISO.8601 dateCreated, /* 公開日時 */ String username, /* blog のユーザ名(アカウント) */ String password /* 上記ユーザの blog への login 用パスワード */
以下、Movable Type ではサポートされていない Blogger XML-RPC API です。参考までに紹介しておきます。
appkey (string): Unique identifier/passcode of the application sending the post. (See access info.) blogid (string): Unique identifier of the blog who's template is to be returned. username (string): Login for a Blogger who has admin permission on give blog. password (string): Password for said username. templateType (string): Determines which of the blog's templates will be returned. Currently, either "main" or "archiveIndex".
appkey (string): Unique identifier/passcode of the application sending the post. (See access info.) blogid (string): Unique identifier of the blog who's template is to be returned. username (string): Login for a Blogger who has admin permission on give blog. password (string): Password for said username. template (string): The text for the new template (usually mostly HTML). Must contain opening and closing <Blogger> tags, since they're needed to publish. templateType (string): Determines which of the blog's templates will be returned. Currently, either "main" or "archiveIndex".
新規記事のカテゴリを設定した上、投稿を行なうには、以下の手順で XML-RPC API を実行します (他にも方法はあると思います。各自で考えてみてください)。
(1) カテゴリ一覧取得 (mt.getCategoryList) (2) ユーザ(投稿者)にカテゴリ選択、投稿記事作成をしてもらう (3) 新規記事投稿 (metaWeblog.newPost) (4) 投稿した記事のカテゴリ設定変更 ((3) で返ってきた postID を引数として mt.setPostCategories 実行)
既存記事を編集して、投稿し直す場合の手順の例を示します。
(1) 記事題名一覧取得 (mt.getRecentPostTitles) (2) ユーザに編集対象記事を選択してもらう (3) 編集対象記事を取得 (metaWeblog.getPost) (4) 編集対象記事のカテゴリを取得 (mt.getPostCategories) (5) ユーザが記事の編集、カテゴリの変更を実施 (6) 既存記事上書き投稿 (metaWeblog.editPost) (7) 既存記事カテゴリ設定 (mt.setPostCategories)
ココログで XML-RPC を使う場合、サーバからの応答は UTF-8 で返ってくることになっています
(2004年1月21日現在、他のエンコーディングは未サポート)
が、
応答に ASCII 文字 (ISO8859-1) 以外の文字(例えば、漢字)が含まれるようなとき、
UTF-8 としては正しくないエンコーディングが施された状態で応答が返ってくることがあります。
例えば、「ココログ」という文字は本来、(a) に示すバイト並びとなるはずですが、
実際には (b) のようなバイト並びとなることがあります。
(a) と (b) のどちらで応答が返ってくるかは不定です。
(a) E3 82 B3 E3 82 B3 E3 83 AD E3 82 B0 (b) C3 A3 C2 82 C2 B3 C3 A3 C2 82 C2 B3 C3 A3 C2 82 C2 AD C3 A3 C2 82 C2 B0
上記の例でいうと、“(a) の E3 → (b) の C3 A3”、“82 → C2 82”、“B3 → C2 B3” のように、 (b) は (a) の バイト並びに対して、 さらに何らかのエンコーディング処理を適用したかのような形 になっています。 つまり、期待しないバイト並びが返ってきても、コードの対応に規則性があるため、 万一 (b) のような応答が返ってきても (a) を得る方法(デコードする方法)はある、 ということです。
E7 B9 A7 EF BD B3 E7 B9 A7 EF BD B3 E7 B9 9D EF BD AD E7 B9 A7 EF BD B0
Access Count: