Published

31-08-2018

←Home

djangoアプリをつくってherokuに公開しました

タイトル通り,djangoアプリをつくってherokuに公開しました.

kj8recordrecord という趣味全開のアプリです.

URL: https://kj8-record-record.herokuapp.com

githubにコードをあげています.

どんなアプリ?

関ジャニ∞の曲名・CD情報を表示するアプリケーションです(関ジャニ∞だけです)

表示できること

  • CD一覧
  • CDの収録曲
  • 表示された曲と同じ曲名が収録されたCD

作成手順

  1. データ作成
  2. データベースにいれる
  3. 表示機能の作成
  4. herokuにdeploy

それぞれ詳細について書きます.

データ作成

欲しいデータは以下のようなもの.

  • CD : タイトル, シングルorアルバム, 発売日 (model : Disc)
  • 曲 : タイトル, 収録されているCD, CD内の曲順 (model : Song)

早速曲情報データベースから取得しようとしたものの

  • ジャスラック :曲情報だけ
  • MusicBrain:2014年で情報が止まっている
  • freedb: 情報にヌケモレがあるためスクレイピング後にゴミ取り作業が発生する

といった理由から, 最終的にはwikipediaからスクレイピングすることにしました.

関ジャニ∞のディスコグラフィからCD情報を取得. その後それぞれのCDページのurlを取得し, ページごと曲名を取得しました.

主に使ったのはrequestsbeautifulSoup. 同じアーティストの場合, だいたい同じフォーマットで曲名をまとめているので特に苦しまずに一括で取得できました.

(wikipediaは曲一覧の書き方が表・リストなど多様であるという知見を得る)

データベースにいれる

djangoで設定したデータベース(sqlite)に取得したデータを入れます. 一個一個shellで入れても良かったのですが, 今回はinitial_dataのフォーマットに変換してloaddataすることにしました.(細かい話はここを参考に)

  • 入れたい情報fieldsとは別にmodelpkが必要なので結構手間取りました

この時点でdjangoのガワ(model定義など)は作成していたのですが, 曲とCDに関係を貼りたかったためモデルにForeignKeyを使っていたりして初期データ作成に結構手間取りました. スクレイピング時点ではcsvに保存していたのでpandasをつかってjsonに変換していきました.

欲しい情報をきちんと定義し, 直接jsonへ変換すべきだったかもしれないです...

ちなみに, データベースにいれてからのデータの修正は直接コマンドを叩いて行いました参考

表示機能の作成

ここらへんは普通のdjangoアプリとだいたい同じ工程です.

表示したいページごとにview.pyにコードを書くのは結構手間です.しかし, チュートリアルでもある通りテンプレート表示はいろいろと工夫できます. 今回はgeneric viewをはじめて使ってみました. かなり便利.

  • 日本語だとこのqiitaがいい感じにまとまっています.
フロントエンド部分

表示のオシャレさを追求したかったので, 色々なツールを試しました.

  • フレームワーク : Pure css
    • paddingで手間取ってしまったのでメモ
  • 背景画像 : trianglify メンバーカラーの7色を使ったグラデーションを意識
  • アイコン : fontawesome infinityアイコンをロゴっぽく使用

herokuにdeploy

herokuアプリに今あるデータを移行したいので, ローカルのデータベースにあるデータをdumpdataで保存します.(最初にloaddataしたデータを修正しているためバックアップも兼ねて別ファイルに保存しました)

python manage.py dumpdata songinfo.Song songinfo.Disc --format json --indent 1 > songinfo/fixtures/dump_info.json

このjsonファイルをふくめherokuにdeployしました.(deployの仕方は色んなサイトで紹介されているので割愛) heroku上のデータベースを初期化しloaddataすればローカルと同じデータを反映できます.

heroku run python manage.py migrate
heroku run python manage.py createsuperuser
heroku run python manage.py loaddata song/fixtures/dump_info.json
deploy時のエラー

deployするとエラーがでまくるのは仕方ないのですが,

  • データベースを初期化
  • requirements
  • pythonのバージョン指定
  • wsgiの書き方

とかはやっぱり忘れ/間違いやすいので注意しなきゃなと思いました.

また, 最初はgithubからdeployしようと思ったのですがpythonだとできないっぽいので普通にCLIでやりました.できたら便利なのですが...

最後に

頑張ったポイントがほぼデータ作成でした. webからデータとってくるのって本当に大変だなと改めて感じています.

本当は未音原化の曲やライブDVDに関する情報も取得したかったのですが今のモデル定義に組み込むのがめんど...大変そうなので今回は諦めました.

もう少し便利機能を追加できたらいいなあと思っています. また, 新曲が追加されたら現時点では手打ちするしかないので今後の課題です.自動化したい.


新曲といえば.

2018/9/5に新曲「ここに」が発売されます.

6人体制になってからはじめての新曲. ぜひとも注目.

share:

Go Top