# Leeno API 概要
## エンドポイント
LeenoAPIは、取得できるリソースに応じた以下のエンドポイントを持ちます。
* 単一キャンバス http://leeno.jp/api/canvas
* 複数キャンバス http://leeno.jp/api/canvases
* 単一ヒストリ http://leeno.jp/api/history
* 複数ヒストリ http://leeno.jp/api/histories
## APIで取得できるデータ
* 文字コードはUTF-8です。
* すべてのリクエストに対してJSON形式で結果を返します。
* 結果のJSONはresult, status, messageのフィールドを持ちます。
| field | content |
| result | 結果データがJSON形式で入ります。リクエストにエラーがあった場合、空文字列になります。 |
| status | "ok"もしくは"error"いずれかの文字列を返します。 |
| message | リクエストが正常に完了した場合、空文字列になります。エラーがあった場合はエラーメッセージが格納されます。 |
HTTPステータスコードは200(正常), 404(データがない), 500(サーバーエラー)のいずれかとなります。エラーの詳細については末尾の"例外処理"を参照して下さい。
# Leeno API 利用方法
## 単一キャンバス
エンドポイント: http://leeno.jp/api/canvas
### クエリで利用可能なパラメータ
* canvas_id
* canvas_idを指定しない場合、最新のCanvasが返ります。
### result に格納されるフィールド
* "canvas_id": Canvasのid
* "title": Canvasのタイトル
* "name": 投稿者
* "tags": Canvasに付けられたタグの配列
* "width": 画像の幅
* "height": 画像の高さ
* "total_history": Canvasが持つHistoryの総数
* "total_favorite": Canvasに付けられたfavoriteの総数
* "create_date": Cavnasが作成された日時。例: "2012-03-15T02:16:01Z"
* "update_date": Cavnasの最終更新日時。 例: "2012-03-15T02:16:16Z"
### 利用例
canvas_idを指定することで単一のCanvas情報を取得します。canvas_idとは、
http://leeno.jp/c/1ch-18
というURLの場合 `1ch` の部分を指します。
~~~~sh
$ curl "http://leeno.jp/api/canvas?canvas_id=m0"
{"result":{"canvas_id":"m0",
"title":"\u30bf\u30a4\u30c8\u30eb\u7121\u3057",
"name":"\u540d\u7121\u3057\u3055\u3093",
"tags":["Tag", "hogehoge"],
"width":600,
"height":400,
"total_history":2,
"total_favorite":0,
"create_date":"2012-03-15T02:16:01Z",
"update_date":"2012-03-15T02:16:16Z"},
"status":"ok",
"message":""}
~~~~
canvas_idを指定しない場合、最新のCanvasが返ります。
~~~~sh
$ curl "http://leeno.jp/api/canvas"
{"result":{"canvas_id":"m0",
"title":"\u30bf\u30a4\u30c8\u30eb\u7121\u3057",
"name":"\u540d\u7121\u3057\u3055\u3093",
"tags":["hoge", "\u305f\u3050\u3093"],
"width":600,
"height":400,
"total_history":2,
"total_favorite":0,
"create_date":"2012-03-15T11:16:01+09:00",
"update_date":"2012-03-15T11:16:16+09:00"},
"status":"ok",
"message":""}
~~~~~~
## 複数キャンバス
エンドポイント: http://leeno.jp/api/canvases
### クエリで利用可能なパラメータ
以下のクエリでCanvasを絞り込み、複数のCanvasを取得します。
* prof: ユーザのプロフィール画像Canvasを検索対象とするフラグ。trueにした場合プロフィール画像のみを検索する。 (true or false. default: false)
* look_up_time: 作成日と更新日のどちらで検索するか。from, to, between, orderに影響する。 (created_at or updated_at. default: created_at)
* from: 日時文字列。例: "2012-03-21", "2012-03-21T10:30:00"
* to: 日時文字列。書式はfromと同じ。
* between: 現在からどれだけの期間をさかのぼって検索するかを指定する。1日以内、1週間以内、1ヶ月以内が選択できる。 (daily, weekly or monthly. default: 指定なし)
* order: ソート順を指定する。新しい順、古い順、Redraw数順の3通りが選択できる。 (new, old or redraw. default: new)
* limit: 取得する結果の数を制限する。(default: 30)
* offset: 獲得する結果のオフセット値(最初のN件を飛ばす)を指定する。(default: 0)
#### 注意点
* パラメータなしでリクエストを行った場合、最新30個のキャンバスが返ります。
* クエリにcanvas_idを指定したとき、単一キャンバスAPIへのリクエストと同じ結果を返します。
### result に格納されるフィールド
ひとつのCanvasが持つフィールドは、単一キャンバスAPIと同じです。ヒットした数だけ配列としてresultに格納されます。
### 利用例
~~~~sh
$ curl "http://leeno.jp/api/canvases?between=monthly&order=redraw"
{"result":[{"canvas_id":"m0",
"title":"\u30bf\u30a4\u30c8\u30eb\u7121\u3057",
"name":"\u540d\u7121\u3057\u3055\u3093",
"tags":["hoge", "\u305f\u3050\u3093"],
"width":600,
"height":400,
"total_history":2,
"total_favorite":0,
"create_date":"2012-03-15T02:16:01Z",
"update_date":"2012-03-15T02:16:16Z"},
{"canvas_id":"lz",
"title":"taitotuuuuuuuuuuuuuuuuuuuu",
"name":"Hash",
"tags":["Tag"],
"width":600,
"height":400,
"total_history":1,
"total_favorite":0,
"create_date":"2012-03-03T08:12:45Z",
"update_date":"2012-03-03T08:12:46Z"}],
"status":"ok",
"message":""}
~~~~
上記の例では2つのCanvasがヒットしています。
## 単一ヒストリ
エンドポイント: http://leeno.jp/api/history
LeenoではひとつのCanvasが複数のredraw履歴を持っており、それぞれのredraw履歴をHistoryと呼びます。別の言い方をすると、ひとつのHistoryは1枚の絵に対応し、HistoryはいずれかのCanvasに所属します。図示すると以下のようになります。

