系列文章目录

对英雄联盟比赛预测(一)- 特征分析
对英雄联盟比赛预测(二)- 数据获取api分析
对英雄联盟比赛预测(三)- 数据获取Java实现

文章目录

  • 系列文章目录
  • 声明
  • 前言
  • 一、数据源分析
  • 二、使用步骤
    • 1. 申请拳头开发者
    • 2. 分析api
      • 2.1 数据入口
      • 2.2 查找比赛
      • 2.3.返回体
        • 2.3.1 json最外层
        • 2.3.2 分析两队情况
          • 蓝色方
          • 红色方
        • 2.3.3 分析双方的比赛玩家
          • 蓝色方
          • 红色方
        • 2.3.4 时间线分析
    • 3. 玩家的关联分析
      • 3.1 外部关联
      • 内部关联
  • 总结

声明

本文中所涉及到的所有数据及使用方法仅供学习使用,不得用于商业用途

前言

上篇文章对英雄联盟比赛预测(一)- 特征分析对比赛的数据类型进行了分析,接下来,我们就要开始获取各个比赛的具体数据。


提示:以下是本篇文章正文内容,下面案例可供参考

一、数据源分析

目前已知可以获取比赛各个数据的来源有:掌盟逆向工程/拳头开发者api,对比之下,掌盟的数据源不稳定,且容易被封,所以,我们采用拳头的api。# 系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加

二、使用步骤

1. 申请拳头开发者

下面这个是拳头的开发者平台

拳头开发者登录平台

点击下面红框内的按钮,接着按步骤进行注册即可,接下来会有api key,如果过期了,就点重新生成。

但是有可能没有下面这个验证码。因为这个验证码是拳头调用google的服务,所以如果网络不能访问google的话,可能就无法重新生成了。有效期为24小时。

因为拳头服务器所在为西八区(太平洋时区),所以时间会比北京时间早16个小时。

2. 分析api

拳头的api地址为:

https://developer.riotgames.com/apis

2.1 数据入口

我们发现基本上所有的和比赛相关的api都需要选手的puuid和matchId,这些id我们目前是无从得知的。但是仔细分析了下api,发现有个api

可以获取玩家的基本信息,但是需要玩家的昵称。我们就随便猜一个昵称 abc

得到的结果是这样的:

{"id": "4HgrVFAc98Izb5K0jZb98c_phOQWhE7r0noAXA","accountId": "PpOm0GdjH6g_-vtvfx_vZlxBHBJSpqO34Igs_QmhwDU","puuid": "DLqpTe5-O1_peuVeN-OyIOn6u-cb2qWNZCu0ztR1h4yxhUrw-h0FeBhurvn4g","name": "abc","profileIconId": 27,"revisionDate": 1586453567000,"summonerLevel": 84
}

这里我们发现了重要数据:puuid,accountId
为保护个人隐私,上面的数据已经被我修改过了,不可直接使用

2.2 查找比赛

上一节,我们拿到了某些玩家的puuid,接着可以通过puuid,来获取玩家的游戏列表

输入玩家的puuid,下面的选BR1,其他可选项不填

这样我们就能得到一堆游戏id

接着通过api可以获取比赛的详细信息

2.3.返回体

我们分析下response body里有哪些我们需要的数据

2.3.1 json最外层


gameId作为比赛的唯一id,需要保存下来,
gameDuration为比赛时长,单位是秒,
gameVersion为比赛版本,作为一个属性可以保留下来,
gameMode是比赛方式,CLASSIC表示经典模式,
gameType为比赛类型,分为匹配,排位,自定义,训练等。

2.3.2 分析两队情况

蓝色方

  • win 是否赢得比赛
  • firstBlood 是否得到一血
  • firstTower 是否得到一塔
  • firstInhibitor 是否得到一高地水晶
  • firstBaron 是否第一条大龙
  • firstDragon 是否第一条小龙
  • firstRiftHerald 是否第一个峡谷先锋
  • towerKills 摧毁防御塔数
  • inhibitorKills 摧毁高地水晶数
  • baronKills 团队击杀大龙数量
  • dragonKills 团队击杀小龙数量
  • vilemawKills 团队击杀大蜘蛛数量(这个大蜘蛛是扭曲丛林里的,召唤师峡谷里没有)
  • riftHeraldKills 团队击杀峡谷先锋数量
    bans 是团队ban掉的英雄,这里就不作分析了
红色方


内容和蓝色方一致

