[关闭]
@JeromeLiee 2019-10-15T16:29:35.000000Z 字数 8175 阅读 543

数据分析接口


1. 接口描述

用于展示直播中心对抗赛的比赛数据统计

2. 接口后缀

/dataAnalysis

3. 请求参数

字段 名称 类型 是否可为空 备注
status 比赛状态 Integer 0,1,分别表示赛前、非赛前(包括赛中和赛后)
matchId 比赛Id Long
eventType 返回的事件类型 String 默认为"1,2,3,12,4,5,6,7,9" (配合status=1时使用) 详见附1比赛事件值列表
flag 比赛数据类型 String 默认为"7,11,4,1,10,14,9,6,13,12,2" (配合status=1时使用) 详见附2比赛数据类型对应表

4. 返回数据

4.1 json样例

  1. {
  2. "code": 0,
  3. "msg": "Success",
  4. "data": {
  5. "info": {
  6. "homeTeamName": "霍芬海姆",
  7. "homeTeamLogo": "http://image.suning.cn/uimg/SDSP/team/285.png?v=1498717894170",
  8. "homeTeamId": 285,
  9. "homeTeamScore": 1,
  10. "guestTeamName": "勒沃库森",
  11. "guestTeamLogo": "http://image.suning.cn/uimg/SDSP/team/288.png?v=1498717892874",
  12. "guestTeamId": 288,
  13. "guestTeamScore": 2,
  14. "matchAreaName": "本特戈蒂球场",
  15. "playDuration": 39
  16. },
  17. "lineup": {
  18. "homeTeamId": 123,
  19. "guestTeamId": 321,
  20. "homeFormation": "3-5-2",
  21. "guestFormation": "4-4-2",
  22. "players": [
  23. {
  24. "playerIcon": "http://image.suning.cn/uimg/SDSP/player/15052.jpeg?v=1498717991417",
  25. "playerId": 15052,
  26. "playerName": "施蒂利克",
  27. "playerNum": "10",
  28. "playerType": 3,
  29. "position": "A2",
  30. "teamId": 133,
  31. "positionType": 1
  32. "events":[
  33. {
  34. "eventTimeMinSec": "2:46",
  35. "eventPlayerName": "鲁文·佩雷斯",
  36. "relatePlayerName": "",
  37. "relatePlayerId": "",
  38. "teamFlg": "1",
  39. "eventTimeStamp": "1551729831",
  40. "eventPlayerNum": "21",
  41. "eventTimeExtra": "0",
  42. "teamId": "231",
  43. "externalId": "1382575",
  44. "eventPlayerId": "5162",
  45. "relatePlayerNum": "",
  46. "halfCode": "1",
  47. "event": "22",
  48. "sec": "46",
  49. "updateDttm": "2019-03-05 06:58:56",
  50. "eventName": "犯规",
  51. "eventTime": "3"
  52. },
  53. {
  54. "eventTimeMinSec": "3:36",
  55. "eventPlayerName": "维佐",
  56. "relatePlayerName": "",
  57. "relatePlayerId": "",
  58. "teamFlg": "2",
  59. "eventTimeStamp": "1551729880",
  60. "eventPlayerNum": "14",
  61. "eventTimeExtra": "0",
  62. "teamId": "1216",
  63. "externalId": "1382593",
  64. "eventPlayerId": "4739",
  65. "relatePlayerNum": "",
  66. "halfCode": "1",
  67. "event": "26",
  68. "sec": "36",
  69. "updateDttm": "2019-03-05 06:58:57",
  70. "eventName": "抢断成功",
  71. "eventTime": "4"
  72. }
  73. ]
  74. },
  75. {
  76. "playerIcon": "http://image.suning.cn/uimg/SDSP/player/2789.jpeg?v=1498717980998",
  77. "playerId": 2789,
  78. "playerName": "杜佳",
  79. "playerNum": "1",
  80. "playerType": 1,
  81. "position": "A6",
  82. "teamId": 133,
  83. "positionType": 1
  84. "events":[
  85. {
  86. "eventTimeMinSec": "2:46",
  87. "eventPlayerName": "鲁文·佩雷斯",
  88. "relatePlayerName": "",
  89. "relatePlayerId": "",
  90. "teamFlg": "1",
  91. "eventTimeStamp": "1551729831",
  92. "eventPlayerNum": "21",
  93. "eventTimeExtra": "0",
  94. "teamId": "231",
  95. "externalId": "1382575",
  96. "eventPlayerId": "5162",
  97. "relatePlayerNum": "",
  98. "halfCode": "1",
  99. "event": "22",
  100. "sec": "46",
  101. "updateDttm": "2019-03-05 06:58:56",
  102. "eventName": "犯规",
  103. "eventTime": "3"
  104. },
  105. {
  106. "eventTimeMinSec": "3:36",
  107. "eventPlayerName": "维佐",
  108. "relatePlayerName": "",
  109. "relatePlayerId": "",
  110. "teamFlg": "2",
  111. "eventTimeStamp": "1551729880",
  112. "eventPlayerNum": "14",
  113. "eventTimeExtra": "0",
  114. "teamId": "1216",
  115. "externalId": "1382593",
  116. "eventPlayerId": "4739",
  117. "relatePlayerNum": "",
  118. "halfCode": "1",
  119. "event": "26",
  120. "sec": "36",
  121. "updateDttm": "2019-03-05 06:58:57",
  122. "eventName": "抢断成功",
  123. "eventTime": "4"
  124. }
  125. ]
  126. }
  127. ]
  128. },
  129. "scoreAnalysis": [
  130. {
  131. "homeData": 43,
  132. "guestData": 57,
  133. "homeAverageData": 42,
  134. "guestAverageData": 52,
  135. "title": "控球率",
  136. "flag": 1
  137. },
  138. {
  139. "homeData": 1,
  140. "guestData": 2,
  141. "homeAverageData": 2,
  142. "guestAverageData": 2,
  143. "title": "进球",
  144. "flag": 2
  145. },
  146. {
  147. "homeData": 110,
  148. "guestData": 120,
  149. "homeAverageData": 142,
  150. "guestAverageData": 152,
  151. "title": "传球",
  152. "flag": 9
  153. }
  154. ],
  155. "rankData": {
  156. "home": {
  157. "win": 0,
  158. "draw": 0,
  159. "lose": 2,
  160. "score": 1,
  161. "ranking": 13
  162. },
  163. "guest": {
  164. "win": 0,
  165. "draw": 0,
  166. "lose": 2,
  167. "score": 1,
  168. "ranking": 13
  169. }
  170. },
  171. "pkData": {
  172. "draw": 0,
  173. "guestTeamId": "137",
  174. "homeTeamId": "133",
  175. "lose": 4,
  176. "win": 1
  177. }
  178. }
  179. }