したがって、単一のHistoryを取得するには、canvas_idとhistory_idの双方を指定することが必要です。history_idとは、
http://leeno.jp/c/1ch-18
というURLの場合 `18` の部分を指します。
### クエリで利用可能なパラメータ
* canvas_id(必須)
* history_id(必須)
#### 注意点
* パラメータにcanvas_idとhistory_idの両方が含まれていない場合、エラーとなります。
### resultに格納されるフィールド
* "history_id": 数値。
* "parent_id": Historyのredraw元。nullの場合は一番最初のHistory.
* "canvas_id": Historyが所属するCanvasのid.
* "image_large": オリジナルサイズの画像URL
* "image_small": 小さいサイズの画像URL(125x125)
* "image_thumb": サムネイルサイズの画像URL(60x60)
* "create_date": Historyの作成日時。 例: "2012-03-15T02:16:01Z",
* "update_date": Historyの最終更新日時。 例: "2012-03-15T02:16:01Z"
### 利用例
~~~~~~~sh
$ curl "http://leeno.jp/api/history?canvas_id=m0&history_id=1"
{"result":{"history_id":1,
"parent_id":null,
"canvas_id":"m0",
"image_large":"http://leeno.jp/c/m0-1/image.png",
"image_small":"http://leeno.jp/c/m0-1/thumb.png",
"image_thumb":"http://leeno.jp/c/m0-1/small_thumb.png",
"create_date":"2012-03-15T11:16:01+09:00",
"update_date":"2012-03-15T11:16:01+09:00"},
"status":"ok",
"message":""}
~~~~~~~~
## 複数ヒストリ
エンドポイント: http://leeno.jp/api/histories
あるCanvasに紐尽くHistoryを返します。
### クエリで利用可能なパラメータ
* canvas_id(必須)
### 利用例
~~~~~~~sh
$ curl "http://leeno.jp/api/histories?canvas_id=m0"
{"result":[{"history_id":1,
"parent_id":null,
"canvas_id":"m0",
"image_large":"http://leeno.jp/c/m0-1/image.png",
"image_small":"http://leeno.jp/c/m0-1/thumb.png",
"image_thumb":"http://leeno.jp/c/m0-1/small_thumb.png",
"create_date":"2012-03-15T11:16:01+09:00",
"update_date":"2012-03-15T11:16:01+09:00"},
{"history_id":2,
"parent_id":1,
"canvas_id":"m0",
"image_large":"http://leeno.jp/c/m0-2/image.png",
"image_small":"http://leeno.jp/c/m0-2/thumb.png",
"image_thumb":"http://leeno.jp/c/m0-2/small_thumb.png",
"create_date":"2012-03-15T11:16:16+09:00",
"update_date":"2012-03-15T11:16:17+09:00"}],
"status":"ok",
"message":""}
~~~~~~~
## 例外処理
### パスが不正な場合 `HTTP Status Code = 404`
{"result":"","status":"error","message":"The requested URL is Invalid"}
* エンドポイントと引数を確認して下さい。
### Canvas/Historyが存在しない場合 `HTTP Status Code = 404`
{"result":"","status":"error","message":"Data Not Found"}
* リクエストしたcanvas_id, history_idなどが存在することを確認して下さい。
### サーバーエラーが発生した場合 `HTTP Status Code = 500`
{"result":"","status":"error","message":"Internal Server Error"}
* メンテナンス中の可能性があります。時間をおいて再度お試し下さい。
* エラーが続く場合、[問い合わせフォーム](http://leeno.jp/about/mail) からお問い合わせ下さい。