yahoo-finance について
Yahoo Finance の非公式 HTTP エンドポイントから市場データを取得する Python スキルです。yfinance などのラッパーを使わず、単一・複数銘柄向けスクリプトとレート制限、API リファレンスを備えています。
主な機能
- 01過去の OHLCV データ取得
- 02株価と企業ファンダメンタルズの取得
- 03オプション、検索、ニュースの取得
- 04レート制限付き一括取得
- 05CLI スクリプトと API リファレンス
活用シーン
- 01過去の価格を CSV に保存
- 02銘柄の株価とファンダメンタルズを取得
- 03複数銘柄のデータをまとめて収集
- 04銘柄と関連ニュースを検索
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ gauss314/ skills --skill yahoo-financeインストール後、Claude Code で/yahoo-financeを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/API_REFERENCE.mdscripts/batch_fetch.pydownload_historical.pyfetch_all.pyfetch_quote.py詳細
Yahoo Finance — 直接 API(yfinance 不使用)
Yahoo Finance の非公式 API です。yfinance やラッパーを使わず、HTTP リクエストを直接送信して、株式、ETF、暗号資産、外国為替、債券、指数、オプション、ファンダメンタルズ、ニュースのデータにアクセスできます。
ベース URL: https://query1.finance.yahoo.com
代替: https://query2.finance.yahoo.com
⚠️ 重要
- Yahoo には、2017 年以降、公式の公開 API がありません。これらのエンドポイントは非公式であり、予告なく変更される可能性があります。
- 一部のエンドポイントでは、認証に cookie + crumb が必要です(下記で説明します)。
v8/finance/chartエンドポイントは認証なしで動作します(ブラウザーの User-Agent のみ必要です)。- 必ず レート制限 と エラー処理 を実装してください。
完全なドキュメント
すべてのエンドポイント、フィールド、JSON 構造、エラーコード、海外銘柄ティッカー、レート制限戦略、詳細な例については、以下を参照してください。
このドキュメントには、以下が含まれています。
- フィールドごとの説明を含む
quoteSummaryの 33 モジュール - 各エンドポイントの 完全な JSON レスポンス
- 海外銘柄ティッカー(アルゼンチンは
.BA、ブラジルは.SAなど) - WebSocket ストリーミング
- スクリーナー、ルックアップ、トレンド
- 指数バックオフと User-Agent ローテーションを用いた レート制限戦略
認証:Cookie + Crumb
いくつかのエンドポイントでは、セッション Cookie から取得する crumb(CSRF トークン)が必要です。
import requests
BASE = "https://query1.finance.yahoo.com"
HEADERS = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
def yahoo_session():
"""Retorna requests.Session con cookie A3 y crumb."""
s = requests.Session()
s.headers.update(HEADERS)
s.get("https://fc.yahoo.com", timeout=10)
crumb = s.get(f"{BASE}/v1/test/getcrumb", timeout=10).text.strip()
s.params = {"crumb": crumb}
return s
# Uso:
# s = yahoo_session()
# r = s.get("https://query1.finance.yahoo.com/v7/finance/quote?symbols=AAPL,MSFT")
認証の要否別エンドポイント
| 認証不要(User-Agent のみ) | crumb が必要 |
|---|---|
v8/finance/chart(履歴データ) | v7/finance/quote(価格) |
v1/finance/search(検索) | v10/finance/quoteSummary(ファンダメンタルズ) |
v1/finance/trending(トレンド) | v7/finance/options(オプション) |
v1/finance/lookup(ルックアップ) | v6/finance/recommendationsbysymbol |
エンドポイント — クイックリファレンス
1. OHLCV 履歴データ — v8/finance/chart
GET https://query1.finance.yahoo.com/v8/finance/chart/{symbol}?range=1y&interval=1d
| パラメーター | 例 |
|---|---|
range | 1d、5d、1mo、3mo、6mo、1y、5y、10y、ytd、max |
interval | 1m、5m、15m、1h、1d、1wk、1mo |
events | div,splits(配当と株式分割を含む) |
import requests
headers = {"User-Agent": "Mozilla/5.0 (...) Chrome/120.0.0.0 Safari/537.36"}
r = requests.get("https://query1.finance.yahoo.com/v8/finance/chart/AAPL",
params={"range": "1y", "interval": "1d", "events": "div,splits"},
headers=headers)
data = r.json()["chart"]["result"][0]
# data["timestamp"] -> fechas Unix
# data["indicators"]["quote"][0] -> open, high, low, close, volume
# data["indicators"]["adjclose"][0] -> precios ajustados
# data["events"] -> dividendos y splits
2. Quote — v7/finance/quote
s = yahoo_session()
r = s.get("https://query1.finance.yahoo.com/v7/finance/quote?symbols=AAPL,MSFT,GOOGL")
quotes = r.json()["quoteResponse"]["result"]
for q in quotes:
print(q["symbol"], q["regularMarketPrice"], q["regularMarketChangePercent"])
フィールド:regularMarketPrice、regularMarketChangePercent、marketCap、trailingPE、fiftyTwoWeekHigh/Low、dividendYield、volume、marketState(PRE/REGULAR/POST/CLOSED)。
3. ファンダメンタルズ — v10/finance/quoteSummary
s = yahoo_session()
r = s.get("https://query1.finance.yahoo.com/v10/finance/quoteSummary/AAPL",
params={"modules": "assetProfile,financialData,defaultKeyStatistics,incomeStatementHistory,balanceSheetHistory,cashflowStatementHistory,earnings,recommendationTrend"})
fundamentals = r.json()["quoteSummary"]["result"][0]
profile = fundamentals["assetProfile"] # sector, industry, employees, description
financials = fundamentals["financialData"] # EBITDA, revenue, margins, ROE, ROA
stats = fundamentals["defaultKeyStatistics"] # beta, shares, PE, PEG, short info
利用可能なモジュールは 33 個 です。全リストは API_REFERENCE.md のセクション 4 を参照してください。
4. オプション — v7/finance/options
s = yahoo_session()
r = s.get("https://query1.finance.yahoo.com/v7/finance/options/AAPL")
data = r.json()["optionChain"]["result"][0]
expirations = data["expirationDates"]
strikes = data["strikes"]
options = data["options"][0] # calls + puts
5. 検索 + ニュース — v1/finance/search
r = requests.get("https://query1.finance.yahoo.com/v1/finance/search",
params={"q": "Apple", "quotesCount": 3, "newsCount": 5},
headers=HEADERS)
data = r.json()
# data["quotes"] -> tickers encontrados
# data["news"] -> noticias relacionadas
スクリプト
| スクリプト | 説明 |
|---|---|
| batch_fetch.py | トークンバケット + ThreadPoolExecutor を使用した複数ティッカーの一括取得。Quote の一括取得(すべてを 1 つのリクエストで取得)。レート制限を守りながら Chart を並列取得します。 |
| fetch_all.py | 統合スクリプト:履歴データ + Quote + ファンダメンタルズ + オプション + 検索 + 推奨情報を取得します。CLI 引数で任意のティッカーに対応します。 |
| fetch_quote.py | ティッカーごとに Quote + ファンダメンタルズをすばやく取得します。 |
| download_historical.py | OHLCV 履歴データを CSV にダウンロードします。 |
batch_fetch.py — レート制限付きの複数ティッカー一括取得
# Test seguro (3 tickers, solo chart, 2 req/s)
py scripts/batch_fetch.py --tickers AAPL,MSFT,NVDA --chart --rate 2.0
# Batch completo (quote en 1 request + charts en paralelo)
py scripts/batch_fetch.py --tickers AAPL,MSFT,NVDA,GOOGL,META,AMZN,TSLA --all --rate 2.0 --workers 4
# Solo quotes (siempre 1 request, imposible rate-limit)
py scripts/batch_fetch.py --tickers AAPL,MSFT,NVDA,GOOGL --quote
# Personalizar rate + workers
py scripts/batch_fetch.py --tickers AAPL,MSFT,NVDA --all --rate 1.5 --workers 3 --range 5y
主なフラグ:
--rate:トークンバケットのトークン数/秒(デフォルト:2.0 — 安全な最大値)--burst:バースト時に蓄積できるトークン数(デフォルト:5)--workers:並列スレッド数(デフォルト:4)
アーキテクチャ:
- フェーズ 1 — Quote 一括取得:すべてのティッカーを 1 回のリクエストで取得します(
v7/finance/quote?symbols=AAPL,MSFT,...)。 - フェーズ 2 — トークンバケット:ワーカー間で共有するスレッドセーフな
TokenBucketとThreadPoolExecutorを使用します。各ワーカーはリクエストの前にトークンを取得します。2 req/s、burst=5 の場合、ブロックせずに最大 5 件のリクエストを即座に送信でき、その後はバケットによってスループットが安定します。
fetch_all.py — メインスクリプト
python scripts/fetch_all.py --ticker AAPL --all # Todo lo disponible
python scripts/fetch_all.py --ticker GGAL --all --range 5y --interval 1d # GGAL con 5 años
python scripts/fetch_all.py --ticker MSFT --chart --range max # Histórico completo
python scripts/fetch_all.py --ticker NVDA --quote --fundamentals # Quote + fundamentals
python scripts/fetch_all.py --ticker TSLA --all --all-modules # Todos los módulos (~33)
python scripts/fetch_all.py --ticker AAPL --options # Solo opciones
python scripts/fetch_all.py -t AAPL -o mi_data.json -q # Output a archivo, quiet
主なフラグ:
--all:すべてを取得します(chart、quote、fundamentals、options、search、recommendations)--chart:OHLCV 履歴--quote:リアルタイム価格--fundamentals:ファンダメンタルズ(quoteSummary)--options:オプションチェーン--search:検索とニュース--range/--interval:履歴の制御--modules/--all-modules:quoteSummary のモジュール--output:出力 JSON ファイル
GGAL での実際のテスト(テスト済み)
>> Chart (1y, 1d)... OK 250 bars
>> Quote... OK Price: $50.33 (-1.62%)
>> Fundamentals... OK 12 módulos (core)
>> Options... OK 5 expiration dates, 17 calls, 19 puts
>> Search+News... OK 5 news items
Guardado en: ggal_temp.json (123 KB)
国際ティッカー
Yahoo Finance では、米国外の市場にサフィックスを使用します。
| 市場 | サフィックス | 例 |
|---|---|---|
| アルゼンチン(BCBA) | .BA | GGAL.BA、YPFD.BA |
| ブラジル(Bovespa) | .SA | PETR4.SA、VALE3.SA |
| メキシコ(BMV) | .MX | WALMEX.MX |
| 暗号資産 | -USD | BTC-USD、ETH-USD |
| 外国為替 | =X | EURUSD=X |
| 指数 | ^ | ^GSPC(S&P 500) |
完全な一覧はAPI_REFERENCE.md のセクション 14を参照してください。
レート制限
| 制限 | 動作 |
|---|---|
| 約 2 req/s | 安全 |
| 3~5 req/s | 429 が発生する可能性が高い |
| 10 req/s 超 | IP が一時的にブロックされます |
リクエストの間には必ず time.sleep(0.5) を使用し、指数バックオフを実装してください。
複数ティッカーを取得する場合は、2 req/s、burst=5 のトークンバケットを実装する batch_fetch.py を使用してください。レートリミッターがなく、N 個のスレッドを同時に起動する yfinance とは異なり、batch_fetch は合計スループットが安全な上限を超えないようにします。
よくあるエラー
| エラー | 原因 | 解決策 |
|---|---|---|
401 Unauthorized | crumb がありません | yahoo_session() を使用します |
429 Too Many Requests | レート制限 | 30~60 秒待ちます |
Bad Request | crumb の有効期限切れ | crumb を再生成します |
result が空 | 無効なティッカー | 先に search で確認します |
Python-requests がブロックされる | デフォルトの User-Agent | ブラウザーの User-Agent を設定します |
スキルの構成
skills/yahoo-finance/
├── SKILL.md # Este archivo (quickstart)
├── references/
│ └── API_REFERENCE.md # Documentación completa de todos los endpoints
└── scripts/
├── batch_fetch.py # Batch multi-ticker con rate limiting (recomendado)
├── fetch_all.py # Script integral
├── fetch_quote.py # Quote + fundamentals rápido
└── download_historical.py # Históricos a CSV