4.2 参数详解

4.2.1 info对象

比赛基础信息,该接口涉及到的中台接口mock地址为比赛基础信息

  1. "info": {
  2. "homeTeamName": "霍芬海姆",
  3. "homeTeamLogo": "http://image.suning.cn/uimg/SDSP/team/285.png?v=1498717894170",
  4. "homeTeamId": 285,
  5. "homeTeamScore": 1,
  6. "guestTeamName": "勒沃库森",
  7. "guestTeamLogo": "http://image.suning.cn/uimg/SDSP/team/288.png?v=1498717892874",
  8. "guestTeamId": 288,
  9. "guestTeamScore": 2,
  10. "matchAreaName": "本特戈蒂球场",
  11. "playDuration": 39
  12. }
字段 名称 类型 对应中台接口的字段名称
homeTeamName 主队名称 String homeTeamName
homeTeamLogo 主队logo String homeTeamLogo
homeTeamId 主队id Long homeTeamId
homeTeamScore 主队比分 Long homeTeamScore
guestTeamName 客队名称 String guestTeamName
guestTeamLogo 客队logo String guestTeamLogo
guestTeamId 客队id Long guestTeamId
guestTeamScore 客队比分 Long guestTeamScore
matchAreaName 球场 String matchVenue对象中的areaNameCn字段(文档中未添加)
playDuration 比赛进度 Long 通过matchExtraInfo对象获取(文档中未添加,获取逻辑同信息接口) 详见附3数据JOSN及获取进度

4.2.2 lineup对象

