RIOT APIデータの格納方法


これまで、
毎回riotapiを呼び出してデータ分析を行います.
次の問題が発生しました.
  • api鍵
  • を更新する必要がある
  • リクエスト数を超える可能性のある問題
  • そこで今回はデータをjsonファイルに保存します.
    次に、apiを呼び出さずに格納されたデータを取得することを確認します.

    .envからapiキーをインポート


    データを格納するために、
    まず、最初のコールが必要です.
    コードはWeb上の他の人と共有できます.
    独自のapiキーを変数に割り当てて使用すると、
    api keyは、不特定のユーザの盲目的な呼び出しに制限される可能性があります.
    それでapi keyを使用してenvという非表示ファイルに格納してロードする方法です.
    envの書き方がわからない方はフォローしてください😃 .env作成方法
    import os
    from dotenv import load_dotenv
    正式なドキュメントを表示する場合、osモジュールは次のようになります.
    「オペレーティングシステムと対話するための数十の関数を提供しました.」
    OSモジュールのenvironment関数を使用して、現在のPython環境の環境変数を理解します.
    私は早めに.Envのriot tokenキーとニックネームキー
    api keyとゲームニックネームをvalueとして保存しました.
    load_dotenv()
    上のコードでを行ないます.
    riot_token = os.environ['riot_token']
    nickname = os.environ['nickname']
    今apiをお願いします.

    召喚士情報を保存

    import requests
    
    summoner_info_req_url = f'https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/{nickname}?api_key={riot_token}'
    summoner_info = requests.get(summoner_info_req_url)
    予め割り当てられた変数を使用して要求urlにapiを要求します.
    with open('저장할 파일 이름','w') as json_file:
      json.dump(summoner_info.json(),json_file,ensure_ascii=False) # 한글이 포함된 경우 ensure_ascii False
    ファイル名を指定します.
    以上のリクエストの結果はjsonファイル形式で保存されました.

    試合記録を保存する


    上に保存した召唤师の情报で、合计100点を入れて保存する.
    今回保存するデータはmatch idです.
    match idを使用して、詳細なmatchデータと時間軸データをロードできます.
    with open('저장한 소환사 정보 경로','r') as file:
      my_summoner_info = json.load(file)
      
    puuid = my_summoner_info['puuid'] 
    上に保存した召喚士情報をロードしpuuidデータを取得しました.
    idのマッチングを要求する場合はpuuidを入力として必要とします.
    start = 0
    count = 100
    
    match_req_url = f'https://asia.api.riotgames.com/lol/match/v5/matches/by-puuid/{puuid}/ids?start={start}&count={count}&api_key={riot_token}'
    match_list = requests.get(match_req_url)
    開始時は0、
    countに100を入力し、データを要求します.
    最近のゲームは0から始まり、全部で100個のデータがあります.
    一度に持ってくる量は100点です.
    with open('저장할 파일 이름','w') as file:
            json.dump(match_list.json(), file, ensure_ascii=False)
    今回も上のように保存
    ここにwithを書き込むと自動的にファイルが閉じます.
    Open関数を使用してtxtファイルまたは複数のファイルを開き()を閉じない場合は、
    ファイルが常に開いていることを防止します.

    ストレージ/lol/match/v 5/matchs/{matchId}データ


    要求されたurlによって要求されたデータは、次のように呼ばれます.
    match_api
    with open('저장한 매치 아이디 목록 경로','r') as match_list_file:
        match_list = json.load(match_list_file)
    上に保存したMatchリストIDリストをmatchリストにロードします.
    リストでapiをループ呼び出します.
    # 호출 횟수 제한 
    requests_limit = 0
    
    # 리스트 순회하면서 api 호출
    for match_id in match_list:
        
        # 1초에 최대 20회
        if requests_limit==20:
            time.sleep(1)
        # 2분에 최대 100회
        elif requests_limit==100:
            time.sleep(120)
            
        # api 요청    
        match_api_req_url = f'https://asia.api.riotgames.com/lol/match/v5/matches/{match_id}?api_key={riot_token}'
        match_api = requests.get(match_api_req_url)
        
        # 호출 횟수 증가 
        requests_limit += 1
        
        # match_api 저장
        with open(f'저장할 파일 이름','w') as match_api_file:
            json.dump(match_api.json(), match_api_file, ensure_ascii=False)
            
    if requests_limit==100:
        time.sleep(120)
        

    riot apiにはコール回数制限があります.
    この制限を超えないことをお勧めします.

    呼び出し回数を超えてapiにブロックされてから数日...
    だから上にifゲートを使って意外に制限を超えないように入れました
    最後のセクションではjupyternotebookを一度に実行し、すぐに呼び出すこともできます.
    2分待つように命令した.

    記憶/lol/match/55/matchs/{matchId}/時間軸データ


    要求されたurlによって要求されたデータは、次のように呼ばれます.
    match_timeline_api
    # match_timeline_api 요청하기
    
    requests_limit = 0
    
    for match_id in match_list:
        
        if requests_limit==20:
            time.sleep(1)
        elif requests_limit==100:
            time.sleep(120)
            
        match_timeline_api_req_url = f'https://asia.api.riotgames.com/lol/match/v5/matches/{match_id}/timeline?api_key={riot_token}'
        match_timeline_api = requests.get(match_api_req_url)
        
        requests_limit += 1
        
        # match_api 저장
        with open(f'저장할 파일 이름','w') as match_timeline_api_file:
            json.dump(match_timeline_api.json(), match_timeline_api_file, ensure_ascii=False)
    
    if requests_limit==100:
        time.sleep(120)
    マッチアプリを作るときと同じように
    これで、op.ggのようなスクロール分析サイトのようにデータを蓄積できます.
    また、コールのたびにオーバーする心配はありません.データを使用できます.
    質問またはフィードバックへようこそ:)
    読んでくれてありがとう.