CinderellaAPI に「イベント最終ポイント」を追加しました

Cinderella API v2 に新たな API であるイベント最終ポイントを追加しました。

/api/v2/events/lastpoints

本件は、issue #39への対応です。

昨今流行の「モバマス順位称号作成機」でボーダーbotの API が利用されているようで、ご要望があったので追加しました。

取得可能な最終ポイント(イベント順位)について

ボーダーbotは観測範囲を適宜広げてきたという経緯と、かつあるタイミングまでは PPDB の最終結果に依存していたという歴史から、/api/v2/events/lastpoints で取得可能な最終ポイント(イベント順位)の範囲は少し複雑です。

正確には、下表の通りです。

「わたしが頑張った古の記録が残っていない;;」というケースもあるかと思います。その点はどうしようもなく、すみません。

経緯

もともと先方では /api/v2/producer/detail/[mobageId] という API を参照する実装をされていたようですが、実はこれはイベントの最終結果を保持するためのものではありません。この API は Producer Detail Info という entity (ボーダーbot内部のデータのカテゴリと思ってください)を参照していますが、これはイベント終了時点のプロデューサーの属性――ファン数や所属プロダクションなど――を記録することが目的であり、Mobage 側からの取得試行回数が多いことから稀に取得失敗となるケースもありました。ボーダーbot内では、「まあ、プロデューサーの属性は取れないこともあるけど必須ではないし、仕方ないよね」という扱いの entity です。

ボーダーbotでは、/api/v2/event/ または /api/v2/eventdetails/ ではじまる API が、 Event Point というイベントのポイント記録の entity からデータを取得する API となっています。この Event Point という entity は、ボーダーbotが絶対に取り損ねないようにしているイベントポイントのデータです。これが欠落しているケースは、少なくとも最終結果に関しては現在のボーダーbotではまずありません。

ところが、これまでは /api/v2/eventdetails/[eventDetailId]/rankings/points という API でこのデータを取得する方法しか用意していませんでした。この API はあるイベントのポイントを一気に取得できるものであり、特定イベントのポイントを取得するためのものであることから eventDetailId を API のパラメータに必ず指定せねばならないものでした。ある特定のプロデューサーの最終ポイントのみ一気にを知りたいというケースでは、この API を使う場合は(本日時点で)481回アクセスしなければならず、最終ポイントだけを知りたいというケースでは現実的ではありません。

というわけで、こういった要望には新たな API を用意しなければだめだ~となりましたので、今般新たに追加しました。

ただのぼやきなのですが、ボーダーbotは基本的に、最終結果より経時的な推移のデータが重要であり、最終結果って「おまけ」だよねという考えが根底にあります。内部データは推移データを扱いやすいよう作りこまれており、最終結果だけを簡単に取り出せるような仕組みがありません。10分毎に過去10イベントの特定経過率におけるポイントを高速で比較して出力していますから、推移データの取り出しを容易にすることにマンパワーもマシンパワーも注いでいます。

そもそもボーダーbotを始めたのは、最終結果は今は亡き PPDB さんで見ればよいものであって、 PPDB さんが扱わない推移データを出す仕組みがないから新たな仕掛けを用意しようねというところからスタートしているのもあります。

とはいえ、もはや PPDB さんは消えてしまいました。そのなかでボーダーbotに求められる API の役割は、かつてボーダーbotに求められていた時よりも、もっといろいろあると思います。こういったご要望を頂けるのは改修の気づきになるので、とてもありがたいです。