用在YMOS V3的最快实现:直接发给agent这个页面:YMOS 配置文档 , 给ai agent,告诉他:我有YMOS_MARKET_API_KEY,然后复制上面你的api key给它完成配置;
本文档将指导你如何配置 API Key 并运行数据获取脚本。
🚀 快速开始
1. 获取 API Key
如果你还没有 购买API Key,请登录后访问 订阅升级页面 订阅服务。订阅成功后,再次刷新此页面,就可以生成和管理一个专属的 API 凭证。
2. 下载示例脚本
我们提供了一个开箱即用的 Python 脚本,用于自动拉取数据。
手动复制文末的代码示例(滑到最底部展开),然后保存成fetch_data_api.py
3. 配置脚本
- 用文本编辑器打开
fetch_data_api.py。 - 找到以下代码行(约第 35 行):
API_KEY = "" - 将你的 API Key 填入引号中:
API_KEY = "tib_your_actual_api_key_here" - 保存文件。
💻 如何运行
在终端或命令行中运行以下命令:
# 获取最近 24 小时(1天)的数据
python3 fetch_data_api.py 1
# 获取最近 3 天的数据
python3 fetch_data_api.py 3 --output my_data.json
参数说明:
N: 获取最近 N 天的数据(支持小数,如 0.5 代表 12 小时)。--output: 指定结果保存的文件名。
⚠️ 注意:
time_value(天数) 最大支持 31 天。如果超过31天,API 将返回错误。
📡 API 接口通用开发说明 (自定义扩展)
如果你想自己在其他程序(如 Postman, Node.js, Excel 等)中调用 API,请参考以下信息。
获取数据报告
- URL:
https://yongmai.xyz/wp-json/tib/v1/reports - Method:
GET - Header:
Authorization:Bearer YOUR_API_KEYUser-Agent:YourApp/1.0(必须包含,否则会被拦截)
请求参数:
| 参数 | 类型 | 说明 |
|---|---|---|
time_value | float | 时间范围(天数),默认 1。最大 31。 |
categories | string | (可选) 分类筛选,逗号分隔。如 #中国股市,#美国股市 |
示例 Request (cURL):
curl -H "Authorization: Bearer tib_your_key" \
-H "User-Agent: MyBot/1.0" \
"https://yongmai.xyz/wp-json/tib/v1/reports?time_value=1"
数据分类参考
我们的数据覆盖以下主要领域,你可以在脚本的 CATEGORIES 列表中自定义需要抓取的类别:
#中国股市: A股、港股、中概股深度分析#美国股市: 美股、重点科技股追踪#Crypto: 加密货币与区块链动态#宏观经济: 全球宏观政策与经济数据#科技动态: AI 前沿与硬科技趋势
❓ 常见问题
Q: 为什么提示 “API Key 无效”? A: 请检查 API Key 是否复制完整,或者订阅是否已过期。
Q: 为什么提示 “429 Too Many Requests”? A: 本月 API 调用次数已达上限(通常为 100 次/月)。请留意脚本输出的剩余次数提示。
Q: 我能获取超过 31 天的数据吗? A: 不能。为了保证系统性能,API 单次请求最多支持回溯 31 天的数据。建议每天或每周运行脚本进行归档。
#!/usr/bin/env python3
"""
YMOS API 数据获取工具(投资场景示例)
【本脚本是投资研究场景的实现示例】
- 数据源:Yongmai 投资情报 API
- 数据类型:中美股市、宏观经济、科技动态、加密货币
【其他场景如何适配】
本脚本是三层架构「第一层:信息输入」的具体实现。
如果你是其他领域的知识工作者,可以参考本脚本的结构,替换为你的 API:
- 学术研究 → Semantic Scholar API / PubMed API
- 产品经理 → Product Hunt API / App Annie API
- 内容创作/社媒跟踪 → Twitter API / Reddit API
核心不变:通过配置化的脚本自动拉取数据到本地
核心可变:API endpoint、数据格式、存储路径
获取投资数据 API Key:https://yongmai.xyz
"""
import urllib.request
import urllib.parse
import urllib.error
import argparse
import json
import ssl
import sys
# ============================================================
# 📌 在这里填入你的 API Key
# 【投资场景】前往 https://yongmai.xyz 订阅投资数据服务
# 【其他场景】替换为你的领域 API Key(如 arXiv、Twitter 等)
# ============================================================
API_KEY = ""
# ============================================================
# 【投资场景】API 配置
# 【其他场景】修改为你的 API endpoint 和参数
# ============================================================
API_URL = "https://yongmai.xyz/wp-json/tib/v1/reports"
# 【投资场景】默认分类
# 【其他场景】修改为你的数据分类(论文类型、产品类别等)
CATEGORIES = [
"#中国股市",
"#美国股市",
"#Crypto",
"#宏观经济",
"#科技动态",
"#个人精选"
]
def check_api_key():
"""检查 API Key 是否已配置"""
if not API_KEY or API_KEY == "your_api_key_here":
print("=" * 50)
print("⚠️ API Key 未配置")
print("=" * 50)
print()
print("你需要一个 API Key 才能使用此脚本。")
print()
print("📡 获取 API Key:")
print(" https://yongmai.xyz")
print()
print("🆓 免费替代方案:")
print(" 使用 fetch_rss.py 通过免费 RSS 订阅获取数据")
print(" python3 scripts/fetch_rss.py 1 --output output.json")
print()
print("配置方法:")
print(" 编辑 scripts/fetch_data_api.py")
print(" 将 API_KEY = \"\" 改为你的 Key")
print()
sys.exit(1)
def fetch_reports(time_value):
"""从 API 获取报告数据"""
print(f"🚀 正在获取 API 数据...")
print(f" 接口: {API_URL}")
print(f" 时间范围: 最近 {time_value} 天")
# 构建 query parameters
params = {
'time_value': time_value,
'categories': ','.join(CATEGORIES)
}
query_string = urllib.parse.urlencode(params)
full_url = f"{API_URL}?{query_string}"
# Bearer Token 认证
headers = {
"Authorization": f"Bearer {API_KEY}",
"User-Agent": "YMOS/1.0",
"Accept": "application/json"
}
req = urllib.request.Request(full_url, headers=headers, method='GET')
# SSL Context
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
try:
with urllib.request.urlopen(req, context=ctx, timeout=30) as response:
response_text = response.read().decode('utf-8')
try:
data = json.loads(response_text)
# 打印限流信息
if 'rate_limit' in data:
rl = data['rate_limit']
print(f"\n📊 API 配额: {rl['used']}/{rl['limit']} "
f"(剩余 {rl['remaining']} 次)")
return data
except json.JSONDecodeError:
print("❌ JSON 解析失败")
print("响应内容:", response_text[:500])
return None
except urllib.error.HTTPError as e:
print(f"❌ HTTP 错误: {e.code} - {e.reason}")
if e.code == 401:
print("\n🔑 API Key 无效或已过期")
print(" 请前往 https://yongmai.xyz 检查你的订阅状态")
elif e.code == 429:
print("\n⏳ API 调用次数已达上限,请稍后再试")
try:
error_body = e.read().decode('utf-8')
print(f" 详情: {error_body[:500]}")
except:
pass
return None
except urllib.error.URLError as e:
print(f"❌ 网络错误: {e.reason}")
return None
except Exception as e:
print(f"❌ 未知错误: {e}")
return None
def main():
parser = argparse.ArgumentParser(
description="YMOS API 数据获取工具 - 需要 API Key"
)
parser.add_argument(
"time_value",
type=float,
nargs='?',
default=1,
help="获取最近 N 天的数据(默认: 1)"
)
parser.add_argument(
"--output",
default="financial_data.json",
help="输出文件路径(默认: financial_data.json)"
)
args = parser.parse_args()
print("=" * 50)
print("YMOS API 数据获取工具")
print("=" * 50)
# 检查 API Key
check_api_key()
result = fetch_reports(args.time_value)
if result:
# 检查 API 错误
if isinstance(result, dict) and 'code' in result and 'message' in result:
print(f"❌ API 错误: {result['message']}")
sys.exit(1)
# 保存文件
with open(args.output, "w", encoding="utf-8") as f:
json.dump(result, f, ensure_ascii=False, indent=2)
print(f"\n💾 数据已保存: {args.output}")
count = result.get('count', 'N/A') if isinstance(result, dict) else 'N/A'
print(f"✅ 共获取 {count} 条数据")
# 分类统计
if isinstance(result, dict) and 'data' in result:
categories = {}
for item in result['data']:
cat = item.get('category', '未分类')
categories[cat] = categories.get(cat, 0) + 1
if categories:
print("\n📁 分类统计:")
for cat, num in sorted(categories.items()):
print(f" {cat}: {num} 条")
else:
print("\n❌ 数据获取失败")
print("💡 如果反复失败,可以尝试免费的 RSS 方式:")
print(" python3 scripts/fetch_rss.py 1 --output output.json")
sys.exit(1)
if __name__ == "__main__":
main()
fetch_data_api.py 脚本来源于YMOS 投研中台的yongmai-maeket-api版本 文件夹下的/scripts/路径。
价格监控数据,可以参考YMOS-main里面的finnhub的价格监控的工程实践。