2015年04月10日
PowerCMS 4.1 で対応した DataAPI 関連機能について
先日リリースした PowerCMS 4.1 は、いくつかのオブジェクトで DataAPI に対応しました。
本記事ではそれらの詳細や使い方をご紹介します。
カスタムオブジェクト
PowerCMS では任意のカスタムオブジェクトを作成する機能がありますが、DataAPI で、カスタムオブジェクトの作成、取得、更新、削除ができるようになりました。
エンドポイント
カスタムオブジェクトのエンドポイントの一覧です。
それぞれのエンドポイントについて、DataAPI の JavaScript SDK (Node.js)を使ったサンプルコードを掲載しています。
DataAPI の JavaScript SDK のインストールや使い方については、下記の公式ドキュメントをご参照ください。
- movabletype/mt-data-api-sdk-js
- DataAPI SDK japanese MT.DataAPI · movabletype/mt-data-api-sdk-js Wiki
カスタムオブジェクトの作成
| HTTP メソッド | POST |
|---|---|
| ルート | /sites/:site_id/customobjects |
| パラメータ |
|
| 認証 | 必須 |
サンプルコード(Node.js)
var MT = {
DataAPI: require("mt-data-api-sdk")
};
var api = new MT.DataAPI({
baseUrl: "http://example.com/mt/mt-data-api.cgi",
clientId: "node"
});
var credential = {
username: "USER_NAME",
password: "PASSWORD",
remember: true
};
var param = {
"class": "customobject",
customobject: {
name: "カスタムオブジェクトA",
body: "カスタムオブジェクトの本文
",
keywords: "customobject,sample",
authored_on: "20150401090000",
period_on: "20160401090000",
set_period: 1,
category_id: 1,
basename: "customobject_a",
status: "PUBLISHED",
tags: ["tag1"],
customFields: [{
basename: "cf_customobject_text",
value: "カスタムフィールドの値"
}]
}
};
api.authenticate(credential, function(response) {
if (! response.error) {
api.createCustomobject(1, param, function(response) {
console.log(response);
});
}
});
カスタムオブジェクト一覧の取得
| HTTP メソッド | GET |
|---|---|
| ルート | /sites/:site_id/customobjects |
| パラメータ |
|
| 認証 | 省略可(省略した場合、取得できる情報に一部制限) |
認証しない場合、公開以外のステータスのカスタムオブジェクトは取得できません。
サンプルコード(Node.js)
var MT = {
DataAPI: require("mt-data-api-sdk")
};
var api = new MT.DataAPI({
baseUrl: "http://example.com/mt/mt-data-api.cgi",
clientId: "node"
});
var credential = {
username: "USER_NAME",
password: "PASSWORD",
remember: true
};
var param = {
"class": "customobject",
sortBy: "name",
sortOrder: "ascend",
limit: 10,
offset: 0,
status: "PUBLISHED",
search: "カスタム",
searchFields: "name",
folder: 1,
group: "カスタムオブジェクトグループA",
};
api.authenticate(credential, function(response) {
if (! response.error) {
api.listCustomobjects(1, param, function(response) {
console.log(response);
});
}
});
カスタムオブジェクトの取得
| HTTP メソッド | GET |
|---|---|
| ルート | /sites/:site_id/customobjects/:customobject_id |
| パラメータ | なし |
| 認証 | 省略可(省略した場合、取得できる情報に一部制限) |
認証しない場合、公開以外のステータスのカスタムオブジェクトは取得できません。
サンプルコード(Node.js)
var MT = {
DataAPI: require("mt-data-api-sdk")
};
var api = new MT.DataAPI({
baseUrl: "http://example.com/mt/mt-data-api.cgi",
clientId: "node"
});
var credential = {
username: "USER_NAME",
password: "PASSWORD",
remember: true
};
api.authenticate(credential, function(response) {
if (! response.error) {
api.getCustomobject(1, 1, function(response) {
console.log(response);
});
}
});
カスタムオブジェクトの更新
| HTTP メソッド | PUT |
|---|---|
| ルート | /sites/:site_id/customobjects/:customobject_id |
| パラメータ |
|
| 認証 | 必須 |
サンプルコード(Node.js)
var MT = {
DataAPI: require("mt-data-api-sdk")
};
var api = new MT.DataAPI({
baseUrl: "http://example.com/mt/mt-data-api.cgi",
clientId: "node"
});
var credential = {
username: "USER_NAME",
password: "PASSWORD",
remember: true
};
var param = {
"class": "customobject",
customobject: {
name: "カスタムオブジェクトA",
body: "カスタムオブジェクトの本文
",
keywords: "customobject,sample",
authored_on: "20150401090000",
period_on: "20160401090000",
set_period: 1,
category_id: 1,
basename: "customobject_a",
status: "PUBLISHED",
tags: ["tag1"],
customFields: [{
basename: "cf_customobject_text",
value: "カスタムフィールドの値"
}]
}
};
api.authenticate(credential, function(response) {
if (! response.error) {
api.updateCustomobject(1, 1, param, function(response) {
console.log(response);
});
}
});
カスタムオブジェクトの削除
| HTTP メソッド | DELETE |
|---|---|
| ルート | /sites/:site_id/customobjects/:customobject_id |
| パラメータ | class(カスタムオブジェクトのクラス名) |
| 認証 | 必須 |
サンプルコード(Node.js)
var MT = {
DataAPI: require("mt-data-api-sdk")
};
var api = new MT.DataAPI({
baseUrl: "http://example.com/mt/mt-data-api.cgi",
clientId: "node"
});
var credential = {
username: "USER_NAME",
password: "PASSWORD",
remember: true
};
api.authenticate(credential, function(response) {
if (! response.error) {
api.deleteCustomobject(1, 1, { 'class': 'customobject' }, function(response) {
console.log(response);
});
}
});
バナー(旧キャンペーン)
DataAPI で、バナーの作成、取得、更新、削除ができるようになりました。
エンドポイント
バナーのエンドポイントの一覧です。
バナーの作成
| HTTP メソッド | POST |
|---|---|
| ルート | /sites/:site_id/campaigns |
| パラメータ |
|
| 認証 | 必須 |
サンプルコード(Node.js)
var MT = {
DataAPI: require("mt-data-api-sdk")
};
var fs = require("fs");
var api = new MT.DataAPI({
baseUrl: "http://example.com/mt/mt-data-api.cgi",
clientId: "node"
});
var credential = {
username: "USER_NAME",
password: "PASSWORD",
remember: true
};
var param = {
campaign: {
title: "バナーA",
text: "バナーAのテキスト
",
memo: "バナーAのメモ",
publishing_on: "20150401090000",
period_on: "20160401090000",
created_on: "20150401090000",
modified_on: "20150401090000",
banner_width: 300,
banner_height: 300,
status: "PUBLISHED",
tags: ["tag1"],
customFields: [{
basename: "cf_banner_text",
value: "バナーのカスタムフィールドの値"
}]
},
image: fs.createReadStream('/path/to/image.jpg'),
movie: fs.createReadStream('/path/to/movie.mp4')
};
api.authenticate(credential, function(response) {
if (! response.error) {
api.createCampaign(1, param, function(response) {
console.log(response);
});
}
});
バナー一覧の取得
| HTTP メソッド | GET |
|---|---|
| ルート | /sites/:site_id/campaigns |
| パラメータ |
|
| 認証 | 省略可(省略した場合、取得できる情報に一部制限) |
サンプルコード(Node.js)
var MT = {
DataAPI: require("mt-data-api-sdk")
};
var api = new MT.DataAPI({
baseUrl: "http://example.com/mt/mt-data-api.cgi",
clientId: "node"
});
var credential = {
username: "USER_NAME",
password: "PASSWORD",
remember: true
};
var param = {
sortBy: "name",
sortOrder: "ascend",
limit: 10,
offset: 0,
status: "PUBLISHED",
search: "バナー",
searchFields: "name",
active: 1,
group: "バナーグループA",
};
api.authenticate(credential, function(response) {
if (! response.error) {
api.listCampaigns(1, param, function(response) {
console.log(response);
});
}
});
バナーの取得
| HTTP メソッド | GET |
|---|---|
| ルート | /sites/:site_id/campaigns/:campaign_id |
| パラメータ | なし |
| 認証 | 省略可(省略した場合、取得できる情報に一部制限) |
サンプルコード(Node.js)
var MT = {
DataAPI: require("mt-data-api-sdk")
};
var api = new MT.DataAPI({
baseUrl: "http://example.com/mt/mt-data-api.cgi",
clientId: "node"
});
var credential = {
username: "USER_NAME",
password: "PASSWORD",
remember: true
};
api.authenticate(credential, function(response) {
if (! response.error) {
api.getCampaign(1, 1, function(response) {
console.log(response);
});
}
});
バナーの更新
| HTTP メソッド | PUT |
|---|---|
| ルート | /sites/:site_id/campaigns/:campaign_id |
| パラメータ |
|
| 認証 | 必須 |
サンプルコード(Node.js)
var MT = {
DataAPI: require("mt-data-api-sdk")
};
var api = new MT.DataAPI({
baseUrl: "http://example.com/mt/mt-data-api.cgi",
clientId: "node"
});
var credential = {
username: "USER_NAME",
password: "PASSWORD",
remember: true
};
var param = {
campaign: {
title: "バナーA",
text: "バナーAのテキスト
",
memo: "バナーAのメモ",
publishing_on: "20150401090000",
period_on: "20160401090000",
created_on: "20150401090000",
modified_on: "20150401090000",
banner_width: 300,
banner_height: 300,
status: "PUBLISHED",
tags: ["tag1"],
customFields: [{
basename: "cf_banner_text",
value: "バナーのカスタムフィールドの値"
}]
},
image: fs.createReadStream('/path/to/image.jpg'),
movie: fs.createReadStream('/path/to/movie.mp4')
};
api.authenticate(credential, function(response) {
if (! response.error) {
api.updateCampaign(1, 1, param, function(response) {
console.log(response);
});
}
});
バナーの削除
| HTTP メソッド | DELETE |
|---|---|
| ルート | /sites/:site_id/campaigns/:campaign_id |
| パラメータ | なし |
| 認証 | 必須 |
サンプルコード(Node.js)
var MT = {
DataAPI: require("mt-data-api-sdk")
};
var api = new MT.DataAPI({
baseUrl: "http://example.com/mt/mt-data-api.cgi",
clientId: "node"
});
var credential = {
username: "USER_NAME",
password: "PASSWORD",
remember: true
};
api.authenticate(credential, function(response) {
if (! response.error) {
api.deleteCampaign(1, 1, function(response) {
console.log(response);
});
}
});
既存のオブジェクト
Movable Type 単体で、DataAPI は、様々なオブジェクト(記事、アイテム、テンプレート等)の作成、取得、更新、削除にそれぞれ対応していますが、PowerCMS 4.1 からは、PowerCMS で拡張したカラムも取得・更新可能になっています。
記事・ウェブページ
追加されたフィールド
| フィールド名 | 用途 | 提供元 |
|---|---|---|
unpublished |
非公開設定かどうかのフラグが格納されるフィールドです(ウェブページでは未実装) | EntryUnpublish |
pcms_unpublished_on |
非公開日時が格納されるフィールドです(ウェブページでは未実装) | EntryUnpublish |
approver_ids |
ワークフローに関わったユーザーのIDが格納されるフィールドです | EntryWorkflow |
creator_id |
記事の作成者のユーザー ID が格納されるフィールドです(ワークフロー機能は所有者を差し替えながらワークフローを回すため、最初に作成したユーザーIDはここに格納されます) | EntryWorkflow |
template_module_id |
ひな形のテンプレートモジュール ID が格納されるフィールドです | TemplateSelector |
prefs |
ひな形の表示オプション(編集画面に表示するフィールド、および、順序)が格納されるフィールドです | TemplateSelector |
サンプルコード1(Node.js)
EntryUnpublish の DataAPI の追加機能で、指定した記事(ID:25 と仮定)を日時指定非公開を設定する例です。
var MT = {
DataAPI: require("mt-data-api-sdk")
};
var api = new MT.DataAPI({
baseUrl: "http://example.com/mt/mt-data-api.cgi",
clientId: "node"
});
var credential = {
username: "USER_NAME",
password: "PASSWORD",
remember: true
};
var entry_id = 25;
var param = {
unpublished: 1,
pcms_unpublished_on: "20160401090000"
};
api.authenticate(credential, function(response) {
if (! response.error) {
api.updateEntry(1, entry_id, param, function(response) {
console.log(response);
});
}
});
サンプルコード2(Node.js)
TemplateSelector の DataAPI の追加機能で、指定したひな形(ID:30 と仮定)の表示オプションを変更(カスタムフィールドの順序を a, b, c から c, b, a に更新すると仮定。a, b, c はそれぞれカスタムフィールドのベースネーム)する例です。
var MT = {
DataAPI: require("mt-data-api-sdk")
};
var api = new MT.DataAPI({
baseUrl: "http://example.com/mt/mt-data-api.cgi",
clientId: "node"
});
var credential = {
username: "USER_NAME",
password: "PASSWORD",
remember: true
};
var entry_id = 30;
var param = {
prefs: "title,text,tags,customfield_c,customfield_b,customfield_a,category,feedback,assets"
};
api.authenticate(credential, function(response) {
if (! response.error) {
api.updateEntry(1, entry_id, param, function(response) {
console.log(response);
});
}
});
サンプルコード3(Node.js)
TemplateSelector の DataAPI の追加機能で、記事の作成時にひな形(ひな形のテンプレートモジュールの ID が 40 と仮定)を指定して、下書き保存する例です。
var MT = {
DataAPI: require("mt-data-api-sdk")
};
var api = new MT.DataAPI({
baseUrl: "http://example.com/mt/mt-data-api.cgi",
clientId: "node"
});
var credential = {
username: "USER_NAME",
password: "PASSWORD",
remember: true
};
var param = {
title: "新しい記事",
body: "新しい記事です。
",
status: "Draft",
template_module_id: 40
};
api.authenticate(credential, function(response) {
if (! response.error) {
api.createEntry(1, param, function(response) {
console.log(response);
});
}
});
テンプレート
追加されたフィールド
| フィールド名 | 用途 | 提供元 |
|---|---|---|
shift_jis |
テンプレートを再構築する際に、文字コードを Shift_JIS で出力するかどうかのフラグが格納されるフィールドです | KeitaiLib |
pager |
テンプレートを再構築する際に、ページ分割するかどうかのフラグが格納されるフィールドです | Pager |
サンプルコード3(Node.js)
KeitaiLib および、Pager の DataAPI の追加機能で、既存のインデックステンプレート(ID: 123 と仮定)を Shift_JIS に変更し、ページ分割オプションを指定する例です。
var MT = {
DataAPI: require("mt-data-api-sdk")
};
var api = new MT.DataAPI({
baseUrl: "http://example.com/mt/mt-data-api.cgi",
clientId: "node"
});
var credential = {
username: "USER_NAME",
password: "PASSWORD",
remember: true
};
var template_id = 123;
var param = {
shift_jis: 1,
pager: 1
};
api.authenticate(credential, function(response) {
if (! response.error) {
api.createEntry(1, template_id, param, function(response) {
console.log(response);
});
}
});
その他
DataAPI を利用することで、PowerCMS を管理画面経由で操作する場合との挙動の違いがなくなるように、各種処理の調整をしました。
例えば、DataAPI でテンプレートを削除した際に、ページ分割機能(Pager)で生成したページも合わせて削除するようにする処理や、DataAPI で記事を追加した際に、記事本文に含まれる画像ファイル等を自動でアイテムに保存する処理(SidebarAssets)など、管理画面経由の操作で透過的に実施される処理を DataAPI 経由の操作でも実施するような改修が含まれています。
PowerCMS 4.1 にて是非 DataAPI をご活用ください。
- カテゴリー
- PowerCMS 4
- 技術情報



コメントを投稿する