Skill: sunnyfo/sina-stock (version 0.1.0)

--- name: sina-stock description: 获取 A 股实时股票行情数据（上证指数、深证成指、创业板指等），使用新浪财经 API。无需 API Key。 --- # Sina Stock - A 股实时行情 通过新浪财经 API 获取 A 股市场实时行情数据，包括大盘指数和个股行情。 ## 功能特性 - 📈 **实时行情** - 获取当前价格、涨跌幅、成交量、成交额 - 📊 **大盘指数** - 上证指数、深证成指、创业板指、沪深 300 等 - 📉 **个股行情** - 支持任意 A 股股票代码查询 - 💰 **详细数据** - 开盘价、收盘价、最高价、最低价、振幅 - 🆓 **免费使用** - 无需 API Key，直接调用 ## 支持的大盘指数 | 名称 | 代码 | 市场 | |------|------|------| | 上证指数 | sh000001 | 沪市 | | 深证成指 | sz399001 | 深市 | | 创业板指 | sz399006 | 创业板 | | 沪深 300 | sh000300 | 跨市场 | | 上证 50 | sh000016 | 沪市 | | 中证 500 | sh000905 | 跨市场 | ## 快速开始 ### 获取大盘行情 ```bash python3 "$SKILLS_ROOT/sina-stock/scripts/get_stock.py" sh000001,sz399001,sz399006 ``` ### 获取个股行情 ```bash python3 "$SKILLS_ROOT/sina-stock/scripts/get_stock.py" sh600519,sz000858 ``` ### 格式化输出（JSON） ```bash python3 "$SKILLS_ROOT/sina-stock/scripts/get_stock.py" sh000001 --json ``` ## 脚本参数 | 参数 | 说明 | 默认值 | |------|------|--------| | `codes` | 股票代码（逗号分隔） | 必填 | | `--json` | 输出 JSON 格式 | false | | `--simple` | 简化输出 | false | ## 输出示例 ### 标准输出 ``` ============================================================ A 股股市大盘实时数据 更新时间：2026-03-02 15:00 ============================================================ 【上证指数】 当前价： 4151.80 涨跌幅： +0.00 (+0.00%) 开盘价： 4162.88 最高价： 4188.77 最低价： 4131.37 成交量： 861,579,218 手 成交额： 1,345,892,469,395 元 ============================================================ 数据来源：新浪财经 API ``` ### JSON 输出 ```json { "time": "2026-03-02 15:00:00", "data": [ { "code": "sh000001", "name": "上证指数", "current": 4151.80, "change": 0.00, "change_pct": 0.00, "open": 4162.88, "high": 4188.77, "low": 4131.37, "volume": 861579218, "turnover": 1345892469395 } ] } ``` ## 股票代码格式 - **沪市股票**：`sh` + 6 位代码（如 `sh600519`） - **深市股票**：`sz` + 6 位代码（如 `sz000858`） - **大盘指数**：同上（如 `sh000001`） ## 数据字段说明 | 字段 | 说明 | |------|------| | current | 当前价格 | | change | 涨跌额（当前价 - 昨收价） | | change_pct | 涨跌幅（百分比） | | open | 开盘价 | | high | 最高价 | | low | 最低价 | | prev_close | 昨收价 | | volume | 成交量（手） | | turnover | 成交额（元） | ## 使用示例 ### 示例 1：查看大盘整体情况 ```bash python3 "$SKILLS_ROOT/sina-stock/scripts/get_stock.py" sh000001 sz399001 sz399006 ``` ### 示例 2：监控自选股 ```bash python3 "$SKILLS_ROOT/sina-stock/scripts/get_stock.py" sh600519,sz000858,sz300750 --simple ``` ### 示例 3：获取数据用于程序处理 ```bash python3 "$SKILLS_ROOT/sina-stock/scripts/get_stock.py" sh000001 --json ``` ## 技术实现 ### API 接口 ``` https://hq.sinajs.cn/list=[股票代码] ``` ### 响应格式（GBK 编码） ``` var hq_str_sh000001="指数名称，当前价，开盘价，昨收价，最高价，最低价，涨跌额，涨跌幅，成交量，成交额，..." ``` ### 数据解析 脚本自动处理： 1. GBK 编码解码 2. CSV 格式解析 3. 数值格式化 4. 涨跌幅计算 ## 注意事项 1. **交易时间**： - 上午：9:30-11:30 - 下午：13:00-15:00 - 非交易时间返回最后收盘价 2. **数据延迟**：实时数据，可能有秒级延迟 3. **编码处理**：API 返回 GBK 编码，脚本已自动处理 4. **请求频率**：建议间隔 1 秒以上，避免被限流 ## 常见问题 **Q: 为什么涨跌幅是 0？** A: 非交易时间或刚开盘时，数据可能未更新 **Q: 可以获取港股/美股吗？** A: 不支持，此技能仅限 A 股。港股美股需用其他 API **Q: 数据准确吗？** A: 数据来自新浪财经，与官网一致 ## 扩展开发 如需添加功能，可修改脚本中的 `format_output()` 函数： ```python def format_output(data, fmt='text'): if fmt == 'json': return json.dumps(data, ensure_ascii=False, indent=2) elif fmt == 'simple': # 自定义简化格式 ... else: # 标准文本格式 ... ``` ## 许可证 MIT License ## 数据来源 新浪财经 (https://finance.sina.com.cn/)