ps:这场比赛发表下个人看法,应该是前期蓝色方碾压,该拿的资源全拿了,该打出来的优势都打出来了,但是比赛后期被一波翻盘了,因为可以看到红色方只推掉了蓝色方的一座高地水晶就赢得了比赛,可想而知,是推掉高地水晶后,直接摧毁了主水晶。

2.3.3 分析双方的比赛玩家

蓝色方

下面的示例都仅是团队中某个玩家的数据,团队数据需要把每个玩家的数据都加在一起
participants的前一半item为蓝色方,后一半为红色方

ps: 如果是自定义,可能并非一半对一半,可以通过每个item的teamId来区分

最外层的这些数据没有太大的用处,把teamId、participantId加championId组合起来,作为联合id

championId表示玩家所使用的英雄id,具体表示哪些英雄,就不在这里详细说明了,拳头官网上有对应的列表

下面是玩家的具体比赛数据,因为太长,所以我把json copy下来了

"stats":{"participantId":1,"win":false,"item0":3078,"item1":3046,"item2":3153,"item3":3033,"item4":3031,"item5":3006,"item6":3363,"kills":22,"deaths":6,"assists":6,"largestKillingSpree":13,"largestMultiKill":3,"killingSprees":2,"longestTimeSpentLiving":947,"doubleKills":2,"tripleKills":2,"quadraKills":0,"pentaKills":0,"unrealKills":0,"totalDamageDealt":227503,"magicDamageDealt":1892,"physicalDamageDealt":220365,"trueDamageDealt":5246,"largestCriticalStrike":1134,"totalDamageDealtToChampions":50110,"magicDamageDealtToChampions":943,"physicalDamageDealtToChampions":47126,"trueDamageDealtToChampions":2040,"totalHeal":2664,"totalUnitsHealed":1,"damageSelfMitigated":24442,"damageDealtToObjectives":19245,"damageDealtToTurrets":7506,"visionScore":53,"timeCCingOthers":42,"totalDamageTaken":30754,"magicalDamageTaken":18034,"physicalDamageTaken":12348,"trueDamageTaken":371,"goldEarned":19033,"goldSpent":18158,"turretKills":2,"inhibitorKills":0,"totalMinionsKilled":185,"neutralMinionsKilled":56,"neutralMinionsKilledTeamJungle":24,"neutralMinionsKilledEnemyJungle":16,"totalTimeCrowdControlDealt":230,"champLevel":18,"visionWardsBoughtInGame":1,"sightWardsBoughtInGame":0,"wardsPlaced":12,"wardsKilled":7,"firstBloodKill":true,"firstBloodAssist":false,"firstTowerKill":true,"firstTowerAssist":false,"firstInhibitorKill":false,"firstInhibitorAssist":false,"combatPlayerScore":0,"objectivePlayerScore":0,"totalPlayerScore":0,"totalScoreRank":0,"playerScore0":0,"playerScore1":0,"playerScore2":0,"playerScore3":0,"playerScore4":0,"playerScore5":0,"playerScore6":1,"playerScore7":0,"playerScore8":0,"playerScore9":0,"perk0":8005,"perk0Var1":2609,"perk0Var2":2039,"perk0Var3":569,"perk1":9101,"perk1Var1":6065,"perk1Var2":6639,"perk1Var3":0,"perk2":9104,"perk2Var1":14,"perk2Var2":10,"perk2Var3":0,"perk3":8014,"perk3Var1":1220,"perk3Var2":0,"perk3Var3":0,"perk4":8473,"perk4Var1":1510,"perk4Var2":0,"perk4Var3":0,"perk5":8451,"perk5Var1":206,"perk5Var2":0,"perk5Var3":0,"perkPrimaryStyle":8000,"perkSubStyle":8400,"statPerk0":5005,"statPerk1":5008,"statPerk2":5002}

需要保存kills - 击杀数,deaths - 死亡数,assists - 助攻数,visionScore - 视野得分 goldEarned - 获得金币,goldSpent - 花费的金币 champLevel - 等级

