OpenClaw 配置小红书发 ETF 实战指南

记录使用 OpenClaw 自动分析股票数据并发布 ETF 推荐到小红书的完整过程

📋 目录


环境配置

1. 安装依赖

1
2
apt-get install -y xvfb imagemagick zbar-tools fonts-noto-cjk python3-pil
pip3 install mysql-connector-python --break-system-packages

2. 启动虚拟显示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# systemd 方式
cat > /etc/systemd/system/xvfb.service << 'EOF'
[Unit]
Description=X Virtual Frame Buffer
After=network.target

[Service]
ExecStart=/usr/bin/Xvfb :99 -screen 0 1920x1080x24
Restart=always

[Install]
WantedBy=multi-user.target
EOF

systemctl enable xvfb && systemctl start xvfb

小红书 MCP 服务

1. 下载安装

1
2
3
4
5
mkdir -p ~/xiaohongshu-mcp
cd ~/xiaohongshu-mcp
wget https://github.com/xpzouying/xiaohongshu-mcp/releases/latest/download/xiaohongshu-mcp-linux-amd64.tar.gz
tar xzf xiaohongshu-mcp-linux-amd64.tar.gz
chmod +x xiaohongshu-*

2. 登录方式

推荐:手动 Cookie 登录

  1. 浏览器访问 https://www.xiaohongshu.com/ 并登录
  2. F12 → Network → 刷新页面
  3. 复制 Cookie 字符串
  4. 转换为 JSON 格式保存到 cookies.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
python3 -c "
import json
cookie_str = 'web_session=xxx;id_token=xxx' # 替换为你的 Cookie
cookies = []
for pair in cookie_str.split(';'):
pair = pair.strip()
if '=' not in pair: continue
name, value = pair.split('=', 1)
cookies.append({
'name': name.strip(), 'value': value.strip(),
'domain': '.xiaohongshu.com', 'path': '/',
'httpOnly': name.strip() in ('web_session', 'id_token'),
'secure': name.strip() in ('web_session', 'id_token')
})
with open('cookies.json', 'w') as f:
json.dump(cookies, f, ensure_ascii=False)
print(f'已保存 {len(cookies)} 个 Cookie')
"

3. 启动服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cat > /etc/systemd/system/xhs-mcp.service << 'EOF'
[Unit]
Description=Xiaohongshu MCP Service
After=network.target xvfb.service
Requires=xvfb.service

[Service]
Environment=DISPLAY=:99
WorkingDirectory=/root/xiaohongshu-mcp
ExecStart=/root/xiaohongshu-mcp/xiaohongshu-mcp-linux-amd64
Restart=always

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable xhs-mcp && systemctl start xhs-mcp
systemctl status xhs-mcp

发布效果展示

📊 第一篇:3 只低估 ETF 闭眼入

标题: 3 只低估 ETF 闭眼入📈翻倍潜力

内容:

  • 筛选逻辑:52 周分位<10%、日均成交>3000 万、偏离均线<-5%
  • 推荐 3 只 ETF:通信 ETF(159994)、光伏 ETF(515790)、恒生 ETF(510900)
  • 包含预期收益、止盈止损位、持仓时间

封面图: 1080x1440 深色渐变背景,卡片式布局


📈 第二篇:3 月 9 日 ETF 策略

标题: 3 月 9 日 ETF 策略|3 只低估基

内容:

  • 市场日报:沪深 300 -0.81%、中证 500 -0.88%
  • 3 只 ETF 详细对比图
  • 操作建议:分批建仓、设置止盈、严格执行

封面图: 3 张专业图表(市场概览、ETF 对比、操作建议)


💊 第三篇:ETF 复盘

标题: ETF 复盘|没买的后悔了吗

内容:

  • 今日净值:通信 ETF -2.25%、光伏 ETF -0.64%、恒生 ETF -0.27%
  • 复盘总结:继续看好通信、坚定持有光伏、外资回流恒生
  • 投资策略:52 周分位<10% 才买入、分批建仓、长期持有

封面图: 2 张图表(行情复盘、后悔药时间)


核心代码

1. 筛选低估 ETF

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT 
d.symbol, s.sec_name, d.close,
ROUND((d.close - h.min_price) / (h.max_price - h.min_price) * 100, 2) as percentile_52w
FROM daily_data d
JOIN stock_info s ON d.symbol = s.symbol
JOIN (
SELECT symbol, MIN(close) as min_price, MAX(close) as max_price
FROM daily_data
WHERE trade_date >= DATE_SUB(CURDATE(), INTERVAL 250 DAY)
GROUP BY symbol
) h ON d.symbol = h.symbol
WHERE d.trade_date = CURDATE()
AND s.type = 'ETF'
ORDER BY percentile_52w ASC
LIMIT 10;

2. 生成封面图

1
2
3
4
5
6
7
8
9
10
11
from PIL import Image, ImageDraw, ImageFont

img = Image.new('RGB', (1080, 1440), color='#1a1a2e')
draw = ImageDraw.Draw(img)
font = ImageFont.truetype('/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc', 72)

# 绘制标题
draw.text((540, 150), "3 只低估 ETF", fill='#e94560', font=font, anchor='mm')
draw.text((540, 250), "闭眼入", fill='#ffffff', font=font, anchor='mm')

img.save('/tmp/xhs_cover.png')

3. 发布到小红书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
MCP_URL="http://localhost:18060/mcp"

# 获取 Session ID
SESSION_ID=$(curl -s -D /tmp/headers -X POST "$MCP_URL" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05"}}' | \
grep -i 'Mcp-Session-Id' | awk '{print $2}')

# 发布内容
curl -s -X POST "$MCP_URL" \
-H "Content-Type: application/json" \
-H "Mcp-Session-Id: $SESSION_ID" \
-d '{
"jsonrpc":"2.0",
"method":"tools/call",
"params":{
"name":"publish_content",
"arguments":{
"title":"3 只低估 ETF 闭眼入📈翻倍潜力",
"content":"宝子们!OpenClaw 从数据库分析 50+ETF...",
"images":["/tmp/xhs_cover.png"]
}
},
"id":2
}'

总结

✅ 配置要点

  1. Xvfb 虚拟显示 - 必须运行
  2. Cookie 登录 - 比扫码更稳定
  3. systemd 守护 - 保证服务持续运行
  4. Pillow 中文字体 - 确保图片正常显示

📊 发布成果

  • 3 篇笔记 成功发布
  • 5 张封面图 自动生成
  • 7081 条 股票信息入库
  • 138 万条 行情数据可用

💡 经验总结

  1. Cookie 登录比扫码更稳定
  2. 图片避免使用 emoji(可能显示异常)
  3. 数据库 stock_info 表必须有准确的 ETF 名称
  4. 分批建仓、长期持有是核心策略

作者: xiaomao
博客: https://oneops.top
GitHub: https://github.com/xxxxxx
更新时间: 2026-03-10