求助:使用Node.js逐行扫描Google Document及Roblox ID自动驱逐实现
解决Node.js扫描Google文档逐行读取的问题
嘿,Ross,我来帮你搞定Google文档逐行扫描的问题!要实现这个需求,核心是先通过Google Docs API拉取文档的结构化内容,再把内容转换成可逐行解析的文本格式。下面是一步步的具体实现方案:
1. 先完成Google Docs API的基础配置
- 先去Google Cloud控制台创建一个新项目,启用Google Docs API,然后生成服务账号密钥(JSON格式)。
- 把服务账号的邮箱地址添加到目标Google文档的协作列表中,确保它拥有文档的读取权限。
- 安装必要的依赖包:
npm install googleapis
2. 拉取文档内容并逐行扫描Roblox ID
Google Docs API返回的是结构化的文档数据,不是直接的纯文本行,所以我们需要先提取段落内容,再逐段(对应文档里的行/段落)进行扫描。这里给你一个完整的可运行示例代码:
const { google } = require('googleapis'); const fs = require('fs'); // 加载服务账号密钥文件 const auth = new google.auth.GoogleAuth({ keyFile: 'path/to/your-service-account-key.json', scopes: ['https://www.googleapis.com/auth/documents.readonly'], }); // 定义匹配Roblox ID的正则(Roblox ID为数字,通常10-15位,可根据实际调整) const robloxIdRegex = /\b\d{10,15}\b/g; async function scanGoogleDoc(docId) { try { const docs = google.docs({ version: 'v1', auth }); // 获取文档的完整结构化数据 const res = await docs.documents.get({ documentId: docId }); const document = res.data; // 遍历文档中的所有内容元素 document.body.content.forEach(element => { // 只处理段落类型的元素(对应文档里的行/段落) if (element.paragraph) { // 把段落中的零散文本片段拼接成完整的段落文本 const paragraphText = element.paragraph.elements .map(el => el.textRun?.content || '') .join(''); // 跳过空行 if (!paragraphText.trim()) return; console.log(`扫描到内容行: ${paragraphText}`); // 匹配当前行中的所有Roblox ID const foundIds = paragraphText.match(robloxIdRegex); if (foundIds) { console.log(`找到Roblox ID: ${foundIds.join(', ')}`); // 调用你的Roblox账号处理逻辑(检查群组+驱逐) foundIds.forEach(id => handleRobloxAccount(id)); } } }); } catch (err) { console.error('扫描文档时出错:', err); } } // 示例:处理找到的Roblox ID(替换成你的群组检查和驱逐逻辑) async function handleRobloxAccount(robloxId) { console.log(`开始处理Roblox账号: ${robloxId}`); // 这里可以添加Roblox API调用: // 1. 根据ID获取账号信息 // 2. 检查该账号是否在指定群组列表中 // 3. 若存在,调用驱逐接口移除账号 } // 调用扫描函数,替换成你的Google文档ID(URL中d/后面的字符串) scanGoogleDoc('your-target-google-document-id');
3. 关键细节说明
- Google Docs的
content数组包含了文档的所有元素(段落、图片、表格等),我们只需要筛选paragraph类型的元素来处理,每个段落对应文档中的一行或一段内容。 - 每个段落的
elements是拆分后的文本片段集合,必须拼接成完整文本后才能准确匹配Roblox ID。 - 正则表达式
\b\d{10,15}\b可以精准匹配独立的数字ID,避免误匹配其他长数字串。
额外优化建议
- 如果文档内容很大,可以考虑分段处理或添加进度日志,避免一次性加载过多数据。
- 把指定群组的ID存入单独的配置文件(比如
group-config.json),方便后续维护和修改。 - 调用Roblox API时要注意限流机制,必要时添加延迟或重试逻辑,避免被API限制访问。
内容的提问来源于stack exchange,提问作者Ross
相关产品推荐
相关产品推荐

