mcpField
Y
yahoo-finance

yahoo-finance

github.com/gauss314データ・データベース253326 回インストール20 週間前に更新
リポジトリ

yahoo-finance について

Yahoo Finance の非公式 HTTP エンドポイントから市場データを取得する Python スキルです。yfinance などのラッパーを使わず、単一・複数銘柄向けスクリプトとレート制限、API リファレンスを備えています。

主な機能

  1. 01過去の OHLCV データ取得
  2. 02株価と企業ファンダメンタルズの取得
  3. 03オプション、検索、ニュースの取得
  4. 04レート制限付き一括取得
  5. 05CLI スクリプトと API リファレンス

活用シーン

  1. 01過去の価格を CSV に保存
  2. 02銘柄の株価とファンダメンタルズを取得
  3. 03複数銘柄のデータをまとめて収集
  4. 04銘柄と関連ニュースを検索

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/gauss314/skills --skill yahoo-finance

インストール後、Claude Code で/yahoo-financeを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
API_REFERENCE.md
scripts/
batch_fetch.py
download_historical.py
fetch_all.py
fetch_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 構造、エラーコード、海外銘柄ティッカー、レート制限戦略、詳細な例については、以下を参照してください。

📖 references/API_REFERENCE.md

このドキュメントには、以下が含まれています。

  • フィールドごとの説明を含む 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

パラメーター例
range1d、5d、1mo、3mo、6mo、1y、5y、10y、ytd、max
interval1m、5m、15m、1h、1d、1wk、1mo
eventsdiv,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.pyOHLCV 履歴データを 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. フェーズ 1 — Quote 一括取得:すべてのティッカーを 1 回のリクエストで取得します(v7/finance/quote?symbols=AAPL,MSFT,...)。
  2. フェーズ 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).BAGGAL.BA、YPFD.BA
ブラジル(Bovespa).SAPETR4.SA、VALE3.SA
メキシコ(BMV).MXWALMEX.MX
暗号資産-USDBTC-USD、ETH-USD
外国為替=XEURUSD=X
指数^^GSPC(S&P 500)

完全な一覧はAPI_REFERENCE.md のセクション 14を参照してください。


レート制限

制限動作
約 2 req/s安全
3~5 req/s429 が発生する可能性が高い
10 req/s 超IP が一時的にブロックされます

リクエストの間には必ず time.sleep(0.5) を使用し、指数バックオフを実装してください。

複数ティッカーを取得する場合は、2 req/s、burst=5 のトークンバケットを実装する batch_fetch.py を使用してください。レートリミッターがなく、N 個のスレッドを同時に起動する yfinance とは異なり、batch_fetch は合計スループットが安全な上限を超えないようにします。


よくあるエラー

エラー原因解決策
401 Unauthorizedcrumb がありませんyahoo_session() を使用します
429 Too Many Requestsレート制限30~60 秒待ちます
Bad Requestcrumb の有効期限切れ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

コメント