aliceの技術ブログ

技術ブログ

Princess API (matsurihi.meさん)をPythonで気軽に扱えるWrapperを書いた話

Princess APIについての説明

ミリシタ*1APIです。
以下、引用とサイトのリンクになります。

夢の世界へご招待なのです
ー プリンセス・アラモード
Public RESTful Application Programming Interface Series.
開発者向けの API を提供しています。

api.matsurihi.me

※ ミリシタの他にもデレステ*2シャニマス*3APIの提供がありますが、今回はミリシタのみのAPIを扱います。

ライブラリの利用法について

PyPiにはまだ登録していません。

GitHub https://github.com/sekine-1113/princess-api-wrapper

利用する際は

pip install git+https://github.com/sekine-1113/princess-api-wrapper.git

上記コマンドを入力することで使えるようになるかと思います。

ある程度ドキュメントは書いたつもりなので、恐らく大丈夫かと思いますが。
以下のように使うことができます。

from princessAPI import (
    API,
    Lang,
    IdolType,
    CardRarity,
    ExType,
    EventType,
)



api = API()
cards = api.get_cards(idolId=30, rarity=CardRarity.SSR, exType=ExType.SHS)
print(cards[0]["name"])

event_id = "192"

result = api.get_event_ranking_border_point(event_id)
print(result.keys())

result = api.get_event_ranking_border_point(event_id, ETag="a3ac39e6fe30e22df7544cfd818edc02")  # using ETag
print(result.keys())

APIクラスの引数として

cache, host, lang, use_etag, retry_count, retry_delay, user_agent, timeout

があります。

引数名 実引数
cache cacheクラスを継承したcacheを利用できます。
デフォルトはStaticCacheクラス(TTLCacheベース)です。
host 基本変更する必要はありません。デフォルトは'api.matsurihi.me'です。
lang 日本語以外を利用したい場合に使います。その場合consts.Langクラスを使います。
use_etag ETagを利用したい場合に使います。
デフォルトはFalseですが、一部メソッドの引数にETagが設定された場合はこれに関わらずETagを利用することが可能です。
retry_count エラー発生時に何回リトライするかを指定します。デフォルトは1です。
retry_delay エラー発生時に何秒待機するかを指定します。デフォルトは0です。
user_agent ユーザーエージェントを設定します。指定がない場合は、生成されます。
timeout タイムアウトの秒数を指定します。デフォルトは60です。

イベント関連の一部メソッドに引数ETagがありますが、ETagがある場合とない場合の挙動が少し変わります。

# ETagがない場合
dict_keys(['eventPoint', 'highScore', 'loungePoint', 'idolPoint'])
# ETagがある場合
dict_keys(['ETag', 'response'])

ETagがある場合はETagIf-None-Matchの値が、responseに従来のレスポンスが入ります。

get_idolメソッドやget_cardメソッドなど一部レスポンスは配列になる場合があります。

設計する上で工夫した点

サーバに負荷をかけにくくするため、Cacheを用いました。
HTTPステータスコードによるエラーハンドリング。
拡張性の意識。
ソースコードのドキュメント化。
ライブラリ化

まとめ

だれも読まないだろうということをいいことに工夫した点すごく雑に書いてしまった // 後で修正する

もし使う際は、提供者や情報元の方々に迷惑が掛からぬよう、自己責任でお願いいたします。

気が向いたらミリシタ以外のAPIのラッパーも書きますたぶん。

今回はこのへんで。

*1:アイドルマスターミリオンライブ!シアターデイズというアプリ

*2:アイドルマスターシンデレラガールズスターライトステージ

*3:アイドルマスターシャイニーカラーズ