You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js调用Twitch API检测直播状态返回400错误求助

Twitch直播间状态检测接口400错误修复

错误原因

  • 你调用的kraken是Twitch已经完全下线的旧版API,所有旧接口请求都会直接被拦截返回错误
  • fetch传参格式错误:你直接将headers对象作为fetch的第二个参数传入,实际上headers需要包裹在配置对象的headers字段下,当前请求根本没有带上你配置的Client-ID头
  • 旧版接口传频道名的规则在新版API中不再适用,新版Helix API查询直播状态需要使用用户ID而非频道名,且鉴权要求同时携带Client-ID和Bearer格式的授权Token

修复方案

  1. 调整授权Token格式:将你配置的OAUTH_TOKEN前缀从oauth:替换为Bearer
  2. 使用Twitch当前正式支持的Helix版API接口,先通过频道名获取对应用户ID,再查询用户的直播状态
  3. 修正fetch请求的参数结构,正确携带请求头

可直接运行的修复后代码

const CHANNEL_NAME = ["daXXXXXX", "gmXXXXXXX"];
const OAUTH_TOKEN = 'bn1rXXXXXXXXXXXXXXXXX'; // 去掉原有的oauth:前缀
const CLIENT_ID = 'bxqtXXXXXXXXXXXXXXXXX';

async function checkStreamStatus(channelName) {
  // 1. 先根据频道名获取用户ID
  const userRes = await fetch(`https://api.twitch.tv/helix/users?login=${channelName}`, {
    headers: {
      "Client-ID": CLIENT_ID,
      "Authorization": `Bearer ${OAUTH_TOKEN}`
    }
  });
  const userData = await userRes.json();
  if (!userData.data?.length) {
    throw new Error(`未找到频道:${channelName}`);
  }
  const userId = userData.data[0].id;

  // 2. 根据用户ID查询直播状态
  const streamRes = await fetch(`https://api.twitch.tv/helix/streams?user_id=${userId}`, {
    headers: {
      "Client-ID": CLIENT_ID,
      "Authorization": `Bearer ${OAUTH_TOKEN}`
    }
  });
  const streamData = await streamRes.json();
  
  // 返回结果:isLive为true表示正在直播,false表示未开播
  return {
    channelName,
    isLive: streamData.data?.length > 0,
    streamInfo: streamData.data?.[0] || null
  }
}

// 测试调用
async function test() {
  const status = await checkStreamStatus(CHANNEL_NAME[0]);
  console.log(status);
}
test()

返回结果说明

  • 若isLive为true,streamInfo中会包含直播标题、游戏分类、观众数、开播时间等信息
  • 若isLive为false,说明当前频道未处于直播状态

注意:如果调用接口返回401错误,检查你的Client-ID和OAuth Token是否匹配,Token是否有对应的接口权限。批量查询多个频道状态时,可以把多个user_id拼到请求参数里,减少接口请求次数。

内容的提问来源于stack exchange,提问作者gagore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:09:25