工作流概述
功能
获取 Yahoo Finance 的股票期权数据和实时行情
流程图
[手动触发]
↓
[配置股票代码]
↓
[获取 Cookies]
↓
[准备 Cookie Jar]
↓
[获取 Crumb]
├──→ [获取期权数据] → [处理期权数据]
└──→ [获取股票数据] → [处理股票数据]
详细搭建步骤
步骤1: 创建新工作流
-
1. 登录 n8n: https://a.qqx.ai -
2. 点击 "+ New Workflow" -
3. 命名为: Yahoo Finance Data Fetcher
节点1: Manual Trigger(手动触发器)
类型: Manual Trigger
名称:When clicking 'Execute workflow'
配置: 无需配置
节点2: Code - 配置股票代码
类型: Code
名称:Symbol Configuration
连接: 连接到 Manual Trigger
配置:
-
• Language: JavaScript
代码:
return { 'symbol': '^SPX' }
说明:
-
• ^SPX- 标普500指数 -
• AAPL- 苹果股票 -
• TSLA- 特斯拉股票 -
• BTC-USD- 比特币
节点3: HTTP Request - 获取 Yahoo Cookies
类型: HTTP Request
名称:Get Yahoo Cookies
连接: 连接到 Symbol Configuration
配置:
-
• Method: GET -
• URL: https://fc.yahoo.com -
• Send Headers: ✅ 开启
Headers(添加 2 个):
|
|
|
|---|---|
|
|
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36 |
|
|
text/html,application/xhtml+xml |
Options:
-
• 展开 Response 选项 -
• ✅ Full Response -
• ✅ Never Error -
• Response Format: Text
节点4: Code - 准备 Cookie Jar
类型: Code
名称:Prepare Cookie Jar
连接: 连接到 Get Yahoo Cookies
配置:
-
• Language: JavaScript
代码:
var cookieJar = Array.isArray($input.first().json.headers['set-cookie'])
? $input.first().json.headers['set-cookie']
.map(s => s.split(";")[0])
.join("; ")
: String($input.first().json.headers['set-cookie'] || "")
.split(/\r?\n/).map(s => s.split(";")[0]).join("; ");
return {
'ua': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36',
'cookieJar': cookieJar
}
说明: 提取并格式化从 Yahoo 返回的 Cookies
节点5: HTTP Request - 获取 Crumb
类型: HTTP Request
名称:Get Crumb
连接: 连接到 Prepare Cookie Jar
配置:
-
• Method: GET -
• URL: https://query2.finance.yahoo.com/v1/test/getcrumb -
• Send Headers: ✅ 开启
Headers(添加 3 个):
|
|
|
|---|---|
|
|
={{ $json.ua }} |
|
|
={{ $json.cookieJar }} |
|
|
text/plain,*/* |
Options:
-
• 展开 Response 选项 -
• ✅ Full Response -
• Response Format: Text -
• Output Property Name: body
说明: Crumb 是 Yahoo Finance API 的验证令牌
节点6: HTTP Request - 获取期权数据
类型: HTTP Request
名称:Fetch Options
连接: 连接到 Get Crumb
配置:
-
• Method: GET -
• URL: =https://query2.finance.yahoo.com/v7/finance/options/{{ $('Symbol Configuration').item.json.symbol }} -
• Send Query Parameters: ✅ 开启
Query Parameters(添加 1 个):
|
|
|
|---|---|
|
|
={{ $json.body }} |
Send Headers: ✅ 开启
Headers(添加 4 个):
|
|
|
|---|---|
|
|
={{ $('Prepare Cookie Jar').item.json.ua }} |
|
|
={{ $('Prepare Cookie Jar').item.json.cookieJar }} |
|
|
application/json |
|
|
={{ "https://finance.yahoo.com/quote/" + ($('Symbol Configuration').item.json.symbol) + "/options" }} |
Options:
-
• Response Format: JSON
节点7: HTTP Request - 获取股票数据
类型: HTTP Request
名称:Fetch Stock Data
连接: ⚠️ 也连接到 Get Crumb(创建分支)
配置:
-
• Method: GET -
• URL: =https://query2.finance.yahoo.com/v8/finance/chart/{{ $('Symbol Configuration').item.json.symbol }}?interval=1m&range=1d -
• Send Query Parameters: ✅ 开启
Query Parameters(添加 1 个):
|
|
|
|---|---|
|
|
={{ $json.body }} |
Send Headers: ✅ 开启
Headers(添加 4 个):
|
|
|
|---|---|
|
|
={{ $('Prepare Cookie Jar').item.json.ua }} |
|
|
={{ $('Prepare Cookie Jar').item.json.cookieJar }} |
|
|
application/json |
|
|
={{ "https://finance.yahoo.com/quote/" + ($('Symbol Configuration').item.json.symbol) }} |
Options:
-
• Response Format: JSON
说明:
-
• interval=1m- 1分钟K线 -
• range=1d- 获取1天的数据
节点8: Code - 处理期权数据
类型: Code
名称:Map Calls/Put Options
连接: 连接到 Fetch Options
配置:
-
• Language: JavaScript
代码:
// Get Options data
var options = $input.first().json.optionChain.result[0].options[0];
// Merge puts & calls
var calls = options['calls'];
var puts = options['puts'];
return {'calls':calls, 'puts':puts}
说明: 提取看涨期权(calls)和看跌期权(puts)数据
节点9: Code - 处理股票数据
类型: Code
名称:Map Stock
连接: 连接到 Fetch Stock Data
配置:
-
• Language: JavaScript
代码:
// Get Options data
var stock = $input.first().json.chart.result[0];
var timestamps = stock.timestamp;
var quote = stock.indicators.quote[0];
return timestamps.map((t, i) => ({
time: t,
open: quote.open[i],
high: quote.high[i],
low: quote.low[i],
close: quote.close[i],
volume: quote.volume[i]
}));
说明: 将原始数据转换为标准的 OHLCV 格式

