直播彈幕抓取工具實(shí)戰(zhàn)指南)
wxlivespy一款可快速上手的微信視頻號(hào)直播彈幕抓取工具實(shí)戰(zhàn)指南【免費(fèi)下載鏈接】wxlivespy微信視頻號(hào)直播間彈幕信息抓取工具項(xiàng)目地址: https://gitcode.com/gh_mirrors/wx/wxlivespy一次被手工記錄逼瘋的直播你有沒有經(jīng)歷過這樣的場(chǎng)景直播間里彈幕像流水一樣滾過禮物特效閃個(gè)不停而你在后臺(tái)只能盯著一個(gè)幾乎不刷新的界面靠截圖和復(fù)制粘貼去整理用戶評(píng)論。一場(chǎng)兩小時(shí)的直播下來數(shù)據(jù)零零散散、缺東少西更別提還要去回答誰來了幾次誰打賞最多這類問題。wxlivespy 就是為這個(gè)場(chǎng)景而生的。它是一款基于 Electron 的微信視頻號(hào)直播數(shù)據(jù)抓取工具能在你開播或觀看直播時(shí)實(shí)時(shí)抓取直播間里的彈幕、禮物、進(jìn)場(chǎng)、點(diǎn)贊等互動(dòng)消息并把這些數(shù)據(jù)通過 HTTP 接口轉(zhuǎn)發(fā)到你自己的服務(wù)端。換句話說它是你和結(jié)構(gòu)化直播數(shù)據(jù)之間的那座橋。為什么要用它比起肉眼盯屏它強(qiáng)在哪傳統(tǒng)的人工記錄方式有三個(gè)繞不開的痛點(diǎn)慢彈幕是瞬時(shí)的等你看到、復(fù)制下來下一條已經(jīng)過去了漏點(diǎn)贊、進(jìn)場(chǎng)這類消息沒有獨(dú)立界面根本無從記錄散數(shù)據(jù)進(jìn)了 Excel 或聊天記錄之后沒法做實(shí)時(shí)統(tǒng)計(jì)、沒法觸發(fā)自動(dòng)回復(fù)。wxlivespy 給出的解法是攔截-解析-轉(zhuǎn)發(fā)三步走先拿到微信服務(wù)端返回給瀏覽器的原始數(shù)據(jù)再按消息類型解碼成結(jié)構(gòu)化的 JSON最后推給你指定的地址。你只需要寫一個(gè)接收 HTTP POST 的接口就能拿到每一條彈幕的昵稱、內(nèi)容、時(shí)間、用戶 ID以及每次送禮的禮物 ID、數(shù)量和微信幣價(jià)值。3 分鐘跑通第一版上手流程比想象中簡(jiǎn)單核心就四步。第一步拉取代碼并安裝依賴git clone https://gitcode.com/gh_mirrors/wx/wxlivespy cd wxlivespy npm install第二步準(zhǔn)備 Chrome。工具依賴 Puppeteer 控制瀏覽器安裝完成后它會(huì)在C:\Users\用戶名\.cache\puppeteer\chrome下放好一份 Chrome。把它整個(gè)復(fù)制到項(xiàng)目目錄下的assets\puppeteer_chrome讓工具能找到瀏覽器程序。第三步啟動(dòng)開發(fā)環(huán)境npm start第四步體驗(yàn)完整鏈路點(diǎn)擊界面上的開始監(jiān)聽工具會(huì)彈出一個(gè)瀏覽器窗口跳轉(zhuǎn)到微信視頻號(hào)管理后臺(tái)你用微信掃碼登錄后開始直播。此時(shí)工具界面會(huì)實(shí)時(shí)滾動(dòng)顯示直播間狀態(tài)與互動(dòng)消息。再填一個(gè)轉(zhuǎn)發(fā)地址默認(rèn)是http://127.0.0.1:8000/forward消息就會(huì)源源不斷地 POST 到你的服務(wù)端。核心原理它憑什么能認(rèn)出同一批人整個(gè)工具最值錢的技術(shù)點(diǎn)有兩個(gè)一個(gè)是抓什么一個(gè)是怎么認(rèn)人。精準(zhǔn)攔截而不是全盤照收Puppeteer 在瀏覽器層面監(jiān)聽每一個(gè) HTTP 響應(yīng)但視頻號(hào)頁面里圖片、CSS、視頻請(qǐng)求占了絕大多數(shù)全部處理會(huì)浪費(fèi)大量資源。工具在src/main/listener.ts里做了兩道過濾按 Content-Type 排除視頻、圖片、音頻和靜態(tài)資源按 URL 只保留mmfinderassistant-bin/live/msg這條接口——它就是彈幕和禮物的總水管??鐖?chǎng)次認(rèn)人從加密 ID 里挖出穩(wěn)定標(biāo)識(shí)這是最有意思的部分。微信返回的數(shù)據(jù)里sec_openid是加密過的用戶標(biāo)識(shí)同一個(gè)用戶在每場(chǎng)直播中都會(huì)變化直接用它做用戶畫像毫無意義。但開發(fā)者發(fā)現(xiàn)在評(píng)論和進(jìn)場(chǎng)的msg_id里藏著一個(gè)以_o9h開頭的后綴它就是穩(wěn)定的decoded_openidstatic getOpenIDFromMsgId(msgId: string): string | null { const idx msgId.indexOf(_o9h); if (idx 0) { return msgId.substring(idx 1, msgId.length); } return null; }可問題來了送禮消息的msg_id結(jié)構(gòu)不同解析不出_o9h后綴。解決思路很巧妙——先靠評(píng)論和進(jìn)場(chǎng)把sec_openid ? decoded_openid的映射存進(jìn)內(nèi)存緩存src/main/idcache.ts當(dāng)同一位用戶后續(xù)送禮時(shí)就能順著映射把身份補(bǔ)上。如果用戶一進(jìn)場(chǎng)就送禮、緩存里還沒映射工具會(huì)記錄警告日志等待下一次評(píng)論補(bǔ)齊。正是這套先建索引、再關(guān)聯(lián)查表的思路讓同一用戶在單場(chǎng)直播內(nèi)的所有行為都能歸到同一個(gè)身份下。真實(shí)效果一場(chǎng)直播拿到了什么假設(shè)你在本地起一個(gè)簡(jiǎn)單的接收服務(wù)把forward_url指向它。一場(chǎng) 30 分鐘的直播過后你會(huì)收到類似這樣的結(jié)構(gòu)化數(shù)據(jù)每條評(píng)論{ nickname, content, seq, decoded_openid, msg_time }每次送禮{ nickname, gift_id, gift_num, gift_value, decoded_openid }直播間狀態(tài)在線人數(shù)、點(diǎn)贊總數(shù)、打賞總金額微信幣用戶等級(jí)變化from_level → to_level你可以在自己的服務(wù)端做去重靠seq序號(hào)也可以直接拿它做實(shí)時(shí)統(tǒng)計(jì)誰在哪個(gè)時(shí)間段最活躍、誰的禮物貢獻(xiàn)最大、哪段內(nèi)容引發(fā)評(píng)論高峰。寫一個(gè)彈幕游戲、接一個(gè)自動(dòng)化歡迎機(jī)器人數(shù)據(jù)源都?jí)蛄?。另外工具還在21201端口內(nèi)置了一個(gè)/getLiveStatus接口其他程序可以直接拉取當(dāng)前的直播間狀態(tài)。避坑指南四個(gè)容易踩的坑Chrome 路徑不對(duì)工具只認(rèn)assets\puppeteer_chrome目錄下的瀏覽器復(fù)制錯(cuò)位置或漏了這一步啟動(dòng)監(jiān)聽時(shí)會(huì)直接報(bào)錯(cuò)。先確認(rèn)目錄存在再點(diǎn)開始監(jiān)聽。只在 Windows 上驗(yàn)證過README 明確寫著工具只在 Win64 系統(tǒng)發(fā)布并測(cè)試其他系統(tǒng)macOS、Linux沒有驗(yàn)證記錄跨平臺(tái)使用要自行承擔(dān)風(fēng)險(xiǎn)。點(diǎn)贊次數(shù)不精確能拿到誰點(diǎn)贊了這類事件和直播間點(diǎn)贊總數(shù)但拿不到單個(gè)用戶的精確點(diǎn)贊次數(shù)這是平臺(tái)協(xié)議本身決定的不是工具的 bug。轉(zhuǎn)發(fā)會(huì)重復(fù)服務(wù)端收到的數(shù)據(jù)可能重復(fù)推送務(wù)必根據(jù)seq自己實(shí)現(xiàn)去重邏輯forward_url未配置時(shí)數(shù)據(jù)只會(huì)顯示在界面上不會(huì)外發(fā)。進(jìn)階玩法把工具改造成你想要的樣子項(xiàng)目結(jié)構(gòu)非常清晰二次開發(fā)基本是對(duì)號(hào)入座想加新消息類型在src/main/WXDataDecoder.ts的liveMessageFromAppMsg里按msgType補(bǔ)一個(gè)分支比如禮物消息對(duì)應(yīng)20009、連擊送禮對(duì)應(yīng)20013、點(diǎn)贊對(duì)應(yīng)20006、升級(jí)對(duì)應(yīng)20031其他未知類型會(huì)保留原始數(shù)據(jù)存入original_data字段想改數(shù)據(jù)處理邏輯在src/main/service.ts里擴(kuò)展事件處理流程比如對(duì)接數(shù)據(jù)庫、發(fā)到消息隊(duì)列想換轉(zhuǎn)發(fā)協(xié)議參考src/main/EventForwarder.ts它已經(jīng)實(shí)現(xiàn)了普通 JSON 和 gzip 壓縮兩種 POST 方式照著加一個(gè) WebSocket 轉(zhuǎn)發(fā)并不難。消息識(shí)別的字段約定都在src/CustomTypes.ts的類型定義里寫得清清楚楚想改哪里注釋都能領(lǐng)路。結(jié)語wxlivespy 的價(jià)值在于把視頻號(hào)直播數(shù)據(jù)抓取這個(gè)聽起來很玄的事情壓縮成了一條看得見的流水線攔截請(qǐng)求、解析消息、識(shí)別身份、轉(zhuǎn)發(fā)數(shù)據(jù)。它沒有把復(fù)雜度藏起來反而把每段邏輯都拆成了獨(dú)立的小模塊讓你既能開箱即用也能順著源碼理解微信直播數(shù)據(jù)的組織方式。項(xiàng)目地址https://gitcode.com/gh_mirrors/wx/wxlivespy克隆后按 README 操作即可。核心源碼集中在src/main/目錄監(jiān)聽器、解碼器、轉(zhuǎn)發(fā)器、ID 緩存各司其職界面代碼在src/renderer/。如果你正在做視頻號(hào)直播監(jiān)控、彈幕數(shù)據(jù)實(shí)時(shí)抓取或者直播數(shù)據(jù)接口轉(zhuǎn)發(fā)的需求它值得你花一個(gè)下午研究一遍?!久赓M(fèi)下載鏈接】wxlivespy微信視頻號(hào)直播間彈幕信息抓取工具項(xiàng)目地址: https://gitcode.com/gh_mirrors/wx/wxlivespy創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考