AppScript调用Twitter API写入Google Sheet异常:仅获单条推文求助
问题排查与修复方案
核心问题分析
你的代码仅获取到1条数据,是以下几个关键错误导致:
- 循环条件失效:
for(var i=0;i<datos.data;i++)中,datos.data是数组,不能直接和数字i做比较,正确逻辑应该用数组长度datos.data.length,这直接导致循环根本没有执行。 - 用户匹配逻辑错误:直接取
includes.users[0]只能拿到第一个用户,但每条推文的author_id对应不同用户,必须通过author_id匹配对应的用户信息。 - 变量拼写错误:循环里的
atos.data[i].id存在笔误,正确应为datos.data[i].id。 - 重复操作Sheet对象:每次循环都重新获取Sheet实例,既浪费资源又降低执行效率。
修复后的完整代码
function buscador() { // 调用Twitter API const res = UrlFetchApp.fetch("https://api.twitter.com/2/tweets/search/recent?query=pollo&max_results=15&expansions=author_id&tweet.fields=created_at", { headers: { Authorization: "Bearer......." // 替换为你的有效Bearer Token }, }); const results = res.getContentText(); const datos = JSON.parse(results); const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Hoja5"); // 仅当Sheet为空时添加表头 if (sheet.getLastRow() === 0) { const headerRow = ['fecha', 'usuario', 'tweet', 'id']; sheet.appendRow(headerRow); } // 将用户列表转为以author_id为键的对象,方便快速匹配 const userMap = datos.includes.users.reduce((map, user) => { map[user.id] = user.username; return map; }, {}); // 遍历所有推文数据 datos.data.forEach(tweet => { const fecha = tweet.created_at; const usuario = userMap[tweet.author_id]; // 通过author_id匹配对应用户 const tweetText = tweet.text; const tweetId = tweet.id; const row = [fecha, usuario, tweetText, tweetId]; sheet.appendRow(row); }); }
优化说明
- 用户匹配优化:用
reduce把用户数组转成键值对,通过tweet.author_id直接获取对应用户名,避免重复遍历查找。 - 表头逻辑优化:判断Sheet是否为空再添加表头,避免每次运行都重复插入表头。
- 循环效率提升:提前获取Sheet实例,使用
forEach遍历数组更简洁易读。 - 修正拼写错误:修复了循环里的变量拼写问题。
内容的提问来源于stack exchange,提问作者Jesus Garcia
相关产品推荐
相关产品推荐

