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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

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

Q&A

解決済

2回答

3513閲覧

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

grilled_python

総合スコア237

Python 3.x

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

0グッド

0クリップ

投稿2018/04/29 05:40

編集2018/04/29 07:26

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

python

1from riotwatcher import RiotWatcher 2 3watcher = RiotWatcher('ここにapi keyが入ります。') 4 5my_region = 'kr' 6#自身の所属するリージョン 7 8me = watcher.summoner.by_name(my_region, 'サモナーネームが入ります') 9#サモナーネームからアカウントIDなどを取得 10 11my_ranked_stats = watcher.league.positions_by_summoner(my_region, me['id']) 12#サモナーの基本的なランクのデータです 13 14recentmatchlists = watcher.match.matchlist_by_account_recent(my_region,me['accountId']) 15#直近20試合のデータが見れます 16 17 18all_matchlist = watcher.match.matchlist_by_account(my_region,me['accountId']) 19#全マッチリスト情報を取得したいがすべて取得できていない147件しか取得できていない300件以上はあるはず 20 21 22 23print(recentmatchlists) 24#直近20試合のデータが見れます 25 26print(all_matchlist) 27#マッチリストを全部取得できるはずだったのですが・・・ 28 29

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

python

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

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

python

1all_matchlist = watcher.match.matchlist_by_account(my_region,me['accountId']) 2#全マッチリスト情報を取得したいがすべて取得できていない147件しか取得できていない 3#全部で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件すべて表示されている。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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

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

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

投稿2018/04/29 20:23

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

grilled_python

2018/04/30 09:05

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

0

ベストアンサー

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

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

my_region = 'kr'

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

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

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

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

投稿2018/04/29 17:36

umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

grilled_python

2018/04/29 18:30

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問