IRCで声優名から出演アニメをだしたい.
format
キャラクター名から声優名を出す.
!cv 戦場ヶ原ひたぎ => 斉藤千和
声優名からキャラクター名(出演アニメ)を出す.
キャラクター名はできれば今期前期のものに限る. (or 新しい順)
APIの方針
- DBをもつ
- 独自にデータを追加修正できる
- 基本データはwiki, 番組表API, syobocalなどから取得する
- Openである
- 利用制限がない
- データはtextのみ、上限100MBほどを期待する.
いくつかホスティングに利用するサービスをピックアップする.
- digital ocean
- さくらインターネット
- heroku
- google cloud platform
とりあえず、現状での学習コストと実装工数が少なそうなherokuで試して、 データがあふれるようならばバックエンドを他のサービスに切り替える感じだろうか.
APIの設計
httpでアクセス可能なopen apiを用意する。 その上で、CLIクライアントを作成する。
番組一覧
/program
[
{ program_id: "", title: "", from: "", ... }
...
]
/program/<program_id>
{
program_id: "112233",
title: "ジョジョの奇妙な冒険 第3部 -スターダストクルセイダース-",
from: "2014-04-04",
characters: [ // XXX: same as /character/<character_id>
{ character_id: "44556677", "name": "空条 承太郎", "voice": "小野大輔" },
...
]
staffs: [ // XXX: same as /staff/<staff_id>
{ staff_id: 22446677", name: "津田尚克", role: "ディレクター" }
...
]
}
/program/<program_id>/characters
[
{ character_id: "44556677", "name": "空条 承太郎", "voice": "小野大輔" },
...
]
/program/<program_id>/staffs
[
{ staff_id: 22446677", name: "津田尚克", roles: ["ディレクター"] }
...
]
キャラクター情報
/character
[
{ character_id: "44556677", name: "空条 承太郎", voice: "小野大輔", program_id: "11223344" }
...
]
/character/<character_id>
{
character_id: "44556677",
name: "空条 承太郎",
voice: "小野大輔",
program_id: "11223344"
}
声優情報
/actor
[
{ actor_id: "", name: "", ... }
]
/actor/<actor_id>
{
actor_id: "778899",
name: "小野大輔",
birth: "1978-05-04",
characters: [ // XXX: same as /character/<character_id>
{ character_id: "", program_id: "", name: "", voice: "", ... },
...
],
programs: [ // XXX: same as /program/<program_id>
{ program_id: "", ...}
...
]
}
スタッフ情報
/staff
[
{ staff_id: "22446677", name: "津田尚克", role: "ディレクター" }
...
]
/staff/<staff_id>
[
{ staff_id: "", name: "", ... }
...
]
railsつかう
なんだかんだでrails触ったことなかったのでこの際に勉強する. - https://devcenter.heroku.com/articles/getting-started-with-rails4
$ gem i rails
$ rails -v
Rails 4.1.0
$ rails new character-voice --database=mysql
$ cd character-voice
$ rails generate controller root
$ bin/rake db:create db:migrate
$ rails server
$ open http://localhost:3000/
とりあえず、表示できた。
slim と rspecを導入
参考: http://qiita.com/mist_dev/items/a1992ca24cc73c1e5154
Gemfile
+# slim
+gem 'slim-rails'
+
+group :test do
+ gem 'rspec'
+ gem 'rspec-rails'
+end
test
テストデータベース作成
$ bundle exec rake db:create db:migrate RAILS_ENV=test
テスト
$ bundle exec rake test
MVC作成
programを作成
$ rails generate scaffold program title:string from:date
seedを追加.
Program.create(title: '僕らはみんな河合荘', from: Date.new(2014, 4, 3))
Program.create(title: '悪魔のリドル', from: Date.new(2014, 4, 3))
サーバーを再起動.
$ rake db:create db:migrate
$ rails server
アクセス.
- 編集画面 : http://localhost:3000/programs
- json: http://localhost:3000/programs.json
- json: http://localhsot:3000/programs/1.json
characterもついか。 テーブルを関連付けする。
app/models/program.rb
class Program < ActiveRecord::Base
has_many :characters
end
app/views/programs/index.json.jbuilder
json.extract! program, :id, :title, :from, :characters
テーブルの関連付け
下記を参考.
- http://maskana-soft.com/rails/pro/body/143
- http://wada811.blogspot.com/2013/07/model-relationships-and-association-in-rails.html
中間テーブルに属性があったので、has_and_many_belongs_toはりようしなかった。
スクレイピング
wikipediaから情報を抜こうと思う.
casperjsをつかってみる。