寫在前面
最近晚上沒事經常和朋友一起開黑玩手遊吃雞,在每一盤遊戲都會發現有這樣一類“玩家”,這類“玩家”有以下特征:
- 突然出現在你的身邊放“冷槍”,但卻對你造成的傷害很低
- 走位如同無頭蒼蠅,打中他一槍就換個方向跑
- 裝備極好,甚至不少裝備三級套
估計大家已經猜到這些“玩家”是騰訊官方為了補充遊戲人數,和增加遊戲體驗的“機器人”,俗稱“人機”。
在我的印象中,越低的段位,人機出現的機率往往會越高,甚至在剛入坑的幾場遊戲中,除了自己以外其他玩家都是人機。事不宜遲,馬上抓取分析微信朋友圈的吃雞資料。
男人之間的對話¬_¬:

資料擷取
微信端的吃雞資料我們通過微信發現頁面的遊戲視窗可查詢,我們需要在手機用戶端與伺服器端之間截獲這些資料。這裡就需要神器“Charles”作為代理人,通過攔截用戶端的資料,再僞裝成用戶端向伺服器發送請求,進而對網絡封包截獲和分析。
使用Charles抓包
1.設定Charles:
設定代理伺服器端口:
關閉windows的代理:
在手機端的無線區域網路下設定目前連接配接網絡的手動配置服,伺服器填寫本機IP,端口填寫Charles配置的端口。
這樣就完成了基本配置,此時Charles已經可以截獲用戶端的資料了。
處理https資料
微信請求流量均采用https協定,而導緻抓取到加密的資料,是以需要在用戶端和電腦安裝Charles的證書。
之後就可以看到解密後的資料。
接口分析
這裡我們用三個資料接口:
getfeatureranklist2
- 作用:擷取微信朋友圈好友資訊
- 方法:get
- 參數:
'appid':遊戲id(固定) 'time_type':(時間類型,比如本周,本賽季等), 'rank_type':(比賽類型,比如單人,雙人等), 'method':'GET', 'abt':'26', 'pass_ticket'(每次都是固定的)
getjdqssybattlelist?簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語 - 作用:擷取某好友最近遊戲場次
- 方法:get
- 參數:
'session_id':(會話id,每次登陸系統會配置設定一個session_id), 'limit':(目前頁面最大顯示場數), 'after_time':(下一頁面第一個比賽的時間戳), 'plat_id':(101單人模式 102 雙人模式 103 四人模式), 'mode_type':(1:第一人稱,2:第三人稱)
getjdqssybattledetail??簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語 - 作用:擷取某好友在某場比賽的比賽資訊
- 方法:get
- 參數:
'session_id':(會話id,每次登陸系統會配置設定一個session_id), 'openid':(每一個玩家的一個唯一的id), 'team_id':(玩家所在隊伍在該場戰鬥的id), 'plat_id':(平台id,ios系統為0 Android系統為1), 'battle_id':(某一場戰鬥的id), 'mode':(101單人模式 102 雙人模式 103 四人模式), 'dt_event_time':(開始時間戳), 'type': (# default 1)
簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語
注意:
- session_id的擷取方法如微信開發文檔所示,我們這裡隻是簡單粗暴的從Charles抓取:
簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語 - 有些場次的詳細資訊因為相隔時間太久而無法抓取
簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語 - 這裡隻抓取正式比賽(season:1-7)的資料,而不抓取娛樂模式(season:0)的資料
- 有的玩家有兩個賬号,即雙平台(ios & Android,比如我¬_¬),那麼就要對兩個平台的資料全部抓取
- 在每進行一次get請求後,設定延時2s左右,否則會因請求次數過頻繁而報api請求次數已達最大值的錯誤
找到這三個關鍵的接口,我們就隻需要按照如下流程圖的思路便可以得到所需要的資料:
資料分析
雖然爬取到資料,然而如何區分人和人機呢?
通過觀察好友的open_id和擊殺人機的open_id可以看出
真人玩家的open_id格式如下:osewR0************************
人機的open_id 格式如下:osesjdksjjkd_(battle_id)_(number)
是以我們對每個玩家open_id分割後與該場次的battle_id比對,如一緻則說明該open_id為人機!
1.朋友圈玩家最高擊殺場次人機擊殺分析
朋友圈吃雞清單的好友共有27人,但其中3人最高擊殺場次因相隔時間太久而無法抓取。
這24人中,最高擊殺18人,最低也有8人,但我們看看這些資料“水分”如何呢?
- 我們将資料按照人機擊殺比排序,可以看出11人的人機擊殺占比為100%,也就是說,擊殺全部玩家為機器人
- 17位好友人機擊殺占比大于50%,22位好友人機擊殺占比大于70%
- 當然好友也不乏大神,最厲害的一位好友擊殺15人,人機僅占2人,是個狼滅?
是以,如果你的一個朋友告訴你,他最高擊殺數為十幾人時,你的第一反應應該是,50%的機率他殺的全部是人機,30%的機率他殺了一半人機,20%的機率你可以抱緊大腿,上分求帶了>_<
2.朋友圈各段位人機擊殺分析
這裡爬取27位好友各段位的最近擊殺場次,并按照段位從低到高的順序顯示,那麼我們看看是否段位越低,人機越多呢?
- 因為有些場次相隔時間太久而無法爬取詳細資訊,是以隻爬取到了從青銅到王牌7個段位的資料(某個戰神段位的朋友的資料因時間久而沒有爬到,仰望大佬orz)
- 資料基本呈正态分布,其中青銅、皇冠和超級王牌三個段位的資料較少,總共擊殺數均少于100
- 黃金段位擊殺數最多,遠高于其他各段位,看樣子大部分朋友在黃金段位待了很長一段時間
- 白銀段位和星鑽段位的總擊殺數相似,而人機占比也在0.4,這裡大膽猜測:段位和人機占比沒有關系!
- 除了超級王牌段位,其他段位的人機擊殺占比大約分布在0.4~0.5
雖然資料量比較少,資料說服力不足,我隻能粗略得出這樣一個結論:在中低段位,人機占比基本在50%左右,并不會随段位升高而減少。
3.朋友圈在不同模式下各段位場次分布分析
簡單分析完人機擊殺占比,我還發現了一些可以可視化的資料,比如在不同模式下各段位場次分布
- 單人模式下,場次主要分布低段位,白銀段位占比最高,和最高段位(無敵是多麼的寂寞)
- 雙人模式下,場次主要分布中低段位,黃金段位占比最高
- 四人模式下,場次覆寫所有段位,鉑金段位占比最高
是以說,想要達到高段位,叫上你的基友一起四排哇~
4.朋友圈吃雞時間分布
為了顯示更加直覺,我選擇極坐标圖繪制每天,每周的吃雞時間分布:
- 朋友圈好友每天吃雞的時間的高峰期分别是下午4點到5點, 晚上7點到11點
- 晚上10點到11點這兩個小時的遊戲場次,幾乎是全天其餘時間場次的總和
- 不少好友在大半夜(1點到4點)也在吃雞,盲猜一下海外留學黨和修仙黨~
- 朋友圈好友每周吃雞的時間的高峰期分别是星期五, 星期六
- 周五遊戲場數最多,周三遊戲場數最少
簡單分析朋友圈手遊吃雞的資料,分析人機擊殺和資料可視化寫在前面資料擷取資料分析結語
結語
粗略簡單地做了一個人機資料分析和可視化,當然還有更多有趣的資料等待去挖掘,如果還有一些很贊的想法歡迎留言。祝大家上分愉快,大吉大利,天天吃?!
完整代碼連結如下代碼位址