path: CLAWHUB_SUBMIT.md
content: # 🦞 ClawHub.ai 发布指南

## 快速发布（推荐）

由于环境限制，建议使用 **网站直接发布** 方式。

### 步骤 1: 访问 ClawHub 发布页面

打开浏览器访问：https://clawhub.ai/skills/publish

### 步骤 2: 登录账号

使用你的账号登录（GitHub 账号或邮箱注册）

**账号信息**: Sunnyfo

### 步骤 3: 填写发布信息

复制以下内容到 ClawHub 发布表单：

#### 基本信息
| 字段 | 填写内容 |
|------|----------|
| **Name** | `sina-stock` |
| **Display Name** | `Sina Stock - A 股实时行情` |
| **Description** | `获取 A 股实时股票行情数据（上证指数、深证成指、创业板指等），使用新浪财经 API。无需 API Key。` |
| **Version** | `1.0.0` |
| **Category** | `Finance` |
| **License** | `MIT` |
| **Icon** | 📈 |

#### 标签 (Tags)
```
stock, finance, A 股，行情，股票，中国，新浪财经，上证指数，深证成指
```

#### GitHub 仓库
```
https://github.com/Sunnyfo/sina-stock
```

### 步骤 4: 上传配置文件

上传 `clawhub.yaml` 文件内容：

```yaml
---
name: sina-stock
version: 1.0.0
description: 获取 A 股实时股票行情数据（上证指数、深证成指、创业板指等），使用新浪财经 API。无需 API Key。
author: Sunnyfo
license: MIT
category: finance
tags:
  - stock
  - finance
  - A 股
  - 行情
  - 股票
  - 中国
entry:
  type: script
  path: scripts/get_stock.py
  interpreter: python3
```

### 步骤 5: 提交审核

点击 **Submit for Review** 按钮

审核时间：1-3 个工作日

---

## 📋 发布检查清单

提交前确认：

- [x] GitHub 仓库已公开（https://github.com/Sunnyfo/sina-stock）
- [x] README.md 已包含使用说明
- [x] SKILL.md 已包含详细文档
- [x] clawhub.yaml 配置正确
- [x] 代码可以正常运行
- [ ] ClawHub 表单已填写完整
- [ ] 已点击提交审核

---

## 🔍 审核后

审核通过后：
1. 你会收到邮件通知
2. Skill 会在 ClawHub 上线
3. 用户可以通过 `skill install sina-stock` 安装

