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

调用YouTubei v1 API遇405错误,Leanback Lite v3加载失败求助

问题排查与修复方案

核心问题原因

  1. 请求方法错误:YouTube i API(youtubei/v1)的所有接口仅支持POST请求,你的代码通过GET方式访问,直接触发405 Method Not Allowed错误。
  2. 端点与参数格式错误:
    • 基础URLhttps://www.googleapis.com/youtubei/v1/并非有效接口,必须指定具体操作端点(如/search);
    • 该API要求参数以JSON格式放在请求体中,而非URL拼接,且不支持alt=xml参数(仅返回JSON响应)。
  3. API调用逻辑不匹配:Leanback Lite的InnerTubeDataFetcher默认可能使用GET,需显式指定POST请求并携带正确的请求体。

具体修复步骤

1. 修正API端点与请求参数

将URL_BASE改为具体的有效端点,并移除URL参数拼接逻辑,改为在请求体中传递参数。

2. 修改请求方法为POST

调整loadMore方法,让InnerTubeDataFetcher发送POST请求,并携带包含API Key、请求参数的JSON体。

3. 适配JSON响应解析

移除alt=xml参数,修改parse方法处理JSON格式的响应数据。

修改后的代码示例

class com.google.youtube.tv.tree.innertube.InnerTubeNode extends com.google.youtube.tv.tree.ListNode
{
   // 改为具体的API端点,比如search
   static var URL_BASE = "https://www.googleapis.com/youtubei/v1/search";
   function InnerTubeNode(title, loadNow)
   {
      super(title, URL_BASE, loadNow);
      this.setMenuCapturing(true);
   }

   // 解析JSON响应
   function parse(src)
   {
      var jsonData = com.google.youtube.tv.util.JsonUtil.parse(src);
      // 根据InnerTube API返回结构实现节点创建逻辑
      this.createChildrenFromJson(jsonData);
   }

   // 从JSON数据创建子节点(需补充业务逻辑)
   function createChildrenFromJson(jsonData)
   {
      var items = jsonData?.items || [];
      for(var i=0; i<items.length; i++){
         var item = items[i];
         var childNode = new com.google.youtube.tv.tree.ListNode(item.snippet.title, null, false);
         this.addChild(childNode);
      }
      this.loaded = true;
      this.notifyChildrenChanged();
   }

   function createChildren()
   {
   }

   // 构建POST请求体
   function buildRequestBody()
   {
      var requestBody = {
         key: com.google.youtube.tv.app.Config.API_KEY,
         // 根据业务需求添加参数,比如搜索关键词、返回字段等
         q: "your_search_query",
         part: "snippet",
         maxResults: 10
      };
      return com.google.youtube.tv.util.JsonUtil.stringify(requestBody);
   }

   function loadMore()
   {
      if(this.loadStarted)
      {
         return undefined;
      }
      this.loadStarted = true;
      this.setDataFetcher();
      // 配置POST请求参数
      this.fetcher.setRequestMethod("POST");
      this.fetcher.setRequestBody(this.buildRequestBody());
      this.fetcher.fetch(this.getURL());
   }

   function createDataFetcher()
   {
      if(this.loaded)
      {
         return undefined;
      }
      var fetcher = new com.google.youtube.tv.data.InnerTubeDataFetcher();
      // 设置请求头为JSON格式
      fetcher.addRequestHeader("Content-Type", "application/json");
      return fetcher;
   }
}

额外注意事项

  • 确保你的API Key已在Google Cloud Console中启用YouTube Data API v3,并配置了正确的权限与访问限制;
  • 部分InnerTube接口可能需要OAuth2令牌身份验证,若仅用API Key无法访问,需补充身份验证逻辑;
  • 测试时可先用Postman发送POST请求验证API可用性,再移植到代码中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:52:40