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

Google Apps Script突发报错:无法读取undefined的'streams'属性

雅虎财经新闻抓取脚本失效排查与修复

问题概述

原用于从雅虎财经抓取新闻稿标题的Google Apps Script突然失效,抛出错误:TypeError: Cannot read properties of undefined (reading 'streams')(对应代码第6行)。

原脚本代码:

function pressReleases(code) {
  var url = 'https://finance.yahoo.com/quote/'+code+'/press-releases'
  var html = UrlFetchApp.fetch(url).getContentText().match(/root.App.main = ([\s\S\w]+?);\n/);
  if (!html || html.length == 1) return;
  var obj = JSON.parse(html[1].trim());
  var res = obj.context.dispatcher.stores.StreamStore.streams["YFINANCE:"+code+".mega"].data.stream_items[0].title;
  return res || "No value";
}

单元格调用方式:=pressReleases(A6)(A6单元格为目标股票代码)

补充:使用Python可正常获取格式一致的JSON数据,问题锁定在Google Apps Script的请求逻辑上。

失效原因

雅虎财经对请求来源做了限制,UrlFetchApp.fetch默认的请求头未携带浏览器标识(如User-Agent),导致服务器返回的HTML中缺失包含新闻数据的StreamStore节点,后续访问streams属性时因父节点不存在报错。而Python请求通常会模拟浏览器请求头,因此能正常获取完整数据。

修复方案

修改脚本,为请求添加模拟浏览器的请求头,并增加数据节点的存在性校验,提升脚本稳定性。

修复后的代码:

function pressReleases(code) {
  var url = 'https://finance.yahoo.com/quote/'+code+'/press-releases';
  // 添加模拟浏览器的请求头,绕过服务器的来源限制
  var options = {
    headers: {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
    }
  };
  var html = UrlFetchApp.fetch(url, options).getContentText().match(/root.App.main = ([\s\S\w]+?);\n/);
  if (!html || html.length == 1) return "No value";
  var obj = JSON.parse(html[1].trim());
  
  // 用try-catch处理可能的节点缺失或结构变动
  try {
    var streamKey = "YFINANCE:"+code+".mega";
    var res = obj.context.dispatcher.stores.StreamStore.streams[streamKey].data.stream_items[0].title;
    return res || "No value";
  } catch(e) {
    return "No value or data structure changed";
  }
}

关键修改点

  • 新增options配置,携带User-Agent请求头,模拟浏览器访问,确保服务器返回完整的内嵌JSON数据
  • 增加try-catch块,避免因雅虎数据结构变动直接抛出错误,保证脚本不会崩溃
  • 优化空值返回逻辑,确保函数始终有明确返回值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:01:05