---

## 💡 提示

- 确保 GitHub 仓库是 **Public**（公开）
- 审核期间保持仓库可访问
- 如有问题，ClawHub 团队会通过邮件联系你

---

**祝发布顺利！** 🎉


path: PUBLISH_GUIDE.md
content: # 📤 Sina Stock Skill 发布指南

本指南将帮助你把 `sina-stock` skill 发布到 GitHub 和 ClawHub.ai。

---

## 📋 准备工作

### 1. 确认文件结构

确保项目包含以下文件：

```
sina-stock/
├── README.md          # GitHub 展示页面
├── SKILL.md           # 技能使用文档
├── _meta.json         # LobsterAI 元数据
├── clawhub.yaml       # ClawHub 发布配置
├── .gitignore         # Git 忽略文件
└── scripts/
    └── get_stock.py   # 主脚本
```

✅ 所有文件已创建完成！

---

## 🚀 发布到 GitHub

### 步骤 1: 创建 GitHub 仓库

1. 访问 https://github.com/new
2. 填写仓库信息：
   - **Repository name**: `sina-stock`
   - **Description**: `A 股实时行情 Skill for LobsterAI - 获取上证指数、深证成指等股票数据`
   - **Visibility**: Public（公开）
   - **不要** 初始化 README/.gitignore（我们已经有了）

3. 点击 "Create repository"

### 步骤 2: 推送代码到 GitHub

在仓库创建页面，复制你的仓库地址，然后运行：

```bash
cd C:/Users/86183/lobsterai/project/sina-stock

# 添加远程仓库（你的 GitHub 用户名：Sunnyfo）
git remote add origin https://github.com/Sunnyfo/sina-stock.git

# 验证远程仓库
git remote -v

# 推送到 GitHub
git push -u origin main
```

### 步骤 3: 完善 GitHub 页面

1. **添加 Topics**：
   - 在仓库页面点击 "Manage topics"
   - 添加：`lobsterai`, `skill`, `stock`, `finance`, `A 股`, `股票`, `新浪财经`

2. **关于区域**：
   - 点击 "Manage" 编辑关于信息
   - 设置 website: `https://clawhub.ai`（发布后）

---

## 🦞 发布到 ClawHub.ai

### 方式 1: 通过 ClawHub 网站（推荐）

1. 访问 https://clawhub.ai/skills/publish

2. 登录/注册账号

3. 填写发布信息：
   - **Name**: `sina-stock`
   - **Description**: `获取 A 股实时股票行情数据，无需 API Key`
   - **GitHub Repository**: `https://github.com/Sunnyfo/sina-stock`
   - **Version**: `1.0.0`
   - **Category**: `Finance`
   - **Tags**: `stock, finance, A 股，行情，股票`

4. 上传/配置文件：
   - 上传 `clawhub.yaml`（已创建）
   - 或直接在网页填写配置

5. 提交审核

### 方式 2: 通过 ClawHub CLI

```bash
# 安装 ClawHub CLI（如果未安装）
npm install -g @clawhub/cli

# 登录
clawhub login

# 发布
cd C:/Users/86183/lobsterai/project/sina-stock
clawhub publish
```

---

## ✅ 发布前检查清单

### 代码质量
- [x] 脚本可以正常运行
- [x] 错误处理完善
- [x] 代码注释清晰

### 文档完整性
- [x] README.md - 项目介绍
- [x] SKILL.md - 使用文档
- [x] clawhub.yaml - 发布配置
- [ ] 截图/演示（可选，但推荐）

### 配置正确性
- [x] _meta.json 配置正确
- [x] clawhub.yaml 填写完整
- [ ] GitHub 仓库地址已更新

---

## 📸 添加截图（推荐）

截图可以大幅提升审核通过率！

### 步骤：

1. 运行 skill 并截图：

