Data APIの基本

39
Data APIの基本 MTCafe Saitama 2013 Autumn 2013/11/2 藤本

description

2013年11月2日開催の「MTCafe Saitama 2013 Autumn」のセッション「Data APIの基本」のスライドです

Transcript of Data APIの基本

Page 1: Data APIの基本

Data APIの基本MTCafe Saitama 2013 Autumn

2013/11/2藤本 壱

Page 2: Data APIの基本

今日のアジェンダ

• 自己紹介

• APIとは?

• Data APIの背景

• Data APIの概要

• Data APIの活用方法

• まとめ

Page 3: Data APIの基本

自己紹介

Page 4: Data APIの基本

自己紹介その1• 藤本 壱(ふじもと はじめ)

• 兵庫県伊丹市出身

• 群馬県前橋市在住

Page 5: Data APIの基本

自己紹介その2• 本職はPC系のフリーライター

2004年秋からMovable Typeユーザー

さまざまなプラグインを開発

Page 6: Data APIの基本

ブログももちろんMT

http://www.h-fj.com/blog/

Page 7: Data APIの基本

APIとは?

Page 8: Data APIの基本

APIとは?

• 「Application Programming Interface」の略

• あるプログラムから他のプログラムにアクセスする際のインターフェース

• APIの例

• Google Maps API• Windows API• iOSのCocoa Touchなど

• Etc.

Page 9: Data APIの基本

Web API• Web上の各種のサービスと連携する仕組み

• HTTPプロトコルでサーバーにアクセス

• XMLやJSONなどの形式でデータを交換

• 各種のプログラム言語からサーバーにアクセス可能

• 様々なWeb APIが存在

• Yahoo、Google、Amazon、楽天、リクルート、etc.

Page 10: Data APIの基本

Web APIの例

• 住所や建物から緯度経度等を取得(Google Geocoding API)http://maps.googleapis.com/maps/api/geocode/json?address=○○○&sensor=true_or_false

Page 11: Data APIの基本

Web APIの例

• この場所の情報http://maps.googleapis.com/maps/api/geocode/json?address=%E5%9F%BC%E7%8E%89%E7%9C%8C%E3%81%95%E3%81%84%E3%81%9F%E3%81%BE%E5%B8%82%E5%A4%A7%E5%AE%AE%E5%8C%BA%E5%AE%AE%E7%94%BA%EF%BC%91%E4%B8%81%E7%9B%AE%EF%BC%95%E9%8A%80%E5%BA%A7%E3%83%93%E3%83%AB7%E9%9A%8E&sensor=false

Page 12: Data APIの基本

Data APIの背景

Page 13: Data APIの基本

よくあるWebサイト

• HTMLとCSSでページを作成

• 一部にJavaScriptを入れてちょっとした動きを持たせる

• 動的なコンテンツはサーバー側(PHP等)で生成

Page 14: Data APIの基本

Webブラウザのアプリケーションプラットフォーム化

• デスクトップアプリケーションがWebアプリケーションに

• 例:Webメール、Google Maps、Google Document

• Ajaxによるレンダリング

• サーバーからデータのみ受け取り

• クライアント側でJavaScriptでレンダリング

サーバー側でのHTML生成の必要性が減少

サーバーからクライアントに生データを渡す必要性が増加

Page 15: Data APIの基本

ネイティブアプリの流行

• iOS/Androidの伸長でネイティブアプリ化

• WebアプリではiOS/Androidの機能/性能をフルには引き出せない

• ネイティブアプリの利用が増加

• PCではブラウザ、スマートフォン/タブレットではネイティブアプリで閲覧することが増加

• サーバー側との連携が必要

• HTTPでサーバーにアクセスしたい

• HTMLではなく生データが欲しい

Page 16: Data APIの基本

Data APIの登場

• Movable Typeに対してWeb APIの形式でアクセスする機能

• 生データを取得可能

• データの更新/削除も可能

• プログラム言語を問わない

• JavaScript用ライブラリあり

• HTTPアクセス/JSONパースができれば良い

• PHP、Ruby、Node.js、Objective-C、Java、etc.

Page 17: Data APIの基本

Data APIの概要

Page 18: Data APIの基本

Data APIでできること

作成 読込 更新 削除

記事 ○ ○ ○ ○

コメント ○ ○ ○ ○

トラックバック ○ ○ ○

ユーザー ○ ○

サイト

(ブログ/ウェブサイト)○

カテゴリ ○

サイトの統計 ○

アイテム ○

Page 19: Data APIの基本

JavaScriptライブラリの初期化

var api = new MT.DataAPI({baseUrl: 'http://your-host/path_to_mt/mt-data-api.cgi',clientId: 'example'

});

<script type="text/javascript" src="http://your-host/path-to-mt/mt-static/data-api/v1/js/mt-data-api.js"></script>

• ライブラリの組み込み

• 初期化

Page 20: Data APIの基本

記事の読み込み

api.listEntries(siteId, params, function(response) {if (response.error) {エラーに対する処理return;

}読み込んだ記事に対する処理

});

Page 21: Data APIの基本

MTへのログインapi.getToken(function(response) {if (response.error) {if (response.error.code === 401) {location.href = api.getAuthorizationUrl(location.href);

}else {ログイン時にエラーが起きたときの処理;

}}else {ログインに成功したときの処理

}});

Page 22: Data APIの基本

記事の投稿

api.createEntry(siteId, entryData, function(response) {if (response.error) {エラー時の処理return;

}記事作成完了時の処理

});

Page 23: Data APIの基本

