#!/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()