量化舆情分析系统 - 实时监控金融新闻和社交媒体,AI 分析市场影响。
- 📡 数据采集: Twitter/X(通过 Nitter)、RSS 财经快讯
- 🤖 AI 分析: 使用 Claude 进行情感分析、实体提取、股票关联
- 📊 报告生成: 即时警报 + 定时汇总
- 🌐 HTTP API: RESTful API,支持 Token 认证
- 💾 双写存储: SQLite 数据库 + 本地文件
- Go 1.22+
- SQLite3
- Anthropic API Key
# 克隆项目
cd market-sentinel
# 安装依赖
go mod tidy
# 设置环境变量
export ANTHROPIC_API_KEY=sk-ant-xxxxx
export SENTINEL_API_TOKEN=your-secure-token
# 编译
go build -o sentinel ./cmd/sentinel
# 启动服务
./sentinel serve# 设置环境变量
export ANTHROPIC_API_KEY=sk-ant-xxxxx
export SENTINEL_API_TOKEN=your-secure-token
# 构建并启动
docker-compose up -d
# 查看日志
docker-compose logs -f所有 API(除 /health)需要认证:
# Header 方式
curl -H "Authorization: Bearer YOUR_TOKEN" http://localhost:8080/api/v1/reports
# Query 参数方式(调试用)
curl http://localhost:8080/api/v1/reports?token=YOUR_TOKEN| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/health |
健康检查(无需认证) |
| GET | /api/v1/news |
新闻列表 |
| GET | /api/v1/news/:id |
新闻详情 |
| GET | /api/v1/analysis |
分析结果列表 |
| GET | /api/v1/analysis/:id |
分析详情 |
| GET | /api/v1/reports |
报告列表 |
| GET | /api/v1/reports/latest |
最新报告 |
| GET | /api/v1/reports/:id |
报告详情 |
| GET | /api/v1/stocks/:symbol/sentiment |
股票舆情评分 |
| GET | /api/v1/alerts |
高影响事件警报 |
| POST | /api/v1/scan |
手动触发扫描 |
| 参数 | 类型 | 说明 |
|---|---|---|
since |
ISO8601 | 起始时间 |
until |
ISO8601 | 结束时间 |
limit |
int | 返回数量(默认 50,最大 200) |
offset |
int | 分页偏移 |
source |
string | 数据源过滤 |
impact |
string | 影响级别过滤(high/medium/low) |
// 成功
{
"success": true,
"data": { ... },
"meta": {
"total": 100,
"limit": 50,
"offset": 0
}
}
// 错误
{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or missing token"
}
}# 启动 API 服务 + 定时采集
./sentinel serve
# 单次扫描
./sentinel scan --once
# 生成报告
./sentinel report --type morning-brief
./sentinel report --type daily-summary
# 查看版本
./sentinel version主配置文件: configs/config.yaml
server:
host: "0.0.0.0"
port: 8080
auth:
tokens:
- "your-api-token" # 或使用 SENTINEL_API_TOKEN 环境变量
collector:
scan_interval: 15m
twitter:
enabled: true
accounts:
- "DeItaone"
- "elonmusk"
rss:
enabled: true
feeds:
- "https://feeds.bloomberg.com/markets/news.rss"
analyzer:
llm_provider: "anthropic"
llm_model: "claude-sonnet-4-20250514"
# API key: ANTHROPIC_API_KEY 环境变量Python 客户端示例:
import requests
class SentinelClient:
def __init__(self, base_url: str, token: str):
self.base_url = base_url.rstrip('/')
self.headers = {"Authorization": f"Bearer {token}"}
def get_stock_sentiment(self, symbol: str) -> dict:
resp = requests.get(
f"{self.base_url}/api/v1/stocks/{symbol}/sentiment",
headers=self.headers
)
return resp.json()["data"]
def get_latest_report(self) -> dict:
resp = requests.get(
f"{self.base_url}/api/v1/reports/latest",
headers=self.headers
)
return resp.json()["data"]
# 使用
client = SentinelClient("http://your-server:8080", "your-token")
nvda_sentiment = client.get_stock_sentiment("NVDA")
print(f"NVDA sentiment: {nvda_sentiment['sentiment_score']}")market-sentinel/
├── cmd/sentinel/ # 入口
├── internal/
│ ├── api/ # HTTP API
│ ├── collector/ # 数据采集
│ ├── analyzer/ # AI 分析
│ ├── reporter/ # 报告生成
│ ├── storage/ # 数据存储
│ └── config/ # 配置管理
├── configs/ # 配置文件
├── data/ # 数据目录
│ ├── sentinel.db # SQLite 数据库
│ └── reports/ # 报告文件
├── Dockerfile
├── docker-compose.yaml
└── README.md
MIT