程序员用Python分析了20万场吃鸡数据,最后得出玩游戏要带妹

 

最近老板爱上了吃鸡(手游:全军出击),经常拉着我们开黑,只能放弃午休的时间,陪老板在沙漠里奔波。 上周在在微信游戏频道看战绩的时候突发奇想,是不是可以通过这个方式抓取到很多战斗数据,然后分析看看有什么规律。

小编是一名python开发工程师,群里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以加群:877562786

 

  

  

  秀一波战绩,开黑情况下我们团队吃鸡率非常高,近100场吃鸡次数51次

  

  简单评估了一下,觉得可行,咱就开始。

  Step 1 分析数据接口

  第一步当然是把这些战绩数据采集下来,首先我们需要了解页面背后的故事。去看看页面是如何获取战斗数据的。

  使用Charles抓包

  抓包实现

  在Mac下推荐使用工具Charles来从协议层抓取手机上的流量,原理就是在Mac上开启一个代理服务器,然后将手机的网络代理设置为Mac,这样手机上的所有流量都会经过我们的代理服务器了。 大致流程如下:

  

  https加密流量的处理

  在实际操作的时候发现微信所有的流量都走了HTTPS,导致我们的抓到的都是加密数据,对我们没有任何参考意义。 经过研究,可以通过在手机和电脑都安装Charles根证书的方式来实现对Https流量的分析,具体操作可以参考:

  charles mac下https抓包和iphone https抓包

  解决Charles无法正常抓包iOS 11中的Https请求

  安装证书后,我们的流量大致是这样子的

  

  经过上述的配置,我们已经可以读取到https的请求和响应数据了,如下图所示。

  

  

  windows下用findler可以实现相同的功能

  其实这就是一个非常典型的中间人场景

  

  数据接口

  接下来就根据这些数据来找出我们需要的接口了,经过分析,主要涉及三个接口

  获取用户信息接口

  获取用户战绩列表接口

  获取用户指定战绩详细信息接口

  下面我们一个一个看

  1. 获取用户信息接口

  request

  

API /cgi-bin/gamewap/getpubgmbattlelist
方法 GET
参数 openid、pass_ticket、plat_id、after_time、limit
cookie key pass_ticket、uin、pgv_pvid、sd_cookie_crttime、sd_userid

  response

  Python

  

  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

  26

  27

  28

  29

  30

  31

  32

  33

  34

  35

  36

  37

  38

  39

  40

  41

  42

  43

  44

  45

  46

  47

  48

  49

  50

  51

  52

  53

  54

  55

  56

  57

  58

  

  {

   "user_info": {

   "openid": "oODfo0pjBQkcNuR4XLTQ321xFVws",

   "head_img_url": "http://wx.qlogo.cn/mmhead/Q3auHgzwzM5hSWxxxxxUQPwW9ibxxxx9DlxLTsKWk97oWpDI0rg/96",

   "nick_name": "望",

   "role_name": "xxxx",

   "zone_area_id": 0,

   "plat_id": 1

   },

   "battle_info": {

   "total_1": 75,

   "total_10": 336,

   "total_game": 745,

   "total_kill": 1669

   },

   "battle_list": [{

   "map_id": 1,

   "room_id": "6575389198189071197",

   "team_id": 57,

   "dt_event_time": 1530953799,

   "rank_in_ds": 3,

   "times_kill": 1,

   "label": "前五",

   "team_type": 1,

   "award_gold": 677,

   "mode": 0

   }],

   "appitem": {

   "AppID": "wx13051697527efc45",

   "IconURL": "https://mmocgame.qpic.cn/wechatgame/mEMdfrX5RU0dZFfNEdCsMJpfsof1HE0TP3cfZiboX0ZPxqh5aZnHjxPFXUGgsXmibe/0",

   "Name": "绝地求生 全军出击",

   "BriefName": "绝地求生 全军出击",

   "Desc": "官方正版绝地求生手游",

   "Brief": "枪战 | 808.2M",

   "WebURL": "https://game.weixin.qq.com/cgi-bin/h5/static/detail_v2/index.html?wechat_pkgid=detail_v2&appid=wx13051697527efc45&show_bubble=0",

   "DownloadInfo": {

   "DownloadURL": "https://itunes.apple.com/cn/app/id1304987143",

   "DownloadFlag": 5

   },

   "Status": 0,

   "AppInfoFlag": 45,

   "Label": [],

   "AppStorePopUpDialogConfig": {

   "Duration": 1500,

   "Interval": 172800,

   "ServerTimestamp": 1531066098

   },

   "HasEnabledChatGroup": false,

   "AppType": 0,

   "game_tag_list": ["绝地求生", "正版还原", "好友开黑", "百人对战", "超大地图"],

   "recommend_reason": "正版绝地求生,荒野射击",

   "size_desc": "808.2M"

   },

   "is_guest": true,

   "is_blocked": false,

   "errcode": 0,

   "errmsg": "ok"

  }

  

  2. 获取用户战绩列表接口

  分析

  openid是用户的惟一标识。

  2. 获取用户战绩列表接口

  request

API /cgi-bin/gamewap/getpubgmbattlelist
方法 GET
参数 openid、pass_ticket、plat_id、after_time、limit
cookie key pass_ticket、uin、pgv_pvid、sd_cookie_crttime、sd_userid

  response

  Python

  

  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

  26

  27

  28

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值