アイカツ！のマイページから情報を取得するやつを作る その2

# はじめに

この記事は、[アイカツ！ Advent Calendar 2018](https://adventar.org/calendars/3700)の**14日目**の記事です。内容としては、現在大好評稼働中のアーケードゲーム、[データカードダス アイカツフレンズ！](http://www.aikatsu.com/friends/)のマイページから情報を取得するツールを作成中で、その内容と進捗の紹介になります。

前日の記事は[iyanayatudaze](https://adventar.org/users/7164)さんによる[スギカツフレンズ！2018 レポ - ねむい](https://yellowho.hatenablog.com/entry/2018/12/06/222352)でした。

ちなみに、これまでアイカツ！ Advent Calendar 2018では以下のような技術系記事が投稿されています。


- [アイカツ！画像でLGTMできるChrome拡張機能をストアに公開しました - matのブログ](https://romiogaku.hateblo.jp/entry/2018/12/01/223906)
    - 2日目
- [Aikatsu Music Medoly - アトリエあざらし](http://blog.a-azarashi.jp/entry/2018/12/05/060344)
    - 5日目
- [アイカツ！のマイページから情報を取得するやつを作る その1 - Qiita](https://qiita.com/kakakaya/items/0371752db771d1cede4d)
    - 7日目
- [アイカツ！のマイページから情報を取得するやつを作る 番外編その1 - 各環境で実行可能なバイナリをgoreleaserでビルドしてGitHub Releasesでリリースする](https://qiita.com/kakakaya/items/509de4f246fc27f63e66)
    - 11日目
- [冴草きいちゃんがアイカツ!画像を探してくれるdiscord botを作った話 - nyakuroのブログ](http://cat-b.hatenadiary.jp/entry/2018/12/12/204912)
    - 12日目

# aikatsu-dcd-parser
[kakakaya/aikatsu-dcd-parser: Fetch and parse Aikatsu! DCD mypage data.](https://github.com/kakakaya/aikatsu-dcd-parser)
取得及びパースをするライブラリ本体と、それを利用したCLIツールの2つが含まれており、いずれも `dcdkatsu` という名前でインポートや実行が可能です。

# 進捗
- ユーザーごとの公開デジタルバインダーの取得
- URLを指定したカードの取得

を実装し、v0.2.1としてリリースしました。

詳細は[README](https://github.com/kakakaya/aikatsu-dcd-parser/blob/v0.2.1/README.md)を参照してください。以下のようなデータが取得可能です。

## デジタルバインダー

`dcdkatsu binder <ユーザーID> <弾ID>` みたいな感じでやることで次のような結果を得られます。なお、弾IDはデジタルバインダーのページの末尾に付く数字で、12がフレンズ1弾、13がフレンズ2弾、……16がフレンズ5弾に相当します。スターズのほうとのつながりがなく、謎です。

```json
{
    "series_id":16,
    "series_name":"フレンズ5弾",
    "cards":[
        {"code":"","name":"","rarity":"","stars":"","type":"","category":"","brand":"","dress_appeal":"","appeal_point":0,"owner_id":"RX...3x","owned":false,"series_id":16,"url":"http://mypage.aikatsu.com/mypages/detail/NP10_H5_U_PR_Qt_001_T01/_00/16/RX...3x/","image_url":"http://mypage.aikatsu.com/images/cardlist/card/458005/f5-1bfr_00.png"},
        {"code":"","name":"","rarity":"","stars":"","type":"","category":"","brand":"","dress_appeal":"","appeal_point":0,"owner_id":"RX...3x","owned":false,"series_id":16,"url":"http://mypage.aikatsu.com/mypages/detail/NP10_H5_U_PR_Qt_001_B01/_00/16/RX...3x/","image_url":"http://mypage.aikatsu.com/images/cardlist/card/458005/f5-2bfr_00.png"},
        {"code":"","name":"","rarity":"","stars":"","type":"","category":"","brand":"","dress_appeal":"","appeal_point":0,"owner_id":"RX...3x","owned":false,"series_id":16,"url":"http://mypage.aikatsu.com/mypages/detail/NP10_H5_U_PR_Qt_001_S01/_00/16/RX...3x/","image_url":"http://mypage.aikatsu.com/images/cardlist/card/458005/f5-3bfr_00.png"},
        ...
    ],
    "owner_id":"RX...3x","url":"http://mypage.aikatsu.com/mypages/digital_binders/RX...3x/16","data_get_date":"2018-12-14T00:56:00+09:00"
}
```

## カード
カードについては取得がユーザーのIDと紐付いていたり、一意に推測することが困難なため、URLを指定して取得する形になっています。上記バインダーのコマンドで取得したものを使ってもよいし、いい感じにやっても大丈夫です。

`dcdkatsu card <カードURL>`

```json
{
  "code": "F5-5",
  "name": "アートレボリューショントップス",
  "rarity": "ベストフレンズレア",
  "stars": "★★★",
  "type": "キュート",
  "category": "トップス",
  "brand": "ピュアパレット",
  "dress_appeal": "ベストピュアパレットウィッシュ",
  "appeal_point": 900,
  "owner_id": "RX...3x",
  "owned": true,
  "series_id": 16,
  "url": "http://mypage.aikatsu.com/mypages/detail/NP10_H5_U_PR_Qt_002_T01/_00/16/RX...3x",
  "image_url": "http://mypage.aikatsu.com/images/cardlist/card/458005/f5-5bfr_00.png"
}
```

## ユーザー
[その1](https://qiita.com/kakakaya/items/0371752db771d1cede4d)で書いてたように、v0.1.0で実装してたけどおもしろワンライナーの動画だけ書いてたけど出力を載せ忘れてたので。

`dcdkatsu user <ユーザーID>`

```json
{
  "id": "RX...3x",
  "url": "http://mypage.aikatsu.com/mypages/index/RX...3x",
  "name": "@kakakaya",
  "avatar_url": "http://mypage.aikatsu.com/avatar/2_20-136_1-9_0_1_6-26_27_20-136_0_0.png",
  "last_play_location": "2018年12月05日・東京都",
  "cute_level": 56,
  "cool_level": 44,
  "sexy_level": 20,
  "pop_level": 16,
  "idol_rank": 43,
  "idol_rank_level": "いちにんまえのアイドル",
  "fan_count": 322722,
  "played_cards_count": 252,
  "data_get_date": "2018-12-14T01:09:00+09:00"
}

```

# おわりに
火曜にも書いたし明日が忙しいしでてんやわんやです。ネタは無限にあるのでもしかしたら土曜か日曜にも差し込むかも。

なお、今後以下のような機能の実装を考えています。

- 取得間隔の制限（サーバへの負荷を防ぐため）
- 取得可能な機能の追加
  - ログインが必要な部分の取得
    - フレンズ
    - バッジ
    - ランキング実績
    - 大会実績
    - アーカイブ
      - アイカツスターズ！1弾〜5弾
      - アイカツスターズ！星のツバサ編
      - **↑色々違っていて面倒そうという気分**
- 取得結果の保存、差分表示
- テストの作成、CI
    - やるだけ
    - ランキング周りが面倒そう
    - **v0.2.0でアホなミスしたので早く入れたい**
- リリース方法のいい感じ化
    - .debを配布したい
    - AURに置きたい
- **活用例**
    - **持ってないカード一覧出力のサンプルとか**

他にも欲しい機能やマサカリがあったら、この記事のコメントにお願いします。これは非公式なものであり、データカードダス アイカツフレンズ！公式や、バンダイナムコ、その他権利者の方に問い合わせないようお願いします。また、怒られたらすぐに消します。

明日は[kakakaya](https://adventar.org/users/24462)さんの「kakakaya/aikatsu-dcd-parser 番外編その2」です。