阵容数据,当请求参数status=0时,该阵容为预测阵容,对应中台mock地址为预测阵容;当请求参数status=1时,对应中台mock地址为本场数据,以及比赛事件

  1. "lineup": {
  2. "homeTeamId": 123,
  3. "guestTeamId": 321,
  4. "homeFormation": "3-5-2",
  5. "guestFormation": "4-4-2",
  6. "players": []
  7. }
字段 名称 类型 对应中台接口的字段名称
homeTeamId 主队id Long lineUpList对象homeTeamId字段
guestTeamId 客队id Long lineUpList对象guestTeamId字段
homeFormation 主队阵容 String lineUpList对象homeFormation字段
guestFormation 主队阵容 String lineUpList对象guestFormation字段
players 阵容人员列表 Array playList集合,详见Player对象

play对象

  1. {
  2. "playerIcon": "http://image.suning.cn/uimg/SDSP/player/15052.jpeg?v=1498717991417",
  3. "playerId": 15052,
  4. "playerName": "施蒂利克",
  5. "playerNum": "0",
  6. "playerType": 3,
  7. "position": "A2",
  8. "teamId": 133,
  9. "events":[]
  10. }
字段 名称 类型 对应中台接口的字段名称
playerIcon 球员头像 String playList集合中Player对象playerIcon字段
playerId 球员id Long playList集合中Player对象playerId字段
playerName 球员名称 String playList集合中Player对象playerName字段
playerNum 球员号码 String playList集合中Player对象playerNum字段
playerType 球员类型 Long playList集合中Player对象playerType字段
position 球员位置 String playList集合中Player对象position字段
teamId 球队id Long playList集合中Player对象teamId字段
positionType 球员位置类型 String playList集合中Player对象positionType字段(1前锋2中场3后卫4门将)
events 事件集合 Array 比赛事件接口返回数据中的eventList集合,只返回该球员指定的事件,指定事件由参数eventType决定

4.2.3 scoreAnalysis对象

数据统计,赛前只获取"场均数据",赛中及赛后需要结合"本场数据"和"场均数据",该接口涉及到的中台接口mock地址为本场数据场均数据

  1. {
  2. "homeData": "43",
  3. "guestData": "57",
  4. "homeAverageData": "42",
  5. "guestAverageData": "52",
  6. "title": "控球率",
  7. "flag": "1"
  8. }
字段 名称 类型 对应本场数据中台字段 对应场均数据中台字段
homeData 主队数值 String 需要根据flag来判断
guestData 客队数值 String 需要根据flag来判断
homeAverageData 主队平均数值 String 需要根据flag来判断
guestAverageData 客队平均数值 String 需要根据flag来判断
title 数据名称 String guestTeamName 详见附2比赛数据类型对应表
flag 数据标记 String guestTeamLogo 详见附2比赛数据类型对应表

4.2.4 rankData对象

队伍排名,中台接口mock地址为球队排名

  1. "rankData": {
  2. "home": {
  3. "win": 0,
  4. "draw": 0,
  5. "lose": 2,
  6. "score": 1,
  7. "ranking": 13
  8. },
  9. "guest": {
  10. "win": 0,
  11. "draw": 0,
  12. "lose": 2,
  13. "score": 1,
  14. "ranking": 13
  15. }
  16. }

主客队javabean相同

字段 名称 类型 对应中台字段
win Long 取对应主客队中的stat集合中type为0(全场)的data对象中winNum字段
draw Long 取对应主客队中的stat集合中type为0(全场)的data对象中drawNum字段
lose Long 取对应主客队中的stat集合中type为0(全场)的data对象中loseNum字段
score 得分 String 取对应主客队中的stat集合中type为0(全场)的data对象中score字段
ranking 排名 String 取对应主客队中的stat集合中type为0(全场)的data对象中ranking字段

4.2.5 pkData

主客队pk数据,中台mock地址为历史5场数据中homePkGuestList集合。

  1. "pkData": {
  2. "draw": 0,
  3. "guestTeamId": 137,
  4. "homeTeamId": 133,
  5. "lose": 4,
  6. "win": 1
  7. }

5. 附录

附1.比赛事件值列表

