青空文庫APIサーバーをつくった
いわゆる勝手APIである。
エンドポイントは2つしかない。
- GET http://aozora-api.herokuapp.com/books/random.json
- 作品情報をJSONで返す
- title: 作品のタイトル
- url: URL
- opening_sentence: 書き出し
- 作品情報をJSONで返す
- GET http://aozora-api.herokuapp.com/books/random/sentences/1.json
- 書き出しのテキスト
元となるデータは以下からリンクが張ってある「「公開中 作家別作品一覧:全て(CSV形式、 zip圧縮)」をダウンロード」から入手した。
青空文庫 [licensed for non-commercial use only] / データベースからの情報提供(青空文庫API)
くふうしたところ
便利ボタンと便利おじさん
travis-ciを使ってデプロイ自動化と、Herokuボタンをつけた。
へんてこAPI
書き出しが取れる変わったエンドポイントがある。
CSVをリポジトリに保管せずHerokuのslug compile timeにダウンロードさせる
リポジトリにファイルは含みたくないけどHerokuのDynoには含まれていてほしいときに便利。
assets:precompile
する前にCSVをダウンロードするとよい。
ダウンロードしたファイルをpublic/assets/
に置きたい場合はconfig.assets.precompile
に追加しておくとよい。
Rakeで特定のタスクの前にタスクを差し込むやり方はhsbtさんのブログを参考にした。
Rake::Task['assets:precompile'].enhance(['aozora:download'])
モデルの中からasset_pathを使う
ActionController::Base.helpers.asset_path
を呼べばよい。
今後やりたいこと
明らかに重いので性能向上したい。
毎回CSVをパースしないようにCSVの作品をDBに取り込むのと、htmlをスクレイピングした結果を保存するのはやっておきたい。
あとはminitest
系列のテストの書き方を勉強するため、テストを書きたい。
まとめ
仕事Railsであまりやらないような機能を試すために趣味Railsするの、いいですね。
Rakeタスクの前後にタスクを差し込む方法や、asset_path
の呼び方や、ここには書いていないがDBを使わないRailsアプリのセットアップや、ジェネレータの無効化など、書こうとすればするほど知らないことが出てくるので。