文件预览

summarize_performance.py

查看 Stock Watcher 技能包中的文件内容。

文件内容

scripts/summarize_performance.py

#!/usr/bin/env python3
"""
Summarize the performance of all stocks in the watchlist.
This script fetches current stock data from 10jqka.com.cn for each stock
in the watchlist and provides a summary of their recent performance.
"""
import os
import sys
import requests
from bs4 import BeautifulSoup
import time

# Standardized watchlist file path
WATCHLIST_FILE = os.path.expanduser("~/.clawdbot/stock_watcher/watchlist.txt")

def fetch_stock_data(stock_code):
    """Fetch stock data from 10jqka.com.cn."""
    url = f"https://stockpage.10jqka.com.cn/{stock_code}/"
    
    try:
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
        }
        response = requests.get(url, headers=headers, timeout=10)
        response.encoding = 'utf-8'
        
        if response.status_code != 200:
            return None
            
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # Extract basic info
        title = soup.find('title')
        stock_name = ""
        if title:
            title_text = title.get_text()
            if '(' in title_text and ')' in title_text:
                stock_name = title_text.split('(')[0].strip()
        
        # Look for performance data
        performance_data = {}
        
        # Try to find recent performance indicators
        # This is a simplified version - in practice, you'd need more robust parsing
        text_content = soup.get_text()
        
        # Look for key phrases
        if '涨跌幅' in text_content:
            # Extract percentage changes
            import re
            percentages = re.findall(r'[-+]?\d+\.?\d*%', text_content)
            if percentages:
                performance_data['recent_changes'] = percentages[:3]  # Get first 3 percentages
        
        return {
            'code': stock_code,
            'name': stock_name,
            'url': url,
            'performance': performance_data
        }
        
    except Exception as e:
        print(f"Error fetching data for {stock_code}: {e}", file=sys.stderr)
        return None

def summarize_performance():
    """Summarize performance of all stocks in watchlist."""
    if not os.path.exists(WATCHLIST_FILE):
        return
    
    with open(WATCHLIST_FILE, 'r', encoding='utf-8') as f:
        lines = f.readlines()
    
    if not lines or all(not line.strip() for line in lines):
        return
    
    # Directly output performance summary without any command prompts
    for line in lines:
        line = line.strip()
        if line:
            parts = line.split('|')
            if len(parts) == 2:
                code, name = parts
                
                # Fetch data
                stock_data = fetch_stock_data(code)
                if stock_data:
                    if stock_data['performance']:
                        for i, change in enumerate(stock_data['performance'].get('recent_changes', []), 1):
                            print(f"{code} - {name} - 指标{i}: {change}")
                    else:
                        print(f"{code} - {name} - 行情数据暂不可用")
                else:
                    print(f"{code} - {name} - 获取数据失败")
                
                # Be respectful to the server
                time.sleep(1)

if __name__ == "__main__":
    summarize_performance()