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

使用Google Script生成Youtube搜索RSS源时添加图片功能问题求助

自定义Youtube搜索RSS源添加图片修复方案

核心错误点

你原来的代码存在四个导致图片不显示的问题:

  • 频道级<image>标签嵌套错误,不符合RSS 2.0规范要求
  • 取视频缩略图时遗漏.url属性,直接传入了对象而非图片链接
  • 自定义的<thumbnail>标签绝大多数RSS阅读器无法识别
  • 未声明媒体标签的命名空间,标准媒体元素无法被解析

修改后完整代码

function getSearchRSS(query){
  let results = YouTube.Search.list('id, snippet', {
    q: query,
    maxResults: 50,
    order: 'date'
  });
  
  let encoded_query = encodeURIComponent(query)
  let rss_url = ScriptApp.getService().getUrl() + "?" + encoded_query;

  // 修复频道级image标签,符合RSS 2.0规范
  let channel = XmlService.createElement("channel")
    .addContent(XmlService.createElement("title").addContent(XmlService.createText("Youtube Search RSS Feed: " + query)))
    .addContent(XmlService.createElement("link").addContent(XmlService.createText("https://www.youtube.com/results?search_query=" + encoded_query)))
    .addContent(XmlService.createElement("description").addContent(XmlService.createText("Youtube Search RSS feed for search query '" + query + "' updated on " + (new Date()))))
    // 频道封面图用Youtube默认logo即可,也可替换为自定义图片链接
    .addContent(XmlService.createElement("image")
      .addContent(XmlService.createElement("title").addContent(XmlService.createText("Youtube Search RSS Feed: " + query)))
      .addContent(XmlService.createElement("link").addContent(XmlService.createText("https://www.youtube.com/results?search_query=" + encoded_query)))
      .addContent(XmlService.createElement("url").addContent(XmlService.createText("https://www.youtube.com/img/desktop/yt_1200x1200.png")))
    )
    .addContent(XmlService.createElement("link", XmlService.getNamespace("atom", "http://www.w3.org/2005/Atom")).setAttribute("rel", "self").setAttribute("href", rss_url));
  
  // 声明media命名空间,用于标准缩略图标签
  const mediaNs = XmlService.getNamespace("media", "http://search.yahoo.com/mrss/");

  for(let i = 0; i < results.items.length; ++i){
    let video = results.items[i];
    // 跳过非视频类搜索结果(频道、播放列表等)避免报错
    if(video.id.kind !== "youtube#video") continue;
    let yt_url = "https://www.youtube.com/watch?v=" + video.id.videoId;
    let thumbnailUrl = video.snippet.thumbnails.medium?.url || video.snippet.thumbnails.default?.url;
    // 把缩略图插入description,兼容所有RSS阅读器
    let descriptionContent = `<img src="${thumbnailUrl}" alt="${video.snippet.title}" /><br>${video.snippet.description}`;
    channel.addContent(XmlService.createElement("item")
      .addContent(
        XmlService.createElement("title").addContent(XmlService.createText(video.snippet.title))
      ).addContent(
        XmlService.createElement("link").addContent(XmlService.createText(yt_url))
      ).addContent(
        // 标准媒体缩略图标签,支持的阅读器会优先读取
        XmlService.createElement("thumbnail", mediaNs).setAttribute("url", thumbnailUrl)
      ).addContent(
        XmlService.createElement("description").addContent(XmlService.createCdata(descriptionContent))
      ).addContent(
        XmlService.createElement("pubDate").addContent(XmlService.createText(Utilities.formatDate(new Date(video.snippet.publishedAt), "EDT", "EEE, dd MMM yyyy HH:mm:ss Z")))
      ).addContent(
        XmlService.createElement("guid").addContent(XmlService.createText(yt_url))
      ))
  }
  
  // 给RSS根元素添加media命名空间
  let rssRoot = XmlService.createElement("rss")
    .setAttribute("version", "2.0")
    .setAttribute("xmlns:atom", "http://www.w3.org/2005/Atom")
    .setAttribute("xmlns:media", "http://search.yahoo.com/mrss/")
    .addContent(channel);

  return XmlService.getPrettyFormat().format(XmlService.createDocument(rssRoot));
}

function doGet(req) {
  let query = decodeURIComponent(req.queryString);
  return ContentService.createTextOutput(getSearchRSS(query))
    .setMimeType(ContentService.MimeType.RSS)
}

生效说明

修改代码后需要重新部署你的Google Apps Script项目,部署完成后原来的RSS访问地址无需更改,即可在阅读器中正常显示视频缩略图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:27:01