接着看时间线

          "timeline":{"participantId":1,"creepsPerMinDeltas":{"10-20":5.4,"0-10":6.6,"30-end":2.4,"20-30":5.2},"xpPerMinDeltas":{"10-20":649.2,"0-10":504.4,"30-end":484.2,"20-30":582},"goldPerMinDeltas":{"10-20":654.8,"0-10":320.5,"30-end":494,"20-30":627.5},"csDiffPerMinDeltas":{"10-20":1.3499999999999999,"0-10":0.7999999999999998,"30-end":0.5,"20-30":0.10000000000000031},"xpDiffPerMinDeltas":{"10-20":204.34999999999994,"0-10":51.849999999999994,"30-end":-120.09999999999997,"20-30":88.79999999999998},"damageTakenPerMinDeltas":{"10-20":1057.8000000000002,"0-10":249.9,"30-end":1056.2,"20-30":890.7},"damageTakenDiffPerMinDeltas":{"10-20":96.10000000000002,"0-10":-2.549999999999983,"30-end":652.4999999999998,"20-30":436.19999999999993},"role":"NONE","lane":"JUNGLE"}

这些数据主要是每十分钟的各项数据差,对我们来说,计算比较繁琐,后面会专门介绍从时间维度上的数据分析

红色方

红色方的数据留存和蓝色方一致,为了方便后面使用,我们将蓝色方的人员数据加个参数:team 0表示蓝色方,1表示红色方,所以在数据入库后的计算中,可以根据team这个字段来分组。

2.3.4 时间线分析

拳头公司提供了一个一场比赛各个时间段的数据api

同样只需要输入matchId即可查询,下面为例子:

{"frames":[{"participantFrames":{"1":{"participantId":1,"position":{"x":560,"y":581},"currentGold":500,"totalGold":500,"level":1,"xp":0,"minionsKilled":0,"jungleMinionsKilled":0,"dominionScore":0,"teamScore":0},"2":Object{...},"3":Object{...},"4":Object{...},"5":Object{...},"6":Object{...},"7":Object{...},"8":Object{...},"9":Object{...},"10":Object{...}},"events":[],"timestamp":0},],"frameInterval":60000
}

格式大致如上所示,时间间隔为60000ms,即1分钟为一个时间区间,统计这一分钟内10名玩家的各项数据,以下数据为单个玩家在某分钟内的数据,同样我们需要计算团队数据,当然,这是后面的事情,现在需要把原始数据保存下来。

需要的数据为currentGold,totalGold,level,minionsKilled, jungleMinionsKilled ,因为经验和等级有一定的关联关系,所以保留了等级,xp就不保留了

3. 玩家的关联分析

3.1 外部关联

上面分析的都是某个玩家的对战数据,但是这个数据有限,我们需要从入口玩家那里得到一张可以扩散出去的网,使得我们的数据来源 源源不断。
经过分析发现,

通过这个api,把一个用户的puuid输入,同样可以得到一系列的matchId

但返回的Id格式显然不一样。

接着通过下面的这个api:

把上一张图中的id作为参数输入,可以发现

在response body里有许多其他玩家的puuid,这时,就打开了一张网,我们只需要把这个response body里的puuid,全部取出,输入到待查询的玩家列表队列中,当一个玩家的比赛数据全部获取结束后,可从玩家列表中取出下一个玩家,进行遍历,而这个玩家又会带来更多的玩家数据,从而完成无限的扩张。

内部关联

在我们获得的match details里有一个participantIdentities属性,有十个对象,从中我们发现有个player对象,这个里面正好有我们需要的accountId,而我们获取gameList,也是用的accountId,故而找到了数据关联点,可以把这个网再扩张。

总结

本文主要讲述如何从拳头的官网上获取玩家、比赛的数据、以及如何规划爬虫,使得爬虫不停延续下去。下篇文章将讲述,如何将本文所叙述的逻辑用代码实现。

ps:通过拳头官网的api,无法得到lpl赛区的数据,有时间的话,会在这一系列文章中插入如何获取lpl赛区的比赛数据。

