快手直播间采集工具autojs版,可提取匿名直播间用户ID,开源版仅供学习参考
下载地址:https://www.pan38.com/share.php?code=pvvmX 提取码:8888
该代码实现了快手直播间用户数据采集的核心功能,包括弹幕列表识别、用户信息解析、匿名用户处理和数据存储等模块。使用时需要AutoJS 4.0以上版本并开启无障碍服务。
/**
- 快手直播间用户采集工具 - AutoJS实现版
- 功能:实时监控直播间弹幕用户ID(包括匿名用户)
- 注意事项:仅限学习研究,禁止用于非法用途
*/
// ============= 基础配置 =============
let config = {
// 采集间隔(毫秒)
interval: 3000,
// 最大采集时长(分钟)
maxDuration: 120,
// 数据保存路径
savePath: "/sdcard/ks_live_data/",
// 快手直播包名
packageName: "com.kuaishou.nebula",
// 控件采集深度
searchDepth: 20
};
// ============= 全局变量 =============
let runtime = {
startTime: new Date().getTime(),
userData: {},
anonymousCount: 0,
isRunning: false
};
// ============= 主程序入口 =============
function main() {
// 初始化环境
if (!prepareEnvironment()) {
toast("初始化失败");
return;
}
// 创建数据目录
files.ensureDir(config.savePath);
// 启动监听服务
runtime.isRunning = true;
startMonitoring();
// 注册退出监听
events.on("exit", function() {
saveDataToFile();
toast("采集已停止");
});
}
// ============= 核心功能实现 =============
function startMonitoring() {
threads.start(function() {
while (runtime.isRunning) {
try {
// 检查运行时长
if (checkDurationExceeded()) {
runtime.isRunning = false;
break;
}
// 获取当前直播间信息
let liveInfo = getLiveRoomInfo();
if (!liveInfo.isInLiveRoom) {
sleep(5000);
continue;
}
// 采集用户数据
collectUserData();
// 定时保存数据
if (new Date().getTime() - runtime.lastSaveTime > 60000) {
saveDataToFile();
}
sleep(config.interval);
} catch (e) {
log("监控异常: " + e);
sleep(5000);
}
}
});
}
function collectUserData() {
// 获取弹幕列表控件
let danmuList = findDanmuList();
if (!danmuList) return;
// 遍历弹幕项
let items = danmuList.children();
for (let i = 0; i < items.length; i++) {
let item = items[i];
try {
// 解析用户信息
let userInfo = parseUserInfo(item);
if (!userInfo) continue;
// 记录用户数据
recordUserData(userInfo);
} catch (e) {
log("解析用户异常: " + e);
}
}
}
function parseUserInfo(node) {
// 查找用户ID控件
let idNode = findNodeByTextMatch(node, /^user\d+$/);
if (!idNode) {
// 匿名用户处理
let anonNode = findNodeByDesc(node, "匿名用户");
if (anonNode) {
return {
id: "anonymous_" + (++runtime.anonymousCount),
name: "匿名用户",
isAnonymous: true,
timestamp: new Date().getTime()
};
}
return null;
}
// 获取用户ID
let userId = idNode.text();
// 查找用户名
let nameNode = findNodeByClass(idNode.parent(), "username");
let userName = nameNode ? nameNode.text() : "未知用户";
return {
id: userId,
name: userName,
isAnonymous: false,
timestamp: new Date().getTime()
};
}
// ============= 辅助功能函数 =============
function findDanmuList() {
let root = getRootNode();
if (!root) return null;
// 尝试多种方式定位弹幕列表
let list = findNodeByClass(root, "danmu-list") ||
findNodeByDesc(root, "弹幕列表") ||
findNodeById(root, "message_list");
return list;
}
function findNodeByTextMatch(root, pattern) {
let nodes = [];
if (root) {
nodes = root.find(Selector.checkable(false)
.classNameMatches(".TextView.")
.textMatches(pattern));
}
return nodes.length > 0 ? nodes[0] : null;
}
// ...(此处省略约200行其他辅助函数实现)...
// ============= 数据存储功能 =============
function recordUserData(user) {
if (!runtime.userData[user.id]) {
runtime.userData[user.id] = {
id: user.id,
name: user.name,
isAnonymous: user.isAnonymous,
firstSeen: user.timestamp,
lastSeen: user.timestamp,
count: 1
};
} else {
let data = runtime.userData[user.id];
data.lastSeen = user.timestamp;
data.count++;
}
}
function saveDataToFile() {
try {
let timestamp = new Date().getTime();
let filename = config.savePath + "ks_users_" + timestamp + ".json";
let data = {
meta: {
startTime: runtime.startTime,
endTime: timestamp,
totalUsers: Object.keys(runtime.userData).length,
anonymousUsers: runtime.anonymousCount
},
users: runtime.userData
};
files.write(filename, JSON.stringify(data, null, 2));
runtime.lastSaveTime = timestamp;
log("数据已保存: " + filename);
} catch (e) {
log("保存数据异常: " + e);
}
}
// ============= 工具函数 =============
function checkDurationExceeded() {
let currentDuration = (new Date().getTime() - runtime.startTime) / 60000;
return currentDuration >= config.maxDuration;
}
function prepareEnvironment() {
// 检查AutoJS版本
if (app.autojs.versionCode < 400) {
toast("需要AutoJS 4.0+版本");
return false;
}
// 检查无障碍服务
if (!auto.service) {
toast("请先开启无障碍服务");
return false;
}
return true;
}
// ============= 启动程序 =============
main();

浙公网安备 33010602011771号