前言:为什么你需要这个攻略?
想象一下这样的场景:
- 雪球:早晨9点15分你需要在开盘前完成:查看自选股的实时行情和最新动态
- boss直聘:搜索相关岗位的最新招聘信息 -分析行业趋势数据
传统做法,你需要:打开雪球App或者到BOSS直聘 → 手动搜索 → 记录数据 → 耗时15-20分钟
使用OpenCLI,只需要:
# 3秒钟获取所有数据
opencli snowball favorite --limit 10 > stocks.json
opencli boss search "前端工程师 北京" --limit 20 > jobs.json
OpenCLI 是一个开源的AI原生命令行工具,能将任何网站和桌面应用转化为命令行接口。它通过复用你Chrome浏览器中已有的登录状态,实现零配置、零API Key的极速数据获取。
本文将重点聚焦雪球和BOSS直聘两个国内核心平台,带你从零到精通,用命令行掌控你的投资和职业规划。
目录
一、OpenCLI 核心原理
1.1 什么是OpenCLI?
OpenCLI 是一个开源项目,它的核心是:
Make Any Website & Tool Your CLI - 让任何一个网站、Electron应用或本地工具都变成命令行接口。
GitHub地址: https://github.com/jackwener/opencli
1.2 核心技术架构
OpenCLI 采用了一套巧妙的架构设计:
用户终端命令
↓
本地Daemon (监听 localhost:19825)
↓
WebSocket通信
↓
Chrome浏览器扩展
↓
目标网页/应用
核心优势:
- 零配置认证: 直接复用Chrome中已登录的会话
- 安全隔离: 账号凭证永远保留在浏览器中
- AI原生: 内置explore、synthesize、cascade三大AI命令
- 结构化输出: 支持JSON、YAML、Markdown、CSV、Table等格式
1.3 为什么选择OpenCLI?
| 特性 | OpenCLI | 传统方案 |
|---|---|---|
| 配置难度 | 零配置 | 需要配置API Key |
| 学习曲线 | 1天上手 | 需要编程基础 |
| 数据格式 | 结构化JSON | 杂乱HTML |
| 成本 | 完全免费 | 需要API费用 |
| 安全性 | 凭证不离浏览器 | 需要存储密钥 |
| AI集成 | 原生支持 | 需要额外开发 |
二、安装与配置
2.1 环境要求
开始之前,请确保你的系统满足以下要求:
| 组件 | 最低版本 | 说明 |
|---|---|---|
| Node.js | ≥ 20.0.0 | 或者 Bun ≥ 1.0.0 |
| Chrome 浏览器 | 最新版 | 必须安装并登录目标网站 |
| 操作系统 | macOS / Linux / Windows | 跨平台支持 |
检查Node.js版本:
node --version
# 应显示 v20.0.0 或更高
2.2 安装步骤
步骤1: 安装CLI工具
# npm安装(推荐)
npm install -g @jackwener/opencli
# 或者使用bun
bun install -g @jackwener/opencli
步骤2: 安装Chrome扩展(关键步骤!)
这是最容易出错的步骤,请仔细操作:
- 访问GitHub Releases页面下载最新扩展
- 下载
opencli-extension.zip文件 - 解压文件到本地目录
- 打开Chrome,访问
chrome://extensions - 开启右上角的「开发者模式」
- 点击「加载已解压的扩展程序」,选择解压后的文件夹
步骤3: 验证安装
# 基础诊断
opencli doctor
# 查看所有可用命令
opencli list
2.3 快速测试
安装完成后,先测试一下基础功能:
# 测试公开API(无需登录)
opencli hackernews top --limit 5
# 如果Chrome中已登录雪球,测试雪球功能
opencli snowball hot --limit 5
# 如果Chrome中已登录BOSS直聘,测试职位搜索
opencli boss search "前端" --limit 5
⚠️ 重要提示: 如果雪球或BOSS直聘的命令返回空数据或报错,首先检查你的Chrome浏览器是否已登录对应平台。
三、雪球平台深度实战
雪球是中国领先的股票投资社区,拥有海量个股数据、市场分析工具和投资者互动内容。OpenCLI 为雪球提供了完整的命令行接口,让你能够快速获取股票行情、分析热门话题、管理自选股。
3.1 雪球功能概览
| 功能分类 | 命令 | 说明 | 是否需要登录 |
|---|---|---|---|
| 股票行情 | snowball quote | 查询个股实时行情 | 否 |
| 热门话题 | snowball hot | 获取雪球热门话题 | 否 |
| 市场行情 | snowball market | 获取大盘指数行情 | 否 |
| 自选股 | snowball favorite | 查看我的自选股 | ✅ 是 |
| 个股资讯 | snowball news | 获取个股相关新闻 | 否 |
| 用户动态 | snowball user | 查看指定用户动态 | 否 |
| 搜索股票 | snowball search | 搜索股票代码或名称 | 否 |
3.2 基础命令使用
3.2.1 查询个股行情
最常用的功能,获取股票的实时行情数据:
# 查询贵州茅台(600519)
opencli snowball quote --symbol 600519
# 查询腾讯控股(00700.HK)
opencli snowball quote --symbol 00700.HK
# JSON格式输出(适合程序处理)
opencli snowball quote --symbol 600519 -f json
# 保存到文件
opencli snowball quote --symbol 600519 -f json > mt.json
输出示例(JSON格式):
{
"symbol": "600519",
"name": "贵州茅台",
"price": 1685.00,
"change": 15.50,
"change_percent": 0.93,
"volume": 3254100,
"high": 1692.00,
"low": 1678.50,
"market_cap": 2118560000000,
"pe_ratio": 32.5,
"timestamp": "2026-04-01 09:30:00"
}
3.2.2 获取雪球热门话题
了解当前市场关注的热点:
# 获取热门话题(默认10条)
opencli snowball hot
# 限制数量
opencli snowball hot --limit 20
# JSON格式
opencli snowball hot -f json
# YAML格式
opencli snowball hot -f yaml
# Markdown表格格式
opencli snowball hot -f md
3.2.3 查看大盘行情
获取主要指数的行情数据:
# 获取所有主要指数
opencli snowball market
# 指定指数
opencli snowball market --index 上证指数
opencli snowball market --index 深证成指
opencli snowball market --index 创业板指
3.3 登录态功能(需要Chrome登录)
以下功能需要你在Chrome浏览器中登录雪球账号:
3.3.1 查看自选股
管理你的投资组合:
# 查看所有自选股
opencli snowball favorite
# 限制数量
opencli snowball favorite --limit 20
# JSON格式输出
opencli snowball favorite -f json
# 筛选特定股票
opencli snowball favorite | grep "白酒"
实战场景: 每日自选股监控
创建 monitor-stocks.sh:
#!/bin/bash
# 每日自选股监控脚本
OUTPUT_DIR="./stock-monitor"
mkdir -p "$OUTPUT_DIR"
DATE=$(date +%Y%m%d)
# 获取自选股数据
opencli snowball favorite --limit 20 -f json > "$OUTPUT_DIR/favorite_$DATE.json"
# 计算涨跌幅
cat "$OUTPUT_DIR/favorite_$DATE.json" | jq -r '.data[] | "\(.name): \(.price) (\(.change_percent)%)"'
# 保存到CSV(适合Excel分析)
opencli snowball favorite --limit 20 -f csv > "$OUTPUT_DIR/favorite_$DATE.csv"
echo "✅ 自选股数据已保存到 $OUTPUT_DIR/"
使用方法:
chmod +x monitor-stocks.sh
./monitor-stocks.sh
添加到crontab定时执行:
# 每天早上9点执行
0 9 * * * /path/to/monitor-stocks.sh
3.3.2 获取个股资讯
了解特定股票的最新新闻和分析:
# 获取贵州茅台的相关资讯
opencli snowball news --symbol 600519
# 限制数量
opencli snowball news --symbol 600519 --limit 10
# JSON格式
opencli snowball news --symbol 600519 -f json
3.4 高级应用
3.4.1 批量查询多只股票
创建 batch-quote.sh:
#!/bin/bash
# 批量查询多只股票
STOCKS=("600519" "000858" "000001" "002594")
OUTPUT_FILE="stocks_batch_$(date +%Y%m%d).json"
echo "[" > "$OUTPUT_FILE"
FIRST=true
for symbol in "${STOCKS[@]}"; do
if [ "$FIRST" = true ]; then
FIRST=false
else
echo "," >> "$OUTPUT_FILE"
fi
opencli snowball quote --symbol "$symbol" -f json | jq '.' >> "$OUTPUT_FILE"
done
echo "]" >> "$OUTPUT_FILE"
echo "✅ 批量查询完成: $OUTPUT_FILE"
3.4.2 股票筛选器
根据特定条件筛选股票:
#!/bin/bash
# 筛选PE小于20的股票
opencli snowball favorite -f json | \
jq '.data[] | select(.pe_ratio < 20)' > low_pe_stocks.json
# 筛选涨幅超过5%的股票
opencli snowball favorite -f json | \
jq '.data[] | select(.change_percent > 5)' > gainers.json
# 筛选跌幅超过3%的股票
opencli snowball favorite -f json | \
jq '.data[] | select(.change_percent < -3)' > losers.json
3.4.3 趋势分析
分析股票的历史趋势:
#!/bin/bash
# 收集多日数据(需要手动运行多次)
mkdir -p stock-trends
for i in {1..30}; do
DATE=$(date -d "$i days ago" +%Y%m%d)
# 假设你有历史数据或使用其他方式获取
opencli snowball favorite -f json > "stock-trends/favorite_$DATE.json"
sleep 86400 # 等待一天
done
# 分析趋势
jq -s 'flatten | group_by(.symbol) | map({symbol: .[0].symbol, prices: [.[] | .price]})' stock-trends/favorite_*.json
3.5 与AI结合
让AI帮你分析股票数据:
#!/bin/bash
# 1. 获取数据
opencli snowball favorite -f json > stocks.json
# 2. 使用AI分析(需要配合AI工具如Claude)
# 可以将stocks.json传给AI进行分析
# 3. 生成报告
opencli cursor send "请分析以下股票数据:\n$(cat stocks.json)\n并给出投资建议"
四、BOSS直聘深度实战
BOSS直聘是中国最大的在线招聘平台之一,拥有海量职位信息和智能匹配系统。OpenCLI 为BOSS直聘提供了强大的命令行接口,让你能够快速搜索职位、投递简历、分析市场行情。
4.1 BOSS直聘功能概览
| 功能分类 | 命令 | 说明 | 是否需要登录 |
|---|---|---|---|
| 职位搜索 | boss search | 搜索职位 | ✅ 是 |
| 简历投递 | boss apply | 投递简历 | ✅ 是 |
| 消息管理 | boss message | 查看聊天消息 | ✅ 是 |
| 公司信息 | boss company | 查看公司详情 | ✅ 是 |
| 面试邀请 | boss interview | 查看面试邀请 | ✅ 是 |
| 我的投递 | boss applied | 查看投递记录 | ✅ 是 |
| 收藏职位 | boss saved | 查看收藏的职位 | ✅ 是 |
4.2 核心功能详解
4.2.1 职位搜索(核心功能)
这是最常用的功能,支持多种筛选条件:
# 基础搜索
opencli boss search "前端工程师"
# 指定城市
opencli boss search "前端工程师" --city 北京
# 指定薪资范围
opencli boss search "前端工程师" --salary "15k-25k"
# 指定工作年限
opencli boss search "前端工程师" --experience "3-5年"
# 限制数量
opencli boss search "前端工程师" --limit 20
# 组合条件
opencli boss search "前端工程师" --city 北京 --salary "15k-25k" --experience "3-5年" --limit 10
# JSON格式输出
opencli boss search "前端工程师" -f json
# CSV格式(适合Excel分析)
opencli boss search "前端工程师" -f csv
输出示例(JSON格式):
{
"total": 1250,
"data": [
{
"job_id": "123456789",
"title": "高级前端工程师",
"company": "字节跳动",
"salary": "25k-40k",
"location": "北京",
"experience": "3-5年",
"education": "本科",
"tags": ["React", "TypeScript", "Node.js"],
"update_time": "2026-04-01 09:00",
"description": "负责前端架构设计和核心功能开发...",
"requirements": "精通React、Vue等框架..."
}
]
}
4.2.2 简历投递
找到心仪职位后,一键投递:
# 根据职位ID投递
opencli boss apply --job-id 123456789
# 批量投递多个职位
opencli boss apply --job-ids 123456789,987654321,456789123
# 投递时附上消息
opencli boss apply --job-id 123456789 --message "我对这个职位非常感兴趣"
4.2.3 查看我的投递
追踪你的求职进度:
# 查看所有投递记录
opencli boss applied
# 筛选特定状态
opencli boss applied --status "已查看"
opencli boss applied --status "待面试"
# JSON格式
opencli boss applied -f json
# 保存到文件
opencli boss applied -f json > my_applied_jobs.json
4.2.4 消息管理
与HR直接沟通:
# 查看所有消息
opencli boss message
# 查看未读消息
opencli boss message --unread
# 查看特定职位相关的消息
opencli boss message --job-id 123456789
# 发送消息给HR
opencli boss message send --job-id 123456789 --content "您好,我想了解一下这个职位的具体要求"
4.2.5 查看公司信息
了解目标公司的详细信息:
# 根据公司ID查看
opencli boss company --company-id 987654321
# 根据职位ID查看所属公司
opencli boss company --job-id 123456789
# JSON格式
opencli boss company --company-id 987654321 -f json
4.3 实战应用场景
4.3.1 每日职位监控
创建 job-monitor.sh:
#!/bin/bash
# 每日职位监控脚本
OUTPUT_DIR="./job-monitor"
mkdir -p "$OUTPUT_DIR"
DATE=$(date +%Y%m%d)
# 监控多个职位关键词
KEYWORDS=("前端工程师" "Java开发" "产品经理" "数据分析师")
for keyword in "${KEYWORDS[@]}"; do
echo "📌 搜索: $keyword"
# 搜索职位
opencli boss search "$keyword" --limit 20 -f json > "$OUTPUT_DIR/${keyword}_$DATE.json"
# 统计数量
COUNT=$(jq '.total' "$OUTPUT_DIR/${keyword}_$DATE.json")
echo " 找到 $COUNT 个职位"
# 筛选高薪职位(假设月薪20k以上为高薪)
jq '.data[] | select(.salary | contains("20k")) | "\(.company): \(.title) - \(.salary)"' "$OUTPUT_DIR/${keyword}_$DATE.json" > "$OUTPUT_DIR/${keyword}_high_salary_$DATE.txt"
done
echo "✅ 职位监控完成,数据保存在 $OUTPUT_DIR/"
使用方法:
chmod +x job-monitor.sh
./job-monitor.sh
定时执行(每天早上8点):
# 添加到crontab
0 8 * * * /path/to/job-monitor.sh
4.3.2 求职分析报告
生成详细的求职分析报告:
#!/bin/bash
# 求职分析报告生成器
REPORT_FILE="job_analysis_report_$(date +%Y%m%d).md"
echo "# 求职市场分析报告" > "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
echo "**生成时间**: $(date '+%Y-%m-%d %H:%M:%S')" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
# 搜索多个关键词
KEYWORDS=("前端" "Java" "Python" "产品经理")
for keyword in "${KEYWORDS[@]}"; do
echo "## $keyword 岗位分析" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
# 搜索职位
DATA=$(opencli boss search "$keyword" --limit 50 -f json)
# 总数
TOTAL=$(echo "$DATA" | jq '.total')
echo "- **职位总数**: $TOTAL" >> "$REPORT_FILE"
# 薪资分布
echo "- **薪资分布**:" >> "$REPORT_FILE"
echo "$DATA" | jq -r '.data[] | "- \(.salary): \(.company)"' >> "$REPORT_FILE"
# 公司类型
echo "- **公司TOP10**:" >> "$REPORT_FILE"
echo "$DATA" | jq -r '.data[].company' | sort | uniq -c | sort -rn | head -10 >> "$REPORT_FILE"
# 技能要求
echo "- **技能要求**:" >> "$REPORT_FILE"
echo "$DATA" | jq -r '.data[] | .tags[]' | sort | uniq -c | sort -rn | head -10 >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
done
echo "✅ 报告已生成: $REPORT_FILE"
4.3.3 智能简历投递
根据职位要求智能筛选和投递:
#!/bin/bash
# 智能简历投递脚本
TARGET_SALARY="15k" # 期望最低薪资
TARGET_CITY="北京" # 期望城市
TARGET_JOB="前端工程师" # 目标职位
# 搜索符合条件的职位
RESULTS=$(opencli boss search "$TARGET_JOB" --city "$TARGET_CITY" --limit 20 -f json)
# 筛选薪资符合条件的职位
FILTERED=$(echo "$RESULTS" | jq --arg salary "$TARGET_SALARY" '.data[] | select(.salary | test($salary))')
# 提取职位ID列表
JOB_IDS=$(echo "$FILTERED" | jq -r '.job_id')
echo "找到 $(echo "$FILTERED" | jq 'length') 个符合条件的职位"
# 确认后投递
read -p "是否开始投递? (y/n): " confirm
if [ "$confirm" = "y" ]; then
for job_id in $JOB_IDS; do
echo "投递职位: $job_id"
opencli boss apply --job-id "$job_id"
# 避免投递过快
sleep 2
done
echo "✅ 投递完成"
else
echo "已取消投递"
fi
4.3.4 面试管理
追踪面试进度:
#!/bin/bash
# 面试管理脚本
# 获取所有面试邀请
INTERVIEWS=$(opencli boss interview -f json)
# 按日期排序
echo "# 面试安排" > interview_schedule.md
echo "" >> interview_schedule.md
echo "$INTERVIEWS" | jq -r '.data[] | "- \(.date) \(.time): \(.company) - \(.title)" | sort >> interview_schedule.md
# 今日面试
TODAY=$(date +%Y-%m-%d)
echo "" >> interview_schedule.md
echo "## 今日面试" >> interview_schedule.md
echo "$INTERVIEWS" | jq -r --arg today "$TODAY" '.data[] | select(.date == $today) | "- \(.time): \(.company) - \(.title)"' >> interview_schedule.md
echo "✅ 面试日程已生成"
4.4 与雪球联动
场景: 分析行业发展趋势,根据行业热度选择求职方向
#!/bin/bash
# 行业分析与求职方向选择
# 1. 获取雪球热门行业话题
opencli snowball hot -f json > snowball_hot.json
# 提取热门行业
TOP_INDUSTRIES=$(jq -r '.data[].title' snowball_hot.json | head -10)
echo "📊 当前热门行业:"
echo "$TOP_INDUSTRIES"
# 2. 根据热门行业搜索相关职位
for industry in $TOP_INDUSTRIES; do
echo ""
echo "🔍 搜索行业相关职位: $industry"
# 将行业名称转换为职位关键词
JOB_KEYWORD=$(echo "$industry" | sed 's/行业//g')
opencli boss search "$JOB_KEYWORD" --limit 5 -f json > "${JOB_KEYWORD}_jobs.json"
COUNT=$(jq '.total' "${JOB_KEYWORD}_jobs.json")
echo " 找到 $COUNT 个相关职位"
done
echo ""
echo "✅ 分析完成,你可以根据行业热度选择求职方向"
五、跨平台数据融合
OpenCLI 的真正威力在于能够将多个平台的数据串联起来,形成完整的信息流。
5.1 投资+职业分析
场景: 根据股市表现选择求职行业
#!/bin/bash
# 根据股市表现选择求职行业
# 1. 获取雪球热门股票
opencli snowball hot -f json > hot_stocks.json
# 2. 分析热门股票所属行业
INDUSTRIES=$(jq -r '.data[].industry' hot_stocks.json | sort | uniq -c | sort -rn | head -5)
echo "📈 股市热门行业:"
echo "$INDUSTRIES"
# 3. 根据热门行业搜索职位
echo "$INDUSTRIES" | while read -r line; do
INDUSTRY=$(echo "$line" | awk '{print $2}')
echo ""
echo "🔍 搜索行业职位: $INDUSTRY"
opencli boss search "$INDUSTRY" --limit 10 -f json > "${INDUSTRY}_jobs.json"
done
echo "✅ 分析完成"
5.2 数据导出与可视化
将数据导出为多种格式,用于进一步分析:
#!/bin/bash
# 数据导出脚本
# 雪球数据
opencli snowball favorite -f json > stocks.json
opencli snowball favorite -f csv > stocks.csv
opencli snowball favorite -f yaml > stocks.yaml
# BOSS直聘数据
opencli boss search "前端工程师" -f json > frontend_jobs.json
opencli boss search "前端工程师" -f csv > frontend_jobs.csv
echo "✅ 数据导出完成"
使用Python进行数据可视化:
import pandas as pd
import matplotlib.pyplot as plt
# 读取股票数据
stocks = pd.read_json('stocks.json')
# 读取职位数据
jobs = pd.read_json('frontend_jobs.json')
# 薪资分布可视化
job_salaries = jobs['data'].apply(lambda x: int(x['salary'].split('-')[0].replace('k', '')))
plt.hist(job_salaries, bins=20)
plt.title('前端工程师薪资分布')
plt.xlabel('薪资(k)')
plt.ylabel('职位数量')
plt.savefig('salary_distribution.png')
print("✅ 图表已生成")
5.3 自动化工作流
创建完整的自动化工作流:
#!/bin/bash
# 每日投资与职业分析工作流
OUTPUT_DIR="./daily-report"
mkdir -p "$OUTPUT_DIR"
DATE=$(date +%Y%m%d)
# 1. 获取投资数据
echo "📈 获取投资数据..."
opencli snowball favorite -f json > "$OUTPUT_DIR/stocks_$DATE.json"
# 2. 获取求职数据
echo "💼 获取求职数据..."
opencli boss search "前端工程师" --limit 20 -f json > "$OUTPUT_DIR/jobs_$DATE.json"
# 3. 生成分析报告
echo "📊 生成分析报告..."
python generate_report.py "$OUTPUT_DIR/stocks_$DATE.json" "$OUTPUT_DIR/jobs_$DATE.json" > "$OUTPUT_DIR/report_$DATE.md"
# 4. 发送到飞书(如果有飞书配置)
# opencli feishu send --file "$OUTPUT_DIR/report_$DATE.md"
echo "✅ 工作流完成,报告保存在 $OUTPUT_DIR/"
六、进阶技巧与最佳实践
6.1 输出格式灵活使用
所有OpenCLI命令都支持多种输出格式:
# JSON格式(适合程序处理)
opencli snowball quote --symbol 600519 -f json
# YAML格式(适合人类阅读)
opencli snowball quote --symbol 600519 -f yaml
# CSV格式(适合Excel)
opencli snowball favorite -f csv
# Markdown表格格式(适合文档)
opencli boss search "前端工程师" -f md
# 表格格式(适合终端)
opencli snowball hot -f table
6.2 管道操作
使用管道将命令串联起来:
# 提取股票价格
opencli snowball favorite -f json | jq -r '.data[] | "\(.name): \(.price)"'
# 筛选高薪职位
opencli boss search "前端工程师" -f json | jq '.data[] | select(.salary | contains("25k"))'
# 统计职位数量
opencli boss search "前端工程师" -f json | jq '.total'
# 保存到文件
opencli snowball hot -f json | jq '.' > hot.json
6.3 定时任务
使用cron实现定时执行:
# 编辑crontab
crontab -e
# 每天早上9点获取自选股数据
0 9 * * * /path/to/monitor-stocks.sh
# 每小时搜索新职位
0 * * * * /path/to/job-monitor.sh
# 每天晚上8点生成日报
0 20 * * * /path/to/daily-report.sh
6.4 错误处理
#!/bin/bash
# 带错误处理的脚本
# 检查命令是否存在
if ! command -v opencli &> /dev/null; then
echo "❌ OpenCLI未安装,请先安装"
exit 1
fi
# 检查Chrome扩展
if ! opencli doctor &> /dev/null; then
echo "❌ Chrome扩展未正确安装或连接失败"
echo "正在尝试修复..."
opencli doctor --fix
fi
# 执行命令并处理错误
if ! opencli snowball favorite -f json > stocks.json; then
echo "❌ 获取股票数据失败"
echo "🔍 请检查Chrome是否已登录雪球"
exit 1
fi
echo "✅ 操作成功"
6.5 性能优化
#!/bin/bash
# 性能优化技巧
# 1. 使用缓存
CACHE_DIR="./cache"
mkdir -p "$CACHE_DIR"
# 检查缓存是否过期(5分钟)
CACHE_FILE="$CACHE_DIR/stocks_cache.json"
if [ -f "$CACHE_FILE" ]; then
CACHE_TIME=$(stat -c %Y "$CACHE_FILE")
CURRENT_TIME=$(date +%s)
DIFF=$((CURRENT_TIME - CACHE_TIME))
if [ $DIFF -lt 300 ]; then
echo "📦 使用缓存数据"
cat "$CACHE_FILE"
exit 0
fi
fi
# 2. 限制数据量
opencli snowball favorite --limit 20 > stocks.json
cp stocks.json "$CACHE_FILE"
# 3. 并行处理(使用GNU Parallel)
# 需要安装: sudo apt-get install parallel
STOCKS=("600519" "000858" "000001" "002594")
parallel -j 4 opencli snowball quote --symbol {} ::: "${STOCKS[@]}"
6.6 安全建议
#!/bin/bash
# 安全实践
# 1. 不要在脚本中硬编码敏感信息
# ❌ 错误做法
# API_KEY="your_api_key"
# ✅ 正确做法:从环境变量读取
API_KEY=${API_KEY:-""}
# 2. 使用相对路径
# ❌ 错误做法
# OUTPUT_DIR="/home/user/data"
# ✅ 正确做法
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
OUTPUT_DIR="$SCRIPT_DIR/data"
# 3. 定期清理日志
find ./logs -name "*.log" -mtime +7 -delete
# 4. 验证输入
if [ -z "$JOB_ID" ]; then
echo "❌ 职位ID不能为空"
exit 1
fi
七、故障排除
7.1 常见问题
问题1: 命令返回空数据
原因: Chrome浏览器未登录对应平台
解决方案:
# 1. 检查登录状态
opencli doctor --live
# 2. 在Chrome中手动登录雪球或BOSS直聘
# 3. 重新运行命令
问题2: Chrome扩展连接失败
原因: 扩展未正确安装或版本不匹配
解决方案:
# 1. 重新安装扩展
# 访问 https://github.com/jackwener/opencli/releases
# 下载最新版本的 opencli-extension.zip
# 解压并在Chrome中重新加载
# 2. 运行诊断和修复
opencli doctor --fix
# 3. 重启Chrome浏览器
问题3: 命令执行缓慢
原因: 网络连接慢或数据量大
解决方案:
# 1. 减少数据量
opencli snowball favorite --limit 10
# 2. 增加超时时间
opencli boss search "前端工程师" --timeout 60
# 3. 检查网络连接
ping -c 4 www.zhipin.com
ping -c 4 xueqiu.com
问题4: JSON解析错误
原因: 数据格式不符合预期
解决方案:
# 1. 先查看原始输出
opencli snowball favorite
# 2. 使用jq的-a参数忽略错误
opencli snowball favorite -f json | jq -a '.'
# 3. 检查输出格式
opencli snowball favorite -f json | jq 'keys'
7.2 诊断命令
# 基础诊断
opencli doctor
# 实时连接测试
opencli doctor --live
# 交互式修复
opencli doctor --fix
# 自动修复所有问题
opencli doctor --fix -y
# 查看日志
opencli logs
# 查看特定命令的日志
opencli logs --command snowball favorite
# 导出日志用于调试
opencli logs > debug.log
7.3 日志分析
#!/bin/bash
# 日志分析脚本
# 获取日志
LOG_FILE="debug.log"
opencli logs > "$LOG_FILE"
# 统计错误数量
ERROR_COUNT=$(grep -c "ERROR" "$LOG_FILE")
echo "错误数量: $ERROR_COUNT"
# 查看最近的错误
echo ""
echo "最近的错误:"
grep "ERROR" "$LOG_FILE" | tail -5
# 查看警告
echo ""
echo "最近的警告:"
grep "WARNING" "$LOG_FILE" | tail -5
# 查看性能指标
echo ""
echo "执行时间:"
grep "duration" "$LOG_FILE"
八、实战案例库
8.1 案例1:个人投资助手
需求: 每天自动监控自选股,生成投资建议
实现:
#!/bin/bash
# investment-assistant.sh
OUTPUT_DIR="./investment"
mkdir -p "$OUTPUT_DIR"
DATE=$(date +%Y%m%d)
# 1. 获取自选股数据
echo "📈 获取自选股数据..."
opencli snowball favorite -f json > "$OUTPUT_DIR/stocks_$DATE.json"
# 2. 分析涨跌
echo "📊 分析涨跌情况..."
GAINERS=$(jq -r '.data[] | select(.change_percent > 3) | "\(.name): \(.change_percent)%"' "$OUTPUT_DIR/stocks_$DATE.json")
LOSERS=$(jq -r '.data[] | select(.change_percent < -3) | "\(.name): \(.change_percent)%"' "$OUTPUT_DIR/stocks_$DATE.json")
# 3. 生成报告
cat > "$OUTPUT_DIR/report_$DATE.md" << EOF
# 投资日报 - $DATE
## 涨幅超过3%的股票
$GAINERS
## 跌幅超过3%的股票
$LOSERS
## 投资建议
根据今日行情表现:
EOF
# 4. 根据行情给出建议
if [ -n "$GAINERS" ]; then
echo "- 涨幅较大的股票可以考虑适当减仓" >> "$OUTPUT_DIR/report_$DATE.md"
fi
if [ -n "$LOSERS" ]; then
echo "- 跌幅较大的股票可以关注是否出现抄底机会" >> "$OUTPUT_DIR/report_$DATE.md"
fi
echo "✅ 投资报告已生成: $OUTPUT_DIR/report_$DATE.md"
8.2 案例2:求职追踪系统
需求: 自动追踪求职进度,生成分析报告
实现:
#!/bin/bash
# job-tracker.sh
OUTPUT_DIR="./job-tracker"
mkdir -p "$OUTPUT_DIR"
DATE=$(date +%Y%m%d)
# 1. 获取投递记录
echo "💼 获取投递记录..."
opencli boss applied -f json > "$OUTPUT_DIR/applied_$DATE.json"
# 2. 获取面试邀请
echo "📅 获取面试邀请..."
opencli boss interview -f json > "$OUTPUT_DIR/interview_$DATE.json"
# 3. 生成追踪报告
cat > "$OUTPUT_DIR/progress_$DATE.md" << EOF
# 求职进度追踪 - $DATE
## 投递统计
$(opencli boss applied -f json | jq -r '"- 总投递: \(.total)\n- 已查看: \(.data[] | select(.status == "已查看") | length)\n- 待面试: \(.data[] | select(.status == "待面试") | length)"')
## 近期面试
EOF
# 添加面试安排
jq -r '.data[] | "- \(.date) \(.time): \(.company) - \(.title)"' "$OUTPUT_DIR/interview_$DATE.json" >> "$OUTPUT_DIR/progress_$DATE.md"
# 4. 提醒功能
TODAY=$(date +%Y-%m-%d)
TODAY_INTERVIEWS=$(jq -r --arg today "$TODAY" '.data[] | select(.date == $today) | "- \(.time): \(.company) - \(.title)"' "$OUTPUT_DIR/interview_$DATE.json")
if [ -n "$TODAY_INTERVIEWS" ]; then
echo ""
echo "⚠️ 今日面试提醒:"
echo "$TODAY_INTERVIEWS"
fi
echo "✅ 求职追踪报告已生成"
8.3 案例3:行业趋势分析
需求: 分析不同行业的发展趋势,辅助职业规划
实现:
#!/bin/bash
# industry-analysis.sh
OUTPUT_DIR="./industry-analysis"
mkdir -p "$OUTPUT_DIR"
DATE=$(date +%Y%m%d)
# 行业列表
INDUSTRIES=("互联网" "金融" "新能源" "医疗" "教育")
cat > "$OUTPUT_DIR/industry_report_$DATE.md" << EOF
# 行业发展趋势分析 - $DATE
EOF
for industry in "${INDUSTRIES[@]}"; do
echo ""
echo "🔍 分析行业: $industry"
# 1. 从雪球获取相关股票热度
STOCK_KEYWORD="${industry}板块"
STOCK_DATA=$(opencli snowball search "$STOCK_KEYWORD" --limit 10 -f json)
# 2. 从BOSS直聘获取职位数量
JOB_DATA=$(opencli boss search "$industry" --limit 50 -f json)
JOB_COUNT=$(echo "$JOB_DATA" | jq '.total')
# 3. 分析薪资水平
SALARIES=$(echo "$JOB_DATA" | jq -r '.data[] | .salary' | grep -o '[0-9]\+' | sort -n | head -5)
AVG_SALARY=$(echo "$SALARIES" | awk '{sum+=$1} END {print sum/NR}')
# 4. 生成报告
cat >> "$OUTPUT_DIR/industry_report_$DATE.md" << EOF
## $industry
- 股票关注度: $(echo "$STOCK_DATA" | jq 'length')
- 职位数量: $JOB_COUNT
- 平均薪资: ${AVG_SALARY}k
EOF
done
echo "✅ 行业分析报告已生成"
8.4 案例4:智能投递助手
需求: 根据个人画像智能筛选并投递职位
实现:
#!/bin/bash
# smart-apply.sh
# 个人画像配置
TARGET_SALARY="15k-25k"
TARGET_CITY="北京,上海"
TARGET_EXPERIENCE="3-5年"
TARGET_SKILLS=("React" "Vue" "TypeScript")
echo "🤖 智能投递助手"
echo "期望薪资: $TARGET_SALARY"
echo "期望城市: $TARGET_CITY"
echo "工作年限: $TARGET_EXPERIENCE"
echo "目标技能: ${TARGET_SKILLS[*]}"
echo ""
# 1. 搜索职位
echo "🔍 搜索匹配职位..."
JOBS=$(opencli boss search "前端工程师" --city 北京 --limit 30 -f json)
# 2. 筛选符合条件的职位
MATCHING_JOBS=$(echo "$JOBS" | jq --argjson skills "$(echo "${TARGET_SKILLS[@]}" | jq -R 'split(" ")' | jq -c .)" '
.data[] |
select(.salary | test("15k")) |
select(.experience | test("3-5")) |
select(.tags as $tags | $skills | map($tags | contains(.)) | all)
')
echo "找到 $(echo "$MATCHING_JOBS" | jq 'length') 个匹配职位"
# 3. 显示匹配职位并确认
echo ""
echo "匹配职位列表:"
echo "$MATCHING_JOBS" | jq -r '"\(.title) - \(.company) - \(.salary)"' | nl
# 4. 确认投递
read -p "是否投递以上所有职位? (y/n): " confirm
if [ "$confirm" = "y" ]; then
JOB_IDS=$(echo "$MATCHING_JOBS" | jq -r '.job_id')
for job_id in $JOB_IDS; do
echo "投递: $job_id"
opencli boss apply --job-id "$job_id"
sleep 2 # 避免投递过快
done
echo "✅ 投递完成"
else
echo "已取消"
fi
8.5 案例5:数据可视化仪表盘
需求: 生成可视化的数据和图表
实现:
# dashboard.py
import json
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
from datetime import datetime
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 读取股票数据
with open('stocks.json', 'r', encoding='utf-8') as f:
stocks_data = json.load(f)
# 读取职位数据
with open('frontend_jobs.json', 'r', encoding='utf-8') as f:
jobs_data = json.load(f)
# 创建仪表盘
fig, axes = plt.subplots(2, 2, figsize=(15, 10))
# 1. 股票涨跌分布
stock_changes = [stock['change_percent'] for stock in stocks_data['data']]
axes[0, 0].hist(stock_changes, bins=20, color='skyblue', edgecolor='black')
axes[0, 0].set_title('自选股涨跌分布')
axes[0, 0].set_xlabel('涨跌幅(%)')
axes[0, 0].set_ylabel('股票数量')
# 2. 薪资分布
job_salaries = []
for job in jobs_data['data']:
try:
salary_low = int(job['salary'].split('-')[0].replace('k', ''))
job_salaries.append(salary_low)
except:
continue
axes[0, 1].hist(job_salaries, bins=20, color='lightgreen', edgecolor='black')
axes[0, 1].set_title('前端工程师薪资分布')
axes[0, 1].set_xlabel('薪资(k)')
axes[0, 1].set_ylabel('职位数量')
# 3. 技能需求统计
skill_counts = {}
for job in jobs_data['data']:
for skill in job['tags']:
skill_counts[skill] = skill_counts.get(skill, 0) + 1
top_skills = sorted(skill_counts.items(), key=lambda x: x[1], reverse=True)[:10]
skills, counts = zip(*top_skills)
axes[1, 0].barh(range(len(skills)), counts, color='orange')
axes[1, 0].set_yticks(range(len(skills)))
axes[1, 0].set_yticklabels(skills)
axes[1, 0].set_title('技能需求TOP10')
axes[1, 0].set_xlabel('职位数量')
# 4. 公司规模分布
company_sizes = {}
for job in jobs_data['data']:
size = job.get('company_size', '未知')
company_sizes[size] = company_sizes.get(size, 0) + 1
axes[1, 1].pie(company_sizes.values(), labels=company_sizes.keys(), autopct='%1.1f%%')
axes[1, 1].set_title('公司规模分布')
plt.tight_layout()
plt.savefig('dashboard.png', dpi=300, bbox_inches='tight')
print("✅ 仪表盘已生成: dashboard.png")
总结
OpenCLI 为雪球和BOSS直聘提供了强大的命令行接口,让你能够:
- 快速获取数据: 3秒钟获取股票行情或职位信息
- 自动化工作流: 通过脚本实现完全自动化
- 数据融合: 跨平台数据串联分析
- AI集成: 与AI工具无缝结合
- 零成本: 完全免费,无需API Key
快速命令参考卡
雪球核心命令:
opencli snowball quote --symbol 600519 # 查询个股
opencli snowball hot # 热门话题
opencli snowball favorite # 自选股
opencli snowball market # 大盘行情
opencli snowball news --symbol 600519 # 个股资讯
BOSS直聘核心命令:
opencli boss search "前端工程师" # 职位搜索
opencli boss apply --job-id 123456789 # 投递简历
opencli boss applied # 投递记录
opencli boss interview # 面试邀请
opencli boss message # 消息管理
通用技巧:
-f json # JSON格式输出
-f yaml # YAML格式输出
-f csv # CSV格式输出
-f md # Markdown格式输出
--limit 10 # 限制数量
--city 北京 # 指定城市
参考资源:
- GitHub: https://github.com/jackwener/opencli
- 文档: https://opencli.org
- Discussions: https://github.com/jackwener/opencli/discussions

283

被折叠的 条评论
为什么被折叠?