PHPで記事投稿$endpoint = 'http://your_host/path_to_mt/mt-data-api.cgi/v1/sites/ウェブサイト(またはブログ)のID/entries';$postdata = array(

'entry' => json_encode(array('title' => '記事のタイトル','body' => '記事の本文',

)),);$options = array('http' =>

array('method' => 'POST','header' => array(

‘X-MT-Authorization: MTAuth accessToken=アクセストークン','Content-Type: application/x-www-form-urlencoded'

),'content' => http_build_query($postdata),

));$response = file_get_contents($endpoint, false, stream_context_create($options));

Page 24: Data APIの基本

Objective-C(iOS)で記事投稿NSURL *url = [NSURL URLWithString:@"http://your-host/path-to-mt/mt-data-api.cgi/v1/sites/ウェブサイト(またはブログ)のID/entries"];NSDictionary *entry = @{

@"title": 記事のタイトル,@"body": 記事の本文

};NSData *json = [NSJSONSerialization dataWithJSONObject:entry

options:NSJSONWritingPrettyPrinted error:&error];NSString *jsonstr = [[NSString alloc] initWithData:json encoding:NSUTF8StringEncoding];NSString *json_encoded =

(__bridge_transfer NSString *) CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge CFStringRef)jsonstr, NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8

);NSString *query = [NSString stringWithFormat:@"entry=%@", json_encoded];NSData *reqbody = [query dataUsingEncoding:NSUTF8StringEncoding];NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL: url

cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:60.0];

[request setHTTPMethod: @"POST"];[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];[request setValue:[NSString stringWithFormat:@"%d", [reqbody length]]

forHTTPHeaderField:@"Content-Length"];[request setValue:[NSString stringWithFormat:@“MTAuth accessToken=%@”,アクセストークン]

forHTTPHeaderField:@"X-MT-Authorization"];[request setHTTPBody:reqbody];[NSURLConnection sendAsynchronousRequest:request

queue:[NSOperationQueue mainQueue]completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {・・・}];

Page 25: Data APIの基本

Java(Android)で記事投稿AsyncHttpClient client = new AsyncHttpClient();JSONObject entry = new JSONObject();try {

entry.put("title", タイトル);entry.put("body", 本文);

} catch (JSONException e) {e.printStackTrace();

}RequestParams params = new RequestParams();params.put("entry", entry.toString());Header[] headers = new Header[1];headers[0] = new BasicHeader(“X-MT-Authorization”, “MTAuthaccessToken=アクセストークン”);String url = "http://your-host/path-to-mt/mt-data-api.cgi/v1/sites/ブログ(またはウェブサイト)のID/entries";client.post(getBaseContext(), url, headers, params, “application/x-www-form-urlencoded”, new JsonHttpResponseHandler() {…};

Page 26: Data APIの基本

プラグインでData APIを拡張可能

• エンドポイントの追加

• 読み込み/更新可能なフィールドの追加

• 例:記事のカテゴリを操作するプラグインhttp://www.h-fj.com/blog/archives/2013/09/30-094306.php

Page 27: Data APIの基本

Data APIの活用方法

Page 28: Data APIの基本

各種の動的処理

• 記事等の検索

• Data APIで検索条件を渡し、結果を取得してレンダリング

• メインページやアーカイブページのページ分割

• 各ページへのアクセスの際に、Data APIでデータを取得してレンダリング

Page 29: Data APIの基本

ページ分割の考え方

• Ajaxで以下のようなアドレスに接続http://your_host/mt-data-api.cgi/v1/sites/ブログID/entries?offset=○○&limit=□□□□:1ページ当たりの記事の件数○○:(ページ番号-1)*□□

• レスポンスを元にHTMLを組み立てて出力

Page 30: Data APIの基本

独自の管理画面

• mt.cgiを使わずに独自の管理画面で記事等を管理

• 例:Movable Typeの記事ページで直接編集できる「EntryEditorプラグイン」(小粋空間)http://www.koikikukan.com/archives/2013/08/08-015555.phphttp://youtu.be/EmSDvwyfWK4

Page 31: Data APIの基本

iOSアプリ/Androidアプリのバックエンド

• Movable TypeをiOSアプリ/Androidアプリのバックエンドとして使用

• Movable Typeにデータを蓄積

• Data APIでデータの取得や更新を行う

• テンプレートタグでWebページも出力

• 例:

• SNS的なサイト(iOS/Android用アプリとPCサイトの連動)

• ソーシャルゲーム(ユーザー等の情報をMovable Typeで管理)

Page 32: Data APIの基本

APIの外部提供

• 蓄積したデータをData APIで外部に公開(サイトのWebサービス化)

• 外部のプログラマに様々なアプリを開発してもらう

• Data APIをプラグインで拡張して必要なデータを提供

• 例:

• 大量の情報を扱う情報系サイト(グルメ情報、就職情報、価格情報、etc.)

Page 33: Data APIの基本

まとめ

Page 34: Data APIの基本

Data API

• Movable TypeをRESTで操作する仕組み

• 各種オブジェクトの作成/読込/更新/削除が可能

• Webアプリやネイティブアプリの開発に利用可能

Page 35: Data APIの基本

Data APIの活用のために求められること

• プログラミング

• フロンドエンド/バックエンド両方に対する理解

• デザイナー/コーダー/フロントエンドエンジニア/プログラマ等の協力体制

Page 36: Data APIの基本

One more thing

Page 37: Data APIの基本

Movable Type 6 本格活用ガイドブック

• 近日発売予定

• bit partさんとの共著

• マイナビ刊

• Featuring Data API• 予価3,444円

Page 38: Data APIの基本

Movable Type 6本格活用セミナー~マイナビ クリエイターズ Power Session Vol.3

• 11月28日(木曜日) 19時~21時• マイナビ本社(東京メトロ東西線竹橋駅)• 定員100名• 参加費

• 4000円(書籍付)

• 5000円(書籍+電子書籍付)

Page 39: Data APIの基本

ご清聴ありがとうございました