Edited at

放映中のアニメ作品の情報を提供するAnime RESTful API サーバー作りました

More than 3 years have passed since last update.

現在放映されているアニメ作品の公式アカウントのグラフ化をするanime_followerというTwitterボットを作っています。

https://twitter.com/anime_follower

CERCRBdXIAERWfn.png-large.png

こんなの

システムの構成図は以下です


現行システム構成図

OLD-sora.png

アニメ作品を管理するデータベースとアプリケーションサーバーがペアとなって、メイン系統と待機系で別々の場所の物理サーバーで稼働しています。

でもこの構成って面倒なんですよね。

データベースの同期をとったりするのが面倒なのでREST化したかった。

なので、REST API化してデータベースは一本化することにしました。


新システム構成図

sora.png

そもそも放送クールごとのアニメ作品のデータをちゃんと管理してREST APIで提供してくれるサービスがないんですよね。

テレビ番組系のAPIならあるんですが、公式URLとかTwitterアカウントとか監督名などのデータまで管理しているAPIはない。。

アニ◯イトとか、クールなんたらとかやってる某国がアニメなんたらIT協会とか作って提供してくれればいいんですが・・・。

メディア芸術データベース ←これもHTMLだけのデータ提供とかいう中世ジャップランド仕様だし。。血税使ってこれかよ。。

オタク作品系の体裁がととのった正確無比な情報って作れないから難しいのは確かにあるんですが。

データ間違ってたら責任誰がとるの問題とかあるし。。


どの会社も作ってくれないのでAnime API作ってみた

つまるところ、今までDBでマスター管理してた部分をREST JSON化しただけです。

少なくとも自分が使うので一般APIとして公開してみます。

アニメ作品の情報とかそれぞれのオタク系のサービスのサイトでDBでマスター管理してると思うんですが本当無駄じゃないですかね。。。

なぜ作らなかった。。絶対そのうち黒船企業が作って日本企業(笑)なるいつものパターンな気がします。


ShangriLa Anime API V1 仕様書


取り扱うデータ

2014年以降のアニメ作品

(※過去のも追加予定はあり)


エンドポイント

http://api.moemoe.tokyo/anime/v1


認証

V1では認証を行いません。


レートリミット

なし


GET /anime/v1/master/cours

ShangriLa API Serverが持っているアニメ情報のクールごとの情報のリストを返却します。


Request Body

なし


Response Body

Property
Value
description
Sample

cours_idの値
Cours Object
cours_idはシステムで割り振ったクールごとのユニークなID(coursマスターのID)
1


Cours Object

Property
Value
description
Sample

id
Number
cours_id
6

year
Number
該当する西暦(YYYY)
2015

cours
Number
yearの中での順番[1〜4]
2

レスポンス例

 $curl http://api.moemoe.tokyo/anime/v1/master/cours | jq .

{
"4": {
"id": 4,
"year": 2014,
"cours": 4
},
"5": {
"id": 5,
"year": 2015,
"cours": 1
},
"6": {
"id": 6,
"year": 2015,
"cours": 2
}
}


GET /aime/v1/master/:year

:yearで指定されたYYYY年のアニメ1クールから4クールまでの情報をすべて返却します


Request Body

なし


Response Body

Property
Value
description
Sample

Array
Base Object
データがない場合は空の配列


Base Object

Property
Value
description
Sample

id
Number
APIで管理するアニメ作品に割り当てられているユニークなID
125

title
String
アニメ作品名
"冴えない彼女の育てかた"

レスポンス例

curl http://api.moemoe.tokyo/anime/v1/master/2015 | jq .

[
{
"id": 124,
"title": "幸腹グラフィティ"
},
{
"id": 125,
"title": "銃皇無尽のファフニール"
},
{
"id": 126,
"title": "冴えない彼女の育てかた"
},
{
"id": 127,
"title": "暗殺教室"
},
{
"id": 129,
"title": "探偵歌劇ミルキィホームズTD"
}
]


GET /anime/v1/master/:year/:n

:yearで指定されたYYYY年アニメの:nで指定されたクールの情報をすべて返します。


  • /2015/1 だったら2015年1期(冬期) のアニメ作品情報を全て返却します。

  • /2015/2 だったら2015年2期(春期) のアニメ作品情報を全て返却します。


Request Body

なし


Response Body

Property
Value
description
Sample

Array
Base Object
データがない場合は空の配列


Base Object

requiredに◯がないものは値なし(=データメンテナンスしていない)の場合があります。

またプロパティは追加される可能性があります。

Property
Value
Required
description
Sample

id
Number

APIで管理するアニメ作品に割り当てられているユニークなID
125

title
String

アニメ作品名
"冴えない彼女の育てかた"

title_short1
String
-
アニメ作品名の略称1
"冴えカノ"

title_short2
String
-
アニメ作品名の略称2

title_short3
String
-
アニメ作品名の略称3

public_url
String

アニメ作品の公式URL
"http://www.saenai.tv/"

twitter_account
String

ツイッターアカウント
"saenai_heroine"

twitter_hash_tag
String

ツイッターハッシュタグ
"saekano"

cours_id
Number

coursマスターのID
5

created_at
String

データの作成日時
"2015-01-08 09:37:01.0"

updated_at
String

データの更新日時
"2015-01-08 09:37:01.0"

sex
Number
-
男性向け=0, 女性向け=1
0

sequel
Number
-
続編モノの場合は1以上の数値が入る
0

レスポンス例

curl http://api.moemoe.tokyo/anime/v1/master/2015/2 | jq .

[
{
"title_short2": "",
"twitter_account": "saenai_heroine",
"public_url": "http://www.saenai.tv/",
"title_short1": "冴えカノ",
"sex": 0,
"twitter_hash_tag": "saekano",
"id": 126,
"sequel": 0,
"created_at": "2015-01-08 09:37:01.0",
"cours_id": 5,
"title": "冴えない彼女の育てかた",
"title_short3": "",
"updated_at": "2015-01-08 09:37:01.0"
},
{
"title_short2": "",
"twitter_account": "ansatsu_anime",
"public_url": "",
"title_short1": "暗殺教室",
"sex": 0,
"twitter_hash_tag": "暗殺教室",
"id": 127,
"sequel": 0,
"created_at": "2015-01-08 09:38:00.0",
"cours_id": 5,
"title": "暗殺教室",
"title_short3": "",
"updated_at": "2015-01-08 09:38:00.0"
},
]


データの信頼性について

anime_followerのTwitterアカウントが1年半ぐらいほぼ問題なく24時間稼働しているので信頼性はそれがベースです。

少なくともツイッターのアカウント数のグラフ化は続けるためその間はマスターデータは更新されます。


アニメ作品のデータの追加タイミング

対象のクールが始まる直前ぐらいにマスターは追加されます。

次は2015年6月末ぐらいに夏アニメのマスターが追加されます。


ソースコード

サーバーのソース

https://github.com/Project-ShangriLa/sora-playframework-scala


この記事以降に追加されたAPIのエンドポイント

https://github.com/Project-ShangriLa/sana_server