詳説 Data API 2.0 Vol.2: 強化されたアイテム処理
Data API 2.0 では、アイテムに関連する処理が大幅に増強されています。これは、エンドポイントの数もそうですが、取得するアイテムのデータについても言えます。
詳説 Data API 2.0 の連載二回目は、このアイテムについて説明します。
1.0 との違い
Data API 1.0 では、アイテムのアップロードのみサポートされていましたが、Data API 2.0 では、アイテムの取得・更新・削除・一覧という操作はもちろんの事、サムネイルの作成もできるようになります。また、1.0 のアップロード用エンドポイント /sites/{site_id}/assets/upload は、廃止候補となり、新たに /assets/upload?site_id=:site_id というエンドポイントが追加されます。
アイテムの更新ができるようになった事にともない、アイテムのリソースデータについても項目が大幅に増えています。アイテムのリソースデータの詳しい内容については、以下のドキュメントをご覧ください。Version というカラムに v2 と記述されている項目が、2.0 で新たに取得、または更新(Read Only ではない項目のみ)を行う事ができるようになった項目です。
エンドポイント解説
Data API 2.0 で利用可能なエンドポイントについて解説します。各エンドポイントで指定できるパラメータについては、各エンドポイントのドキュメントをご覧ください。
アイテムのアップロード
前述のとおり、新しいアップロード用のエンドポイントが追加されています。Data API 2.0 以降では新しいエンドポイントを使用することを推奨します。使い方は、Data API 1.0 と変わりません。ファイルをアップロードするには、accessToken を取得する必要があります。accessToken の取得については、こちらを参照してください。
- エンドポイント
POST http(s)://path/to/mt-data-api.cgi/v2/assets/upload
- サンプルコード
<form id="form"> <input type="hidden" name="site_id" value="<mt:BlogID>"> <input type="hidden" name="autoRenameIfExists" value="1"> <div>Path: <input type="text" name="path" id="path" value="/"></div> <div>File: <input type="file" name="file" id="upload_file"></div> <input type="submit"> </form>
var fd = new FormData($('#form').get(0)); var t = "MTAuth accessToken=" + TOKE_IN_THIS_SESSION; $.ajax({ url: "http://path/to/mt-data-api.cgi/v2/assets/upload", type: "POST", data: fd, processData: false, contentType: false, dataType: 'json', headers: { 'X-MT-Authorization': t } }) .done(function( data ) { console.log(data); });
サムネイルを作成する
特定の画像アイテムのサムネイルを作成することができます。
- エンドポイント
GET http(s)://path/to/mt-data-api.cgi/v2/sites/:site_id/assets/:asset_id/thumnail
- サンプルコード
$.ajax({ url: "http://path/to/mt-data-api.cgi/v2/sites/<mt:BlogID>/assets/" +asset_id + "/thumbnail?width=200&square=1", type: "GET", dataType: 'json' }) .done(function( data ) { $('#result').append('<img src="' + data.url + '" width="200">'); });
アイテムの一覧を取得する
アイテムの一覧を取得する方法として4種類のエンドポイントを用意しました。
サイトに登録されているアイテムの一覧を取得する
ウェブサイト又はブログに登録されているアイテムの一覧を取得する事ができます。
- エンドポイント
GET http(s)://path/to/mt-data-api.cgi/v2/sites/:site_id/assets
- サンプル
$.ajax({ url: "http://localhost/cgi-bin/mt/mt-data-api.cgi/v2/sites/<mt:BlogID>/assets", type: "GET", dataType: 'json', }) .done(function( data ) { console.log(data); });
記事に関連付いているアイテムの一覧を取得する
特定の記事と関連づけされているアイテムの一覧を取得する事ができます。
- エンドポイント
GET http(s)://path/to/mt-data-api.cgi/v2/sites/:site_id/entries/:entry_id/assets
- サンプル
$.ajax({ url: "http://localhost/cgi-bin/mt/mt-data-api.cgi/v2/sites/<mt:BlogID>/entries/1/assets", type: "GET", dataType: 'json', }) .done(function( data ) { console.log(data); });
ウェブページに関連付いているアイテムの一覧を取得する
特定のウェブページと関連づけされているアイテムの一覧を取得する事ができます。
- エンドポイント
GET http(s)://path/to/mt-data-api.cgi/v2/sites/:site_id/pages/:page_id/assets
- サンプル
$.ajax({ url: "http://localhost/cgi-bin/mt/mt-data-api.cgi/v2/sites/<mt:BlogID>/pages/1/assets", type: "GET", dataType: 'json', }) .done(function( data ) { console.log(data); });
タグが割り当てられているアイテムの一覧を取得する
特定のタグが割り当てられているアイテムの一覧を取得する事ができます。
- エンドポイント
GET http(s)://path/to/mt-data-api.cgi/v2/sites/:site_id/tags/:tag_id/assets
サンプル
$.ajax({ url: "http://localhost/cgi-bin/mt/mt-data-api.cgi/v2/sites/<mt:BlogID>/tags/1/assets", type: "GET", dataType: 'json', }) .done(function( data ) { console.log(data); });
アイテムを取得する
特定のアイテムについての情報を取得することができます。
- エンドポイント
GET http(s)://path/to/mt-data-api.cgi/v2/sites/:site_id/assets
- サンプル
$.ajax({ url: "http://localhost/cgi-bin/mt/mt-data-api.cgi/v2/sites/<mt:BlogID>/assets/1", type: "GET", dataType: 'json', }) .done(function( data ) { console.log(data); });
アイテムの情報を更新する
特定のアイテムの情報を更新することができます。ユーザー認証が必要です。
- エンドポイント
PUT http(s)://path/to/mt-data-api.cgi/v2/sites/:site_id/assets/:asset_id
- サンプル
// 更新対象を取得 (ID: 1) $.ajax({ url: "http://localhost/cgi-bin/mt/mt-data-api.cgi/v2/sites/<mt:BlogID>/assets/1", type: "GET", dataType: 'json', }) .done(function( data ) { var t = "MTAuth accessToken=" + token.accessToken; data.description = "New Description"; $.ajax({ url: "http://localhost/cgi-bin/mt/mt-data-api.cgi/v2/sites/<mt:BlogID>/assets/" + data.id, type: "PUT", data: { asset: JSON.stringify(data) }, dataType: 'json', headers: { 'X-MT-Authorization': t } }) .done(function(data){ console.log(data); }); });
アイテムを削除する
特定のアイテムを削除することができます。ユーザー認証が必要です。返却される Assets リソースは、すでに Movable Type 上からは削除されています。更新などには利用できません。
- エンドポイント
DELETE http(s)://path/to/mt-data-api.cgi/v2/sites/:site_id/assets/:asset_id
- サンプル
// 削除対象を取得 (ID: 1) $.ajax({ url: "http://localhost/cgi-bin/mt/mt-data-api.cgi/v2/sites/<mt:BlogID>/assets/1", type: "GET", dataType: 'json', }) .done(function( data ) { var t = "MTAuth accessToken=" + token.accessToken; data.description = "New Description"; $.ajax({ url: "http://localhost/cgi-bin/mt/mt-data-api.cgi/v2/sites/<mt:BlogID>/assets/" + data.id, type: "DELETE", data: { asset: JSON.stringify(data) }, dataType: 'json', headers: { 'X-MT-Authorization': t } }) .done(function(data){ console.log(data); }); });
Appendix
アクセストークンを取得する
ユーザー認証が必要なエンドポイントへアクセスする場合、AccessToken を取得する必要があります。ブラウザーから利用する場合は、Movable Type が表示する認証画面を経由して AccessToken を取得する方法を推奨しています。
<button id="login" name="login" value="login">Login</button>
$('#login').click( function() {
location.href = "http://path/to/mt-data-api.cgi/v2/authorization?redirectUrl=" + encodeURIComponent( window.location ) + "&clientId=YOUR-APP-ID";
});
/v2/authorization というエンドポイントに、redirectUrl と clientId を指定して呼び出すと、おなじみの Movable Type の認証画面にリダイレクトされます。入力された認証情報が正しければ、redirectUrl に指定された URL に mt_data_api_access_token というCookie 付きでリダイレクトされます。リダイレクトされたページでは、Cookie に入っている accessToken の値を AccessToken として利用します。