LoginSignup
0
1

More than 1 year has passed since last update.

Python&Flaskでコヨーテのカード出現率を計算するAPIを実装してみる

Posted at

こちらの記事で、今弊社で話題沸騰のカードゲーム「コヨーテ」の使用済みカードをメモするフロントエンドを実装しました。

その後、各カードの出現率がわかるともっといいなと思い、フロントエンドだけでも完結できそうですが、Python & FlaskでAPIを実装してみました。

flaskのインストール

Flaskをインストールします。
グローバルを汚したくないのでカレントディレクトリ以下にpipインストールしました。

$ pip install flask -t site-packages

APIの実装

早速APIの実装です。
少しダサいですが、GETパラメータで使ったカードのJSON文字列を受け取って、総カード数から引き算をして出現率を算出するような実装にしました。

シンプルですが以下のような感じです。

api.py
# -*- coding: utf-8 -*-
import os, sys
sys.path.append(os.path.join(os.path.dirname(__file__), 'site-packages'))

from flask import Flask, request, make_response
import json

api = Flask(__name__)

@api.route('/coyote', methods=['GET'])
def get_cards():
    cards = {
        "20": 1,
        "15": 2,
        "10": 3,
        "5": 4,
        "4": 4,
        "3": 4,
        "2": 4,
        "1": 4,
        "0": 3,
        "0 CLEAR": 1,
        "-5": 2,
        "-10": 1,
        "x2": 1,
        "MAX->0": 1,
        "?": 1,
    }
    used_cards = json.loads(request.args.get('cards', ''))

    for key in used_cards:
        cards[key] = cards[key] - used_cards[key]

    total_cards = 0
    for key in cards:
        total_cards+=cards[key]
    rate = {}
    for key in cards:
        rate[key] = cards[key] / total_cards * 100

    return make_response(rate)

if __name__ == '__main__':
    api.run(host='0.0.0.0', port=8080)

試してみる

Postmanで試してみました。

$ python3 api.py
 * Serving Flask app 'api' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on all addresses.
   WARNING: This is a development server. Do not use it in a production deployment.
 * Running on http://192.168.31.33:8080/ (Press CTRL+C to quit)

で起動して、

こんな感じです!
パーセンテージが返ってきてますね。

image.png

Github

Githubはこちらです。
IssueやPRお待ちしています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1