クラロワ(Clash Royale)のクランの情報やメンバーの情報を自動で蓄積する(WEB API) ～データ収集スクリプト作成編～

#はじめに
前回の続きです。

　前回：[クラロワ(Clash Royale)のクランの情報やメンバーの情報を自動で蓄積する(WEB API) ～APIキー作成編～](https://qiita.com/super-flyers/items/5655f101c3da322fec7b"クラロワ(Clash Royale)のクランの情報やメンバーの情報を自動で蓄積する(WEB API) ～APIキー作成編～")

前回APIキーを作成したので、それを使って、WEBAPIにアクセスして各種情報を取得していきたいと思います。

作成言語はpythonかGoogle Action Scriptで考えたのですが、APIキー作成時に接続元IPアドレスを指定する必要があり、Google Action ScriptだとGoogleのどこかのサーバがアクセス元になるようで、結局、自宅からアクセスするようpythonで作成することにしました。


#作成したスクリプト
今回３本のスクリプトを作成しました。

##①APIアクセススクリプト

クラロワのAPIにアクセスするスクリプトです。引数でもらったURLにアクセスして結果を返すスクリプトです。共通関数的なアレです。

```python:kurarowa_api.py
#!/usr/bin/env python
# coding: UTF-8

#-----------------------------------------------------------------
#
#  機能概要：クラロワＡＰＩにアクセス
#
#-----------------------------------------------------------------
import requests
import json

API_KEY = "[発行されたAPIキー]"


def kurarowa_api(url):

	headers = {"content-type": "application/json", "authorization": "Bearer " + API_KEY }

	r = requests.get(url, headers=headers)

	return r


```


##②クランの情報取得

クランタグを指定してスクリプトに記載してあるURLにアクセスすると、クランの情報が取得できます。日付、クランタグ、クラン名、クランスコア、寄付数/週、メンバー数を取得できますが、自分のクランの情報を蓄積していく意味はあまりないかもしれません。クランスコアが過去と比べて増加していれば、みんなうまくなっているということが、わかるくらいかな。


```python:kurarowa_get_clan_info.py
#!/usr/bin/env python
# coding: UTF-8

#-----------------------------------------------------------------
#
#  機能概要：クラロワＡＰＩにアクセスして、クランの情報を出力
#
#  出力形式：日付,クランタグ,クラン名,クランスコア,寄付数/週,メンバー数
#
#-----------------------------------------------------------------

import kurarowa_api
import json
import requests
import datetime

URL_CLAN_INFO = "https://api.clashroyale.com/v1/clans/[クランタグ]"



# main処理
def main():
	r = kurarowa_api.kurarowa_api(URL_CLAN_INFO)

	if r.status_code == requests.codes.ok :
		json = r.json()
		print( str(datetime.date.today()) + ","  + \
		      json["tag"] + "," + \
		      json["name"] + "," + \
		      str(json["clanScore"]) + "," + \
		      str(json["donationsPerWeek"]) + "," + \
		      str(json["members"]) )


# main処理の呼出
if __name__ == '__main__':
	main()
 
```




##③クランメンバーの情報取得
作りたかったのはこれです。
毎日このスクリプトを実行することで、自クランのメンバーの活動状況を日々蓄積していきたいと思います。昨日、過去１週間、過去１か月くらいのデータをためていき、推移を確認できるようにします。それで、次のような考察ができるんじゃないかと思ってます。
　・最近、勝ちの多いメンバーはだれか？
　・最近、トロフィーあがっているメンバーはだれか？
　・クラン対戦の戦闘日に勝ちが多いのは誰？
　・勝率が高いのは誰？
　・メンバーへのカード寄付数が多いのは誰？
　・新規メンバーはいつからクランに所属してる？

```python:kurarowa_get_player_info.py


#!/usr/bin/env python
# coding: UTF-8

#-----------------------------------------------------------------
#
#  機能概要：クラロワＡＰＩにアクセスして、クランメンバーの情報を出力
#
#  出力形式：日付,タグ,名前,役職,レベル,トロフィー,
#  最高トロフィー,勝数,負数,対戦回数,勝率,スリークラウン,
#  チャレンジカード,チャレンジ最大勝数,トーナメントカード,寄付数,
#  寄付受信数,寄付数合計,戦闘日勝数
#
#-----------------------------------------------------------------

import kurarowa_api
import json
import requests
import datetime

URL_CLAN_MEMBERS = "https://api.clashroyale.com/v1/clans/[クランタグ]/members"

URL_PLAYER_INFO = "https://api.clashroyale.com/v1/players/"


# main処理
def main():

	# クランメンバーの一覧取得
	r = kurarowa_api.kurarowa_api(URL_CLAN_MEMBERS)
	if r.status_code == requests.codes.ok :
		members = r.json()

		for member in members["items"]:
			tag = member["tag"].replace('#', '%23')
			# クランメンバーの情報取得
			r = kurarowa_api.kurarowa_api(URL_PLAYER_INFO + tag)
			if r.status_code == requests.codes.ok :
				info = r.json()
			
				print( str(datetime.date.today()) + ","  + \
				      info["tag"] + "," + \
				      info["name"] + "," + \
				      info["role"] + "," + \
				      str(info["expLevel"]) + "," + \
				      str(info["trophies"]) + "," + \
				      str(info["bestTrophies"]) + "," + \
				      str(info["wins"]) + "," + \
				      str(info["losses"]) + "," + \
				      str(info["battleCount"]) + "," + \
				      str((info["wins"]*100)//info["battleCount"]) + "%," + \
				      str(info["threeCrownWins"]) + "," + \
				      str(info["challengeCardsWon"]) + "," + \
				      str(info["challengeMaxWins"]) + "," + \
				      str(info["tournamentCardsWon"]) + "," + \
				      str(info["donations"]) + "," + \
				      str(info["donationsReceived"]) + "," + \
				      str(info["totalDonations"]) + "," + \
				      str(info["warDayWins"]) )

# main処理の呼出
if __name__ == '__main__':
	main()


```


#最後に
実行環境は自宅サーバになっているラズベリーパイで毎日定時実行して、CSVファイルへ追記していっております。
何日かスクリプトを実行してみましたが、クラン内のメンバーが５０人いると結構なデータ量になります。CSVをエクセルに読み込んで、ピボットテーブル等にしてデータ分析しようと思いましたが、あらかじめCSVからグラフ等にしておいてくれるスクリプトもほしいなと感じてきました。

pythonのデータ分析ライブラリとか使って、グラフや表を出力してくれるスクリプトも作成してみたいと思います。

ちなみに当方所属クランのデータを見ると、
対戦回数が３万回近い人がいました。５０人いるメンバーの平均が８０００回くらいだったので、突出してますね。
その人が、最高トロフィーも５０００間近でうちのクランで一番上です。
調べてみたら、クラロワでyoutube動画出してる人よりも対戦回数が多かったのでびっくりでした。


次の～データ分析スクリプト作成編～に続く・・・（はず）