```bash
python "C:/Users/86183/AppData/Roaming/LobsterAI/SKILLs/sina-stock/scripts/get_stock.py" sh000001 sz399001 sz399006
```

2. 创建 screenshots 目录：

```bash
mkdir screenshots
```

3. 保存截图到 `screenshots/` 目录

4. 更新 clawhub.yaml：

```yaml
submission:
  screenshots:
    - path: screenshots/demo1.png
      description: 大盘指数查询示例
```

---

## 🔍 审核流程

1. **提交**：通过网站或 CLI 提交
2. **自动检查**：ClawHub 检查配置和代码
3. **人工审核**：1-3 个工作日
4. **发布**：审核通过后上线

### 审核提示

✅ **确保**：
- 技能可以正常运行
- 文档清晰完整
- 不包含敏感信息
- 数据来源合法

❌ **避免**：
- 需要 API Key 但未说明
- 文档不完整
- 代码无法运行
- 侵犯第三方权益

---

## 📊 发布后

### 推广你的 Skill

1. **社交媒体**：
   - 在 Twitter/微博分享
   - 加入 LobsterAI 社区

2. **文档链接**：
   - 在 GitHub README 添加 ClawHub 链接
   - 在 ClawHub 页面链接到 GitHub

3. **收集反馈**：
   - 关注 GitHub Issues
   - 回复用户问题
   - 持续改进

---

## 🔗 相关链接

