質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.60%

  • Python 3.x

    5900questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

LOL riot apiを利用して一人のプレイヤーの全マッチデータを取得したい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 312

grilled_python

score 169

riot apiを利用して一人のプレイヤーの全てのマッチ(戦闘)情報を取得したい。
全部で300試合ほどあるのに147件分しか取得できていない。

riotはゲーム会社の名前で、league of legendsという世界一プレイ人口が多いと触れ込みの対戦型ゲームを運営しています。

apiの利用は初めてで、jsonの処理の練習がしたくて始めました。
まず、直接APIを利用するのではなくRiotWatcherという便利なモジュールがあるようなのでこれを使用したいと思います。

python3.6

使用モジュール
RiotWatcher2.2.2

公式apiドキュメント
https://developer.riotgames.com/api-methods/#match-v3/GET_getMatch

参考にした記事
https://qiita.com/KUWAING/items/7f3be2460d3587dedf72

APIを利用している大手サイト
http://jp.op.gg/l=ja

from riotwatcher import RiotWatcher

watcher = RiotWatcher('ここにapi keyが入ります。')

my_region = 'kr'
#自身の所属するリージョン

me = watcher.summoner.by_name(my_region, 'サモナーネームが入ります')
#サモナーネームからアカウントIDなどを取得

my_ranked_stats = watcher.league.positions_by_summoner(my_region, me['id'])
#サモナーの基本的なランクのデータです

recentmatchlists = watcher.match.matchlist_by_account_recent(my_region,me['accountId'])
#直近20試合のデータが見れます


all_matchlist = watcher.match.matchlist_by_account(my_region,me['accountId'])
#全マッチリスト情報を取得したいがすべて取得できていない147件しか取得できていない300件以上はあるはず



print(recentmatchlists)
#直近20試合のデータが見れます

print(all_matchlist)
#マッチリストを全部取得できるはずだったのですが・・・

参考にした記事道理に進めると直近20試合のデータを無事取得することができました。

recentmatchlists = watcher.match.matchlist_by_account_recent(my_region,me['accountId'])
#直近20試合のデータが見れます

これで全部のマッチリストを取得できるかと思ったんですが、

all_matchlist = watcher.match.matchlist_by_account(my_region,me['accountId'])
#全マッチリスト情報を取得したいがすべて取得できていない147件しか取得できていない
#全部で300件はあるはず

どうも147件しか取得できていませんでした。なにか制限があるのかなと思ったんですが、大手API利用サイトで確認すると300件ほどの全試合の情報が表示されています。

公式ドキュメントを見てみると

A number of optional parameters are provided for filtering. It is up to the caller to ensure that the combination of filter parameters provided is valid for the requested account, otherwise, no matches may be returned. If beginIndex is specified, but not endIndex, then endIndex defaults to beginIndex+100. If endIndex is specified, but not beginIndex, then beginIndex defaults to 0. If both are specified, then endIndex must be greater than beginIndex. The maximum range allowed is 100, otherwise a 400 error code is returned. If beginTime is specified, but not endTime, then these parameters are ignored. If endTime is specified, but not beginTime, then beginTime defaults to the start of the account's match history. If both are specified, then endTime should be greater than beginTime. The maximum time range allowed is one week, otherwise a 400 error code is returned.

1週間分しか保存されていないということでしょうか?
だとしたらOP.GGのような大手サイトはずっとAPIを保存して全ての成績を表示しているということでしょうか?

英語も得意ではないので勘違いしている部分が多いかもしれませんがよろしくおねがいいたします。

質問まとめ
riot apiを利用して一人のプレイヤーの全てのマッチ(戦闘)情報を取得したい。
全部で300試合ほどあるのに147件分しか取得できていない。
1週間分しか保存されていないかもしれない、でもお大手サイトでは300件すべて表示されている。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

解決済みですが、質問に掲載している英文を見た結果からコメントします。

ログ取得のパラメーターの期間(time range)として設定可能の最大値は1週間となっています。これは、おそらく一度にそれ以上の期間を検索されるとサーバー負荷が大きくなりすぎるということかと推測します。したがって回避策として、1週間単位の検索を複数回(例:1月1日から7日までの検索が終わったら8日から14日までの検索をする)というものが考えられます。

以上を踏まえてコードを見ると、このパラメーターの指定がないようです。ない場合はデフォルト値で検索されると推測されます。その結果が147件なのだと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/30 18:05

    適切なパラメーターを指定することで複数回に分けて取得すればいいわけですね。ご回答ありがとうございます。!

    キャンセル

checkベストアンサー

+1

1週間分しか保存されていないということでしょうか?

保存期間に関してHOW LONG IS MATCH DATA/HISTORY STORED FOR?によると3年とのことです。

my_region = 'kr'

リージョンはKRになってますが、韓国鯖で正しいですか? 日本鯖ならJP1ですが。

APIに頻繁にアクセスして(RATE LIMIT)制限に掛かるのを避けるため、どこのサイトでもデーターベースに履歴として保持していると思いますね。

公式フォーラムで聞いてみるのも一つの手かとMatchlist Api

あと専門的な話題になってしまうため、どうしても回答が付きづらいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/30 03:30

    データが保存されていると言うことはやり方が間違っているということだと思うので、もっと調べてみたいと思います。
    調べたいプレイヤーが韓国リージョンなのであってます。フォーラムで質問してみたいと思います。
    ご回答ありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Pythonの処理速度について

    処理速度に関して、Pythonの処理が並んでいるのを発見しました。 https://wiki.python.org/moin/TimeComplexity 多くはO(1)の

  • 解決済

    python 文字列を判定する方法

    何らかのstr型が連続して格納されている配列(例['100'],['.'],['abc'])の各要素を判定し、数値ならint型に変換後次要素の判定に移る、数値ではないのであればfa

  • 解決済

    Pythonでriot apiの叩き方

    参考にしたサイト プログラミング初心者なんですかこのサイトを参考にriotのapiをpythonで叩きたいのですがエラーがでてすすめません myscript.pyとしてc:¥cod

  • 解決済

    python3, opencvでの質問

    opencvで人を認識するプログラムを作っていましす。 そこで認識した人の軌跡を描きたいのですが 現在、前フレームの座標と現フレームの座標しか繋げられず その軌跡をずっと残したいで

  • 解決済

    Python 3.x 辞書のキー値によって変換する場合の高速化

    Pythonにて、辞書(dict({key,value})を使って、list型の全要素をValue値に変換する際の、 高速化が可能かどうかをご教授いただきたいです。 dict1

  • 解決済

    C#+SeleniumでStaleElementReferenceError

    C#でSeleniumを使用して自動化処理を書いています。 (ブラウザはChromeです。) OS: Windows10 IDE: Visual Studio 2015 Sel

  • 解決済

    辞書のキーが重複した時、キー名_1のようにキー名をつけて辞書に情報を格納したい

     前提・実現したいこと 辞書のキーが重複した時、キー名_1のようにキー名をつけて辞書に情報を格納したい。  発生している問題・エラーメッセージ エラーは発生していないが、辞書の

  • 受付中

    エラー OSError: [Errno 22] Invalid argument

    お世話になります。以下でエラーが出て困っております。 エラー OSError: [Errno 22] Invalid argument ソース箇所 exchange.cre

同じタグがついた質問を見る

  • Python 3.x

    5900questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。