庚午里藻の日記

見た映画とかアニメの備忘録にしたり、パソコンいじったことのメモにしたり

前作ったFGOのwebページに新機能として必要素材数の表示機能を実装した話

どうも。2部の配信が4月だと聞いてテンションがぶち上がりつつも、待て待て4月は30日まであるから落ち着くんや・・・と思っている庚午里藻です。

kanoeuma-310mo.hatenablog.jp

前回の記事でこんなものを作った話をしたんですが、ぶっちゃけ使える機能実装してなくね?ということで、今回は少し役に立つことを意識した機能の実装を行いました。

成果物は

https://obscure-harbor-60615.herokuapp.com

においてあるのでよかったら見てください。

2018年4月26日修正 herokuのデフォルトのアドレスダサかったんで変更しました。使ってる人もほとんどいないと思って。一応以降は下のアドレス使ってください

https://kanoe310mo-fgotools.herokuapp.com

必要素材数の表示機能の概説

FGOをやっていて1番目に楽しいのがシナリオを読んでいるとき、2番目に楽しいのがサーヴァントを育成しているときです。(断言)(庚午里藻の脳内調べ)(ただ庚午里藻は通算ログイン日数が167日しかない新米マスター)(ログイン日数が短いと意見は聞いてもらえないんですか???(逆ギレ))

サーヴァントの育成にはべらぼうな数の素材が必要になるわけですが、まあ全サーヴァントの再臨・スキル強化素材を覚えてる人なんてものはいないので、多くの人は攻略サイトに走るのではないかと思います。

攻略サイトでは再臨素材やスキル強化素材が表になって示されているものが多いと思います。ちなみに僕がよく見るサイトはAppMediaと神ゲー攻略なので他のサイトが違ったらごめんなさい。

ここで問題になるのが(?)、表から自分に必要な素材の量を計算する手間です。僕の見るサイトではレベルマ・オールスキルマに必要な合計素材数こそ書いてあるのですが、そんな簡単にスキルマにできないわけで、僕の場合、10,6,6とか、6,6,6とか、6,1,1とかで手を打ちがちです。

そうすると、自分が育成したいと思っているところまでに必要な素材数は表から計算する必要が出てくるわけで、いささか面倒臭いです。じゃあそれを計算してくれるページを作ればいいじゃん!というのが今回の趣旨です。

実際の利用例

今回は僕が現在育成途中のメドゥーサ(ランサー)を例に出して、新しく実装した機能をどう使うかを説明したいと思います。

まず、こちらが僕が所持しているメドゥーサ(ランサー)の状態です。 f:id:kanoeuma_310mo:20180311002226p:plain f:id:kanoeuma_310mo:20180311002201p:plain

霊基再臨は2段階、スキルは完全に未育成という状態です。これをレベルマ、スキルを1,6,1まで育成するのに必要な素材を表示させたいときは、以下のようにします。 f:id:kanoeuma_310mo:20180311002901p:plain 入力ページにこのように入力すれば、 f:id:kanoeuma_310mo:20180311002951p:plain こんな感じで自分に必要な素材数をストレートに表示してくれます。

何をやっているのか

やってること自体は前の記事でやったコマンドカード の構成の表示と同じです。データベースから必要な素材数を入れてあるデータを引っ張ってきて、それの合計数を表示しているだけです。

今回しんどかったのはデータベースを作る方でした。前はコマンドカード の構成だけだったのと、各種攻略サイトはコマンドカード の画像を直接埋めてるだけでそこから構成を抽出する術がわからなかったのでベタ打ちでごまかしていたのですが、今回は1サーヴァントにつき、70個ぐらいある素材のうちどれを何個使うかというデータを再臨段階で4つ、スキル上げで9つ、合計13個用意しなければいけないので流石にベタ打ちは厳しい感じです。

そこで今回は、HTMLのスクレイピングでデータを集め、それをまとめたCSVファイルをデータベースに流し込むことでデータベースを作成しました。主に使ったのはpythonのbeautifulsoupです。これは、ものすごくざっくりいうとHTMLのclassやidの名前を指定するとそれと合致する場所のコードを引っ張ってきてくれるというもので、攻略サイトのサーヴァント一覧のページから各サーヴァントのページに飛んだ上で、そこから素材の情報を取得してくるというコードを書いています。pythonのbeautifulsoupを使ったスクレイピングの記事なんて既出も既出ですが、気持ちが乗ったら今回のスクレイピングの具体的な手順の記事を書こうかと思うのでよろしくお願いします。

では。