Files
server-configs/fetch-stock-prices.py
2026-02-13 22:24:27 +08:00

105 lines
2.8 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
获取股票价格和标普500指数
"""
import requests
import json
from datetime import datetime
# Yahoo Finance API 配置
YAHOO_API_URL = "https://query1.finance.yahoo.com/v8/finance/chart/"
# 指数配置
INDEXES = {
"^GSPC": "标普500",
"^IXIC": "纳斯达克",
"^DJI": "道琼斯"
}
def get_stock_price(symbol):
"""获取股票实时价格"""
try:
url = f"{YAHOO_API_URL}{symbol}"
params = {
"interval": "1d",
"range": "1d"
}
response = requests.get(url, params=params, timeout=10)
if response.status_code == 200:
data = response.json()
# 解析价格数据
chart = data.get("chart", {})
result = chart.get("result", [])
if result:
meta = result[0].get("meta", {})
current_price = meta.get("regularMarketPrice")
previous_close = meta.get("previousClose")
if current_price and previous_close:
change = current_price - previous_close
change_percent = (change / previous_close) * 100
return {
"symbol": symbol,
"price": current_price,
"previous_close": previous_close,
"change": change,
"change_percent": change_percent,
"currency": meta.get("currency", "USD")
}
return None
except Exception as e:
print(f"获取 {symbol} 价格失败: {e}")
return None
def get_index_prices():
"""获取指数价格"""
print("=" * 60)
print("获取指数价格")
print("=" * 60)
indexes = {}
for symbol, name in INDEXES.items():
price_data = get_stock_price(symbol)
if price_data:
indexes[symbol] = {
"name": name,
"price": price_data["price"],
"change": price_data["change"],
"change_percent": price_data["change_percent"]
}
print(f"{name} ({symbol}): {price_data['price']:.2f} ({price_data['change_percent']:+.2f}%)")
else:
print(f"{name} ({symbol}): 获取失败")
print("=" * 60)
return indexes
def main():
"""主函数"""
print("开始获取股票价格和指数...")
print()
# 获取指数价格
indexes = get_index_prices()
if indexes:
print("\n✅ 指数数据获取成功")
print(f"获取了 {len(indexes)} 个指数数据")
else:
print("\n❌ 指数数据获取失败")
if __name__ == "__main__":
main()