Data APIを使ってみる(その2)

Data APIは、JavaScriptに限らず、様々な言語から利用することができます。
今回は、Node.jsを使って、Data APIで情報を読み込み、それをクライアントに出力する例を紹介します。

Data APIにアクセスできる言語

Data APIは、RESTでMovable Typeにアクセスし、JSON形式でデータを受け取る仕組みです。
したがって、REST(HTTPのGETやPOSTなど)での通信と、JSONのパースに対応した言語であれば、どのような言語でもData APIにアクセスすることができます。
Node.jsも、標準で上記の処理に対応しています。

Expressで作ったサンプル

Expressを使って、インデックスページにアクセスされたときに、IDが1番のブログから、最新記事を読み込んで表示する例を作ってみました。
以下の手順で実行することができます。

アプリケーションの作成

以下のコマンドを実行して、「apitest」というアプリケーションを作ります。

express apitest
cd apitest
npm install

routes/index.jsを書き換える

routesディレクトリにあるindex.jsを、以下のように書き換えます。

var http = require('http');
var url = 'http://your_host/path_to_mt/mt-data-api.cgi/v1/sites/1/entries';

exports.index = function(req, res){
  var http_req = http.get(url, function(http_res) {
  	var data = '';
    http_res.setEncoding('utf8');
    http_res.on('data', function(str) {
	  // get data
      data += str;
    });
    http_res.on('end', function() {
      // parse json
      var json = JSON.parse(data);
      // out
      res.render('index', { entries: json.items });
    })
  });
};

リストの内容は以下の通りです。

  • 1行目
    httpモジュールを読み込みます。
  • 2行目
    接続先のData APIのアドレスを変数urlに代入します。
    「your_host」と「path_to_mt」は、ご自分の環境に合わせて書き換えてください。
  • 5行目
    Data APIに接続して、コールバック関数で結果を処理します。
  • 7行目
    受信するデータのエンコーディングをUTF-8に設定します。
  • 8~11行目
    データを受信するたびに、変数dataに連結していきます。
  • 12~17行目
    データの受信が終わったら、JSONをパースして(14行目)、その結果に基づいてページをレンダリングします(16行目)。
    JSONのitems(記事の配列)を、「entries」という変数名でテンプレートに渡します。

テンプレートを書き換える

次に、インデックスページのテンプレートを書き換えます。
ここでは、テンプレートをjadeで書いてみました。
viewsディレクトリにあるindex.jadeファイルを、以下のように書き換えます。

extends layout

block content
  h1 Entries
  ul
  - for entry in entries
    li
      a(href=entry.permalink)=entry.title

index.jsで、テンプレートに「entries」という変数(=記事の配列)を渡しました。
その配列から記事を1件ずつ読み込み、タイトルとPermalinkを出力します。