对英雄联盟比赛预测(二)- 数据获取api分析相关推荐

  1. 对英雄联盟比赛预测(三)- 数据获取Java实现

    系列文章目录 对英雄联盟比赛预测(一)- 特征分析 对英雄联盟比赛预测(二)- 数据获取api分析 对英雄联盟比赛预测(三)- 数据获取Java实现 文章目录 系列文章目录 声明 前言 一.基本框架 ...

  2. 对英雄联盟比赛预测(一)- 特征分析

    系列文章目录 对英雄联盟比赛预测(一)- 特征分析 对英雄联盟比赛预测(二)- 数据获取api分析 对英雄联盟比赛预测(三)- 数据获取Java实现 这里写目录标题 系列文章目录 我们先来分析下影响比 ...

  3. 对英雄联盟比赛预测(四)- 数据清洗

    系列文章目录 对英雄联盟比赛预测(一)- 特征分析 对英雄联盟比赛预测(二)- 数据获取api分析 对英雄联盟比赛预测(三)- 数据获取Java实现 对英雄联盟比赛预测(四)- 数据清洗 文章目录 前 ...

  4. 基于LightGBM分类实现英雄联盟数据预测(二)

    基于LightGBM分类实现英雄联盟数据预测(二) 这里写目录标题 基于LightGBM分类实现英雄联盟数据预测(二) Step5:利用 LightGBM 进行训练与预测 plt.figure(fig ...

  5. 基于LightGBM分类实现英雄联盟数据预测(一)

    基于LightGBM分类实现英雄联盟数据预测(一) 文章目录 基于LightGBM分类实现英雄联盟数据预测(一) 一.LightGBM的介绍 二.操作步骤 Step1:库函数导入 Step2 .读入数 ...

  6. 分析5万多场英雄联盟比赛,教你如何轻松用python预测胜负

    CDA数据分析师 出品   作者:真达.Mika 数据:真达   后期:Mika [导读] 今天教大家用Python预测英雄联盟比赛胜负.Show me data,用数据说话!今天我们聊一聊 pyth ...

  7. 飞桨学习赛:英雄联盟大师预测2023年2月85.365分方案

    ★★★ 本文源自AlStudio社区精品项目,[点击此处]查看更多精品内容 >>> 飞桨学习赛:英雄联盟大师预测2023年2月85.365分方案 比赛链接 - 飞桨学习赛:英雄联盟大 ...

  8. 我的飞桨学习赛:英雄联盟大师预测

    我的飞浆学习赛:英雄联盟大师预测 原始代码 数据集 评分结果 改进方式 构建更多的前馈神经网络 修改模型的超参数 学习率 batch_size和epoch 进行特征选择 改进的结果 目前正在改进的方法 ...

  9. 吃鸡排名预测挑战赛 空气质量预测 英雄联盟大师预测 手机行为识别 员工离职预测 猫十二分类体验赛

    1.吃鸡排名预测挑战赛 https://aistudio.baidu.com/aistudio/competition/detail/155/0/introduction 2.空气质量预测https: ...

最新文章

  1. automation服务器不能创建对象”的问题的解决方案总结大全
  2. windows下的sysprep
  3. Linux(Ubuntu) lib 缺失问题
  4. 过山车(HDU-2063)
  5. mysql被除数为0不报错_MySQL:关系除法
  6. 专为中国车主开发,特斯拉计划今年推出数据平台
  7. Layui--颜色选择器layui.colorpicker
  8. 鼠标浮动到表格的某行 背景颜色变化[mouseover mouseout 以及mouseenter mouseleave]
  9. stm32单片机端口映射_STM32F103C8T6 can端口映射
  10. 小程序-云开发-实现微信云支付功能
  11. 小米路由器Android,手机设置小米路由器_小米路由器用手机设置教程-192路由网
  12. 铁威马教程之如何轻松同步TNAS和云盘数据
  13. 【民大Linux课件】Linux的基础操作1
  14. 《Python 3网络爬虫开发实战 》崔庆才著 第三章笔记
  15. 2022-2027年中国分散染料行业市场全景评估及发展战略规划报告
  16. 谷歌滤镜软件叫什么_谷歌app爆红的拍照功能:你最像名画中的谁?
  17. android系统提供的常用命令行工具
  18. android获取外放设备,Android 监听耳机外放设备
  19. DXP 内电层GND和POWER出现的死铜如何去除
  20. 理论+实验·MySQL数据库管理

热门文章

  1. 2.修道士和野人问题
  2. 昆虫记思维导图模板分享
  3. 冻结训练和解冻训练的区别
  4. BrokenPipeError: [Errno 32] Broken pipe 基于pytorch的训练 num_worker参数理解
  5. 《Total Commander:万能文件管理器》——第5.4节.更多压缩格式及插件
  6. 在Mac OS X下获得电脑屏幕中任意颜色的RGB值
  7. SkeyeVSS综合安防监控Onvif、RTSP、GB28181安防协议互联网无插件直播点播解决方案
  8. 普洱茶保健功效[降脂、减肥、降压、抗动脉硬化 防癌、抗癌 养胃、护胃 消炎、杀菌、治痢]
  9. CSDN博客常用写作技巧
  10. 2022商业武器:一站式供应链中台成为决胜关键