見出し画像

PrismDBにアイテムデータを追加してみた

この記事は #プリッカソン Advent Calendar 2019 の10日目の記事です。

はじめに

プリチャン筐体のコーデ管理アプリを自作して一人でこそこそ使用しているのですが、アイテムデータは所持情報とひとまとめにしてGoogle スプレッドシート(以下、スプレ)から読み込んでいるのでアプリ配布(本当にやるかはさておき)等が難しい状態でした。

※自作したコーデ管理アプリに関しては下記の記事を御覧ください。

PrismDB

さて、PrismDBはプリティーシリーズの情報をまとめる同人プラットフォームです。同人活動の一環として運用されています。

PrismDBはCharacter、Episode、Song、Liveなどプリティーシリーズに関わるデータをLOD (Linked Open Data)として公開しています。公開されているデータはRest APISPARQL Endpointから取得することが出来ます。

PrismDBをコーデ管理アプリのデータ取得先として使用するという野望のため(自分が使う上で都合の良い提案を織り交ぜながら)コツコツ筐体のアイテムのデータをPrismDBに追加しています。

Scrapingやってみた

PrismDBにアイテムデータを登録するため、プリチャンの公式HPをスクレイピングしてアイテムデータを登録しやすい形に整形します。

過去にGASを使って公式HPをスクレイピングしてアイテムデータを引っこ抜いてきた記事があるのでここでは詳細は省きます。

上記の記事はジュエル1弾の頃に書いたもの&自前のコーデ管理アプリ専用で使用していたため、アプリで表示しないデータは取得していませんでした。現在使用しているのはPrismDB用なので公式HPから取れる情報はすべて含まれています。

実際にスクレイピングを実行した生の状態が下記のスプレです。

内容を見てもらえばわかりますが公式HPの不備やスクレイピングの処理の甘さにより不完全な部分があるので、PrismDBにデータを追加する前に手動で修正を行います。例えば以下のような部分です。

・あんなコレクションの期間
 「2019-01-22」となっていますが「2020-01-22」が正しいです。
 これは月と日のみが記載されており年の表記がないため
 該当の年を特定できないためです
 うまくScriptを組めば自動対応できるかもなのですが…

・ジュエル3弾のレインボーレアのID
プロモコーデの一部
 公式HPになぜか記載されていないので自力で調べて入力します。

・ブランドなしが特定アイテムでundifinedになる
 これはGASのScriptのせいです…(が、原因が特定できていません)

本当はスクリプトを実行するだけでPrismDBを更新!なんてことができると超えもいんですが稀によく公式もしくじったりすること(itemID重複させたり…)がわかっているので、最終チェックを行う意味で手動で一手間加えるのが欠かせないかなという印象です。

データを反映させてみた

PrismDBの更新はPrismDBのリポジトリにPull Requestを送りMergeしてもらうことで行われます。具体的には「prismdb\_data\item」以下のcsvファイルを更新または追加してPull Requestを送ります。

CSVの更新にはCassava Editorを使用しています。最初はExcelを使用していたのですが謎の文字化けが回避できなかったので乗り換えました。

さて、PrismDBのアイテムデータのCSVは以下のようなラベルが並んでいます。それぞれの列が何を表すかを記載します。

key
PrismDBのKey
item_idの「大文字を小文字」に、「-」を「_」に変換した文字列
重複すると大変なことになるので注意

item_id
アイテムのID

rarity
レアリティ
KR、RR、JR、HR、SR、R、N等

name
アイテムの名前

category
アイテムのカテゴリー
トップス、ボトムス、シューズ、ヘアアクセ等

image_num
公式HPのアイテム画像の数字部分
プリチケに記載されていない

color
アイテムの色。ピンク、黄色、青など

brand
アイテムのブランド。スイートハニーなど。ブランドなしもある

type
アイテムの属性。ラブリー、ポップ、クールなど

like
いいね数

outfit_id
コーデ一式を表す文字列
「あかずきんトップス」「あかずきんスカート」「あかずきんシューズ」「あかずきんヘアアクセ」の場合は「あかずきん」

volume
排出される弾
ジュエル5弾、1弾、プロモコーデなど

series_name
volumeのサブカテゴリー
「あんなコレクション」「クリスマスチャンネル」のようなチャンネル名、「ゴールドクラス認定会」のようなイベント名、「キラッとプリ☆チャン公式ファンブックSEASON1」のような雑誌&おもちゃ名など

term_start
排出期間の開始日
YYYY-MM-DD形式

term_end
排出期間の終了日
YYYY-MM-DD形式

GASでスクレイピングしたスプレは上記のデータがすべて記載されているので、そのまま範囲をコピーしてCassava Editorで貼り付ければ完了です。

CSVの更新が終わったらGitHubのリポジトリへPull Requestを送ります。
Pull RequestがMergeされると謎の技術により自動的にデータベースが更新されます。(謎の技術というのは失礼な話なのですが、自分の理解が及ばない領域なので謎の技術とさせてください)

データを追加する側からするとCSVを編集するだけなので気が楽ですね。

おわりに

公式に記載されているアイテムデータの更新はなかなか効率よくできるようになったものの公式HPに記載されていないプロモコーデは中々手が回りにくい状態なので情報提供 or PrismDBへのPull Requestお待ちしております!

この記事が気に入ったらサポートをしてみませんか?