プログラムの概要

スマホゲームのAPIを用いて、対戦成績に関するデータを収集し、dataframeに入れます。
※ここでは、定期的に自動でプログラムを実行する部分は未設計です。

具体的には
①空のデータフレームを作る
②必要な情報を取得する
③②を用いてSeriesにまとめる
④③を空のフレームに追加
を行おうとしています。

分からないこと

関数を定期的に実行し、DateFrameにデータを蓄積するコードの書き方。
特に、1度目実行したのち一定時間後再度実行した際に、またデータフレームが空の状態になってしまっているため、データが蓄積できていません。

※コードの書き方にエラーがでているわけではありません。

実際のコード

def selfdeck_list(name):

    columns1=["type","my","opponent","result","time"] # ①の部分
    df = pd.DataFrame(columns=columns1)

    ba = battle_info(name) # ここから②の部分
    datalist = []
    for newnum in range(0,25):

        mydecklist = [ ba[decknum]["team"][0]["cards"][numindeck]["name"] for decknum in range(0,25) for numindeck in range(0,8) ]
        opodecklist= [ ba[decknum]["opponent"][0]["cards"][numindeck]["name"] for decknum in range(0,25) for numindeck in range(0,8) ]
        decktype = [ ba[decknum]["type"] for decknum in range(0,25)]
        mycrowns = [ ba[decknum]["team"][0]["crowns"] for decknum in range(0,25)]
        opocrowns= [ ba[decknum]["opponent"][0]["crowns"] for decknum in range(0,25)]
        time = [ ba[decknum]["battleTime"] for decknum in range(0,25)]

        a = decktype[int(newnum)]
        b = tuple(mydecklist[int(newnum*8):int(newnum*8+8)])
        c = tuple(opodecklist[int(newnum*8):int(newnum*8+8)])
        if mycrowns[int(newnum)] > opocrowns[int(newnum)]:
            winorlose = "win"
        elif mycrowns[int(newnum)] < opocrowns[int(newnum)]:
            winorlose = "lose"
        else:
            winorlose = "draw"
        d = winorlose
        e = time[int(newnum)][:15]
        data = [a,b,c,d,e]
        datalist.append(data)
        record = pd.Series(datalist) # ③の部分
        df = df.append(record, ignore_index=True) # ④の部分


コード全体


import json
import requests
import pandas as pd
import numpy as np

access_key = ""

URL = 'https://api.clashroyale.com/v1'

#選手名とパスを結合する辞書を作成
dic={"みかん坊や":"%232VYJYJ09","天GOD":"%232G0QUGLU","kota":"%23889VQ8JP","RAD":"%238QRCJQ9Y","ライキジョーンズ":"%2398Q8LPQ9",
    "Jack":"%23YRVL9U98","きたっしゃん":"%23P8RLYOV9","だに":"%238LJVVGJP","けんつめし":"%23PQRR0CG9",
    "Rorapolon":"%239JPRJ9R","焼き鳥":"%232Y8GL0V2","ユイヒイロ":"%23R2GRQPCJ","Blossom":"%238Q20LRC8Y","kk19212":"%23RU2CC2LG",
    "れいや":"%232LRVG0C8","HANE×HANE":"%238Y088VU8U","Lewis":"%238Q020U0U","ピラメキ":"%232YGQGY92V","天ぷら":"%238Q2V2CGR","Scott":"%232Q98GVP9V"}

# 選手名を含むリストを作成
list= ["みかん坊や","天GOD","kota","RAD","ライキジョーンズ",
    "Jack","きたっしゃん","だに","けんつめし",
    "Rorapolon","焼き鳥","ユイヒイロ","Blossom","kk19212",
    "れいや","HANE×HANE","Lewis","ピラメキ","天ぷら","Scott"]


def battle_info(name):
    target_api = URL + "/players/"
    playerTag = dic[name]
    url = target_api+playerTag+"/battlelog"
    headers = {
        "content-type": "application/json; charset=utf-8",
        "cache-control": "max-age=60",
        "authorization": "Bearer  %s" % access_key}
    r = requests.get(url,headers=headers)
    data = r.json()
    return data

__name__ == '__battle_info__'