- [LobsterAI 官方文档](https://lobsterai.com/)
- [ClawHub 发布指南](https://clawhub.ai/docs/publish)
- [Skill 开发最佳实践](https://clawhub.ai/docs/best-practices)

---

## 💡 常见问题

**Q: 发布需要收费吗？**
A: ClawHub 基础发布是免费的。

**Q: 审核需要多长时间？**
A: 通常 1-3 个工作日。

**Q: 可以更新已发布的 Skill 吗？**
A: 可以，修改版本号后重新提交。

**Q: 如何删除已发布的 Skill？**
A: 在 ClawHub 后台管理或联系支持。

---

祝你发布顺利！🎉

如有问题，请查看：
- GitHub Issues: https://github.com/Sunnyfo/sina-stock/issues
- ClawHub 文档：https://clawhub.ai/docs


path: README.md
content: # Sina Stock Skill - A 股实时行情

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![ClawHub](https://img.shields.io/badge/ClawHub-sina--stock-blue)](https://clawhub.ai)

获取 A 股实时股票行情数据的 LobsterAI Skill，使用新浪财经 API。无需 API Key，免费使用。

## ✨ 功能特性

- 📈 **实时行情** - 获取当前价格、涨跌幅、成交量、成交额
- 📊 **大盘指数** - 上证指数、深证成指、创业板指、沪深 300 等
- 📉 **个股行情** - 支持任意 A 股股票代码查询
- 💰 **详细数据** - 开盘价、收盘价、最高价、最低价、振幅
- 🆓 **免费使用** - 无需 API Key，直接调用

## 🚀 快速开始

### 安装

通过 ClawHub 安装（推荐）：
```bash
# 在 LobsterAI 中运行
skill install sina-stock
```

或者手动安装：
```bash
# 克隆此仓库
git clone https://github.com/Sunnyfo/sina-stock.git

# 复制到 LobsterAI SKILLs 目录
cp -r sina-stock $SKILLS_ROOT/
```

### 使用示例

```bash
# 获取大盘指数
python3 "$SKILLS_ROOT/sina-stock/scripts/get_stock.py" sh000001 sz399001 sz399006

# 获取个股行情
python3 "$SKILLS_ROOT/sina-stock/scripts/get_stock.py" sh600519 sz000858

# JSON 格式输出
python3 "$SKILLS_ROOT/sina-stock/scripts/get_stock.py" sh000001 --json

# 简化输出
python3 "$SKILLS_ROOT/sina-stock/scripts/get_stock.py" sh000001 --simple
```

## 📊 支持的指数

| 名称 | 代码 | 市场 |
|------|------|------|
| 上证指数 | sh000001 | 沪市 |
| 深证成指 | sz399001 | 深市 |
| 创业板指 | sz399006 | 创业板 |
| 沪深 300 | sh000300 | 跨市场 |
| 上证 50 | sh000016 | 沪市 |
| 中证 500 | sh000905 | 跨市场 |

## 📋 输出示例

### 标准输出
```
============================================================
           A 股股市大盘实时数据
           更新时间：2026-03-02 15:00
============================================================

【上证指数 (sh000001)】
  当前价：   4151.80
  涨跌幅：   -30.79 (-0.74%)
  开盘价：   4162.88
  最高价：   4188.77
  最低价：   4131.37
  成交量：   861,579,218 手
  成交额：   1,345,892,469,395 元

============================================================
数据来源：新浪财经 API
```

### JSON 输出
```json
{
  "time": "2026-03-02 15:00:00",
  "source": "新浪财经 API",
  "count": 1,
  "data": [
    {
      "code": "sh000001",
      "name": "上证指数",
      "current": 4151.80,
      "change": -30.79,
      "change_pct": -0.74,
      "open": 4162.88,
      "prev_close": 4182.59,
      "high": 4188.77,
      "low": 4131.37,
      "volume": 861579218,
      "turnover": 1345892469395
    }
  ]
}
```

## 📖 文档

详细文档请查看：
- [SKILL.md](SKILL.md) - 完整使用文档
- [README.md](README.md) - 快速参考

## 🛠️ 开发

### 项目结构
```
sina-stock/
├── SKILL.md           # 技能文档
├── README.md          # 快速参考
├── _meta.json         # 元数据配置
└── scripts/
    └── get_stock.py   # 主脚本
```

### 本地测试
```bash
# 运行测试
python3 scripts/get_stock.py sh000001 sz399001 sz399006

# 测试 JSON 输出
python3 scripts/get_stock.py sh000001 --json
```

## 📝 注意事项

1. **交易时间**：工作日 9:30-11:30, 13:00-15:00
2. **非交易时间**：返回最后收盘价
3. **请求频率**：建议间隔 1 秒以上，避免被限流
4. **数据延迟**：实时数据，可能有秒级延迟

## 🤝 贡献

欢迎提交 Issue 和 Pull Request！

## 📄 许可证

MIT License

## 🔗 相关链接

- [作者 GitHub](https://github.com/Sunnyfo)
- [LobsterAI](https://lobsterai.com/)
- [ClawHub](https://clawhub.ai/)
- [新浪财经](https://finance.sina.com.cn/)

## 📧 联系方式

如有问题或建议，请提 Issue 或联系作者。

---

**数据来源**: 新浪财经 API (https://finance.sina.com.cn/)

**免责声明**: 本工具仅供学习和研究使用，不构成投资建议。投资有风险，入市需谨慎。


path: README_skill.md
content: # sina-stock Skill

获取 A 股实时股票行情数据，使用新浪财经 API。

## 快速使用

```bash
# 获取大盘指数
python3 "$SKILLS_ROOT/sina-stock/scripts/get_stock.py" sh000001 sz399001 sz399006

# 获取个股行情
python3 "$SKILLS_ROOT/sina-stock/scripts/get_stock.py" sh600519 sz000858

# JSON 格式输出
python3 "$SKILLS_ROOT/sina-stock/scripts/get_stock.py" sh000001 --json

# 简化输出
python3 "$SKILLS_ROOT/sina-stock/scripts/get_stock.py" sh000001 sz399001 --simple
```

## 支持的指数

| 名称 | 代码 |
|------|------|
| 上证指数 | sh000001 |
| 深证成指 | sz399001 |
| 创业板指 | sz399006 |
| 沪深 300 | sh000300 |
| 上证 50 | sh000016 |
| 中证 500 | sh000905 |

## 输出示例

```
============================================================
           A 股股市大盘实时数据
           更新时间：2026-03-02 15:00
============================================================

【上证指数 (sh000001)】
  当前价：   4151.80
  涨跌幅：   -30.79 (-0.74%)
  开盘价：   4162.88
  最高价：   4188.77
  最低价：   4131.37
  成交量：   861,579,218 手
  成交额：   1,345,892,469,395 元

============================================================
数据来源：新浪财经 API
```

## 注意事项

1. 交易时间：工作日 9:30-11:30, 13:00-15:00
2. 非交易时间返回最后收盘价
3. 建议请求间隔 1 秒以上

## 数据来源

新浪财经 (https://finance.sina.com.cn/)


path: _meta.json
content: {
  "name": "sina-stock",
  "version": "1.0.0",
  "description": "获取 A 股实时股票行情数据（上证指数、深证成指、创业板指等），使用新浪财经 API",
  "author": "User",
  "license": "MIT",
  "keywords": ["stock", "finance", "A 股", "行情", "新浪"],
  "requires": {
    "bins": ["python3"],
    "env": []
  },
  "scripts": {
    "get_stock": "scripts/get_stock.py"
  }
}


path: clawhub.yaml
content: ---
# ClawHub.ai Skill 发布配置
# 文档：https://clawhub.ai/docs/publish

# 基本信息
name: sina-stock
version: 1.0.0
description: 获取 A 股实时股票行情数据（上证指数、深证成指、创业板指等），使用新浪财经 API。无需 API Key。
author: Sunnyfo
license: MIT

# 分类
category: finance
tags:
  - stock
  - finance
  - A 股
  - 行情
  - 股票
  - 中国

# 技能入口
entry:
  type: script
  path: scripts/get_stock.py
  interpreter: python3

# 参数定义
parameters:
  - name: codes
    type: string
    required: true
    description: 股票代码（逗号分隔），如 sh000001,sz399001
  - name: --json
    type: boolean
    required: false
    description: 输出 JSON 格式
  - name: --simple
    type: boolean
    required: false
    description: 简化输出

# 使用示例
examples:
  - description: 获取大盘指数
    command: sina-stock sh000001,sz399001,sz399006
  - description: 获取个股行情
    command: sina-stock sh600519,sz000858
  - description: JSON 格式输出
    command: sina-stock sh000001 --json

# 依赖
dependencies: []

# 环境变量（无需 API Key）
env: []

# 权限
permissions:
  - network: true  # 需要访问新浪财经 API

# 兼容性
compatibility:
  min_version: 1.0.0
  platforms:
    - windows
    - macos
    - linux

# 图标（可选）
icon: 📈

# 发布说明
changelog:
  - version: 1.0.0
    date: 2026-03-02
    changes:
      - 初始版本
      - 支持 A 股大盘指数查询
      - 支持个股行情查询
      - 支持文本/JSON/简化输出格式

# 链接
links:
  homepage: https://github.com/Sunnyfo/sina-stock
  issues: https://github.com/Sunnyfo/sina-stock/issues
  docs: https://github.com/Sunnyfo/sina-stock/blob/main/SKILL.md

# 审核信息
# 以下信息将用于 ClawHub 审核
submission:
  # 简要描述（50 字以内）
  short_description: 获取 A 股实时行情，支持大盘指数和个股查询，无需 API Key

  # 详细描述（用于展示页面）
  long_description: |
    Sina Stock 是一个用于获取 A 股实时行情的 LobsterAI Skill。

    **功能特点：**
    - 支持上证指数、深证成指、创业板指等大盘指数
    - 支持任意 A 股股票代码查询
    - 提供当前价、涨跌幅、成交量、成交额等详细数据
    - 支持文本、JSON、简化等多种输出格式
    - 无需 API Key，完全免费使用

    **数据来源：** 新浪财经 API

    **使用场景：**
    - 查看大盘整体走势
    - 监控自选股行情
    - 获取股票数据用于分析

  # 截图（可选，提升审核通过率）
  # screenshots:
  #   - path: screenshots/demo1.png
  #     description: 使用示例

  # 演示视频（可选）
  # demo_video: https://www.youtube.com/watch?v=xxxxx

  # 测试说明（帮助审核人员快速验证）
  test_instructions: |
    1. 安装 skill 后，运行以下命令测试：
       ```
       sina-stock sh000001,sz399001,sz399006
       ```
    2. 应该看到上证指数、深证成指、创业板指的实时数据
    3. 测试 JSON 输出：
       ```
       sina-stock sh000001 --json
       ```

  # 注意事项
  notes:
    - 交易时间：工作日 9:30-11:30, 13:00-15:00
    - 非交易时间返回最后收盘价
    - 数据可能有秒级延迟


path: scripts/get_stock.py
content: #!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Sina Stock - A 股实时行情获取脚本
数据来源：新浪财经 API (https://finance.sina.com.cn/)
无需 API Key，免费使用

使用方法:
    python get_stock.py sh000001,sz399001,sz399006
    python get_stock.py sh600519 sz000858 --json
    python get_stock.py sh000001 --simple
"""

import urllib.request
import re
import json
import sys
from datetime import datetime

# A 股常用指数代码
DEFAULT_INDICES = {
    'sh000001': '上证指数',
    'sz399001': '深证成指',
    'sz399006': '创业板指',
    'sh000300': '沪深 300',
    'sh000016': '上证 50',
    'sh000905': '中证 500',
}

HEADERS = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
    'Referer': 'https://finance.sina.com.cn/',
}


def fetch_stock_data(codes):
    """
    从新浪财经 API 获取股票数据

    Args:
        codes: 股票代码列表 (如 ['sh000001', 'sz399001'])

    Returns:
        list: 股票数据字典列表
    """
    results = []
    url = f"https://hq.sinajs.cn/list={','.join(codes)}"

    try:
        req = urllib.request.Request(url, headers=HEADERS)
        response = urllib.request.urlopen(req, timeout=10)
        content = response.read().decode('gbk')

        # 解析每条股票数据
        lines = content.strip().split('\n')
        for line in lines:
            if not line.strip():
                continue

            # 提取股票代码
            code_match = re.search(r'hq_str_(\w+)=', line)
            if not code_match:
                continue
            code = code_match.group(1)

            # 提取数据内容
            data_match = re.search(r'"([^"]+)"', line)
            if not data_match:
                continue

            fields = data_match.group(1).split(',')
            if len(fields) < 10:
                continue

            # 解析数据字段
            try:
                name = fields[0]
                current = float(fields[1]) if fields[1] else 0
                open_p = float(fields[2]) if fields[2] else 0
                prev_close = float(fields[3]) if fields[3] else 0
                high = float(fields[4]) if fields[4] else 0
                low = float(fields[5]) if fields[5] else 0

                # 计算涨跌额和涨跌幅
                change = current - prev_close
                change_pct = (change / prev_close * 100) if prev_close > 0 else 0

                # 成交量和成交额
                volume = int(float(fields[8])) if fields[8] else 0
                turnover = float(fields[9]) if fields[9] else 0

                # 计算振幅
                amplitude = ((high - low) / prev_close * 100) if prev_close > 0 else 0

                # 获取时间戳
                timestamp = ''
                if len(fields) > 31 and fields[31]:
                    timestamp = fields[31]
                if len(fields) > 32 and fields[32]:
                    timestamp += ' ' + fields[32]

                results.append({
                    'code': code,
                    'name': name,
                    'current': current,
                    'change': change,
                    'change_pct': change_pct,
                    'open': open_p,
                    'prev_close': prev_close,
                    'high': high,
                    'low': low,
                    'amplitude': amplitude,
                    'volume': volume,
                    'turnover': turnover,
                    'timestamp': timestamp,
                })
            except (ValueError, IndexError) as e:
                print(f"解析 {code} 数据失败：{e}", file=sys.stderr)
                continue

    except Exception as e:
        print(f"获取数据失败：{e}", file=sys.stderr)

    return results


def format_text(data_list, simple=False):
    """
    格式化输出为文本

    Args:
        data_list: 股票数据列表
        simple: 是否简化输出
    """
    if not data_list:
        print("未获取到数据")
        return

    now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

    # 判断是否是大盘指数
    is_indices = all(d['code'] in DEFAULT_INDICES for d in data_list)

    if is_indices:
        print("=" * 60)
        print("           A 股股市大盘实时数据")
        print(f"           更新时间：{now}")
        print("=" * 60)

    for d in data_list:
        sign = '+' if d['change'] >= 0 else ''

        if simple:
            # 简化格式
            print(f"{d['name']}({d['code']}): {d['current']:.2f} "
                  f"({sign}{d['change']:.2f}, {sign}{d['change_pct']:.2f}%)")
        else:
            # 详细格式
            print(f"\n【{d['name']} ({d['code']})】")
            print(f"  当前价：   {d['current']:.2f}")
            print(f"  涨跌幅：   {sign}{d['change']:.2f} ({sign}{d['change_pct']:.2f}%)")

            if not simple:
                print(f"  开盘价：   {d['open']:.2f}")
                print(f"  昨收价：   {d['prev_close']:.2f}")
                print(f"  最高价：   {d['high']:.2f}")
                print(f"  最低价：   {d['low']:.2f}")
                print(f"  振幅：     {d['amplitude']:.2f}%")
                print(f"  成交量：   {d['volume']:,} 手")
                print(f"  成交额：   {d['turnover']:,.0f} 元")

    if not simple:
        print("\n" + "=" * 60)
        print("数据来源：新浪财经 API (https://finance.sina.com.cn/)")
        print("=" * 60)


def format_json(data_list):
    """
    格式化输出为 JSON

    Args:
        data_list: 股票数据列表
    """
    output = {
        'time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
        'source': '新浪财经 API',
        'count': len(data_list),
        'data': data_list,
    }
    print(json.dumps(output, ensure_ascii=False, indent=2))


def main():
    """主函数"""
    import argparse

    parser = argparse.ArgumentParser(
        description='获取 A 股实时行情数据',
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
示例:
  python get_stock.py sh000001,sz399001,sz399006    获取大盘指数
  python get_stock.py sh600519 sz000858             获取个股行情
  python get_stock.py sh000001 --json               JSON 格式输出
  python get_stock.py sh000001 --simple             简化输出
        """
    )

    parser.add_argument(
        'codes',
        nargs='+',
        help='股票代码（逗号分隔或多个参数）'
    )
    parser.add_argument(
        '--json',
        action='store_true',
        help='输出 JSON 格式'
    )
    parser.add_argument(
        '--simple',
        action='store_true',
        help='简化输出'
    )

    args = parser.parse_args()

    # 解析股票代码（支持逗号分隔和空格分隔）
    all_codes = []
    for code_arg in args.codes:
        all_codes.extend(code_arg.split(','))

    # 去除空白和重复
    all_codes = [c.strip().lower() for c in all_codes if c.strip()]

    if not all_codes:
        print("错误：请提供股票代码", file=sys.stderr)
        print("示例：python get_stock.py sh000001,sz399001", file=sys.stderr)
        sys.exit(1)

    # 获取数据
    data_list = fetch_stock_data(all_codes)

    if not data_list:
        print("未获取到数据，请检查股票代码是否正确", file=sys.stderr)
        sys.exit(1)

    # 输出结果
    if args.json:
        format_json(data_list)
    else:
        format_text(data_list, simple=args.simple)


if __name__ == '__main__':
    main()


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)