1.进球 2.点球进球 3.乌龙球 4.换上 5.黄牌 6.红牌 7.两黄变一红 8.点球未进 9.换下 10.助攻 12.点球大战进球 13.点球大战未进 14.射门 15.角球 16.头球 17.任意球 18.扑救 19.手球 20.争议 21.越位 22.犯规 23.判罚点球 24.盘带突破 25.花式技巧 26.抢断成功 27.VAR介入 28.伤退

附2.比赛数据类型对应表

mock地址为本场数据场均数据

比赛数据类型flag 对应本场数据接口字段 对应场均数据flag
1 射门 shotsNum 111 射门均值
2 黄牌 yellowCardsNum 117 黄牌均值
3 封堵 blockedNum 110 封堵均值
4 传球 passNum 114 传球均值
5 红牌 redCardsNum 118 红牌均值
6 抢断 wonTackle 115 抢断均值
7 控球率 possessionRate 1 控球率
8 点球 penaltiesNum 122 场均点球
9 任意球 freeKicksNum 123 场均任意球
10 射正 shotsTargetNum 112 射正均值
11 进球 goalNum 113 进球场均
12 犯规 foulsNum 119 犯规均值
13 越位 offsidesNum 120 场均越位
14 角球 cornersNum 121 场均角球
15 传球成功率 passPossession 27 传球成功率

场均数据接口flag列表:
1.控球率 2.进球次数 3.助攻次数 4.封堵次数 5.黄牌次数 6.红牌次数 7.射门次数 8.射正次数 9.传球次数 10.关键传球次数 11.传球成功数 12.越位次数 13.拦截次数 14.抢断次数 15.解围次数 16.犯规次数 17.被犯规次数 18.扑救次数 19.获得点球数 20.获得任意球数 21.角球数 22.被判点球数 23.被判任意球数 24.传中成功率(25/24计算) 25.击中门框次数 26.进球次数 27.传球成功率 45.失球数 110.封堵均值 111.射门均值 112.射正均值 113.进球均值 114.传球均值 115.抢断均值 116.解围均值 117.黄牌均值 118.红牌均值 119.犯规均值 120.场均越位 121.场均角球 122.场均点球 123.场均任意球 107.球队平均年龄

附3.数据JOSN及获取进度表

matchExtraInfo对象json

  1. // fh 上半场
  2. // sh 下半场
  3. // efh 补时上半场
  4. // esh 补时下半场
  5. "matchExtraInfo": {
  6. "updater": "JOB_RUNNER",
  7. "efhMinLength": 0,
  8. "shSecLength": 2,
  9. "shEndTime": 1553633934000,
  10. "createDttm": 1553627052000,
  11. "fhStartTime": 1553627027000,
  12. "eshMinLength": 0,
  13. "fhSecLength": 2,
  14. "shMinLength": 49,
  15. "efhSecLength": 0,
  16. "creator": "JOB_RUNNER",
  17. "eshSecLength": 0,
  18. "fhEndTime": 1553629909000,
  19. "shStartTime": 1553630992000,
  20. "updateDttm": 1553637536000,
  21. "matchId": 263696,
  22. "fhMinLength": 48
  23. }
  1. // 获取比赛进度,上半场不超过45分钟,全场不超过90分钟
  2. public long getPlayDuration(){
  3. long playDuration = 0;
  4. // 为0则表示下半场未开始
  5. if (matchExtraInfo.getShStartTime() == 0) {
  6. // 上半场开始时间也为0,则返回0
  7. if (matchExtraInfo.getFhStartTime() == 0) {
  8. return playDuration;
  9. }
  10. playDuration = (System.currentTimeMillis() - matchExtraInfo.getFhStartTime()) / 1000 / 60;
  11. // 上半场的时间进度为1~45分钟
  12. playDuration = playDuration == 0 ? 1 : playDuration;
  13. playDuration = playDuration > 45 ? 45 : playDuration;
  14. } else {
  15. playDuration = 45 + (System.currentTimeMillis() - matchExtraInfo.getShStartTime()) / 1000 / 60;
  16. // 下半场的时间进度为46~90分钟
  17. playDuration = playDuration == 45 ? 46 : playDuration;
  18. playDuration = playDuration > 90 ? 90 : playDuration;
  19. }
  20. return playDuration;
  21. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注