135 lines
3.9 KiB
Bash
135 lines
3.9 KiB
Bash
#!/bin/bash
|
|
# SEO进化猎手完整流程 v1.0
|
|
# 扫描 → 评估 → 安装 → 沉淀
|
|
|
|
PROGRESS_FILE="/root/.openclaw/workspace/seo/evolution-hunter-progress.md"
|
|
CANDIDATES="/root/.openclaw/workspace/seo/evolution-candidates.txt"
|
|
EVAL_LOG="/root/.openclaw/workspace/seo/evolution-log.md"
|
|
LOG_FILE="/root/.openclaw/logs/seo-evolution.log"
|
|
PROXY="http://192.168.0.66:7890"
|
|
TIMEOUT=20
|
|
|
|
log() { echo "[$(date '+%H:%M:%S') $1" | tee -a "$LOG_FILE" 2>/dev/null; }
|
|
|
|
# 资源检查
|
|
check_resource() {
|
|
bash /root/.openclaw/scripts/resource-guard.sh > /dev/null 2>&1
|
|
}
|
|
|
|
# GitHub搜索
|
|
github_search() {
|
|
local query="$1"
|
|
local url="https://api.github.com/search/repositories?q=$(echo "$query" | python3 -c "import urllib.parse,sys; print(urllib.parse.quote(sys.stdin.read().strip()))&sort=stars&order=desc&per_page=10"
|
|
curl -s --max-time $TIMEOUT --proxy "$PROXY" \
|
|
-H "Accept: application/vnd.github.v3+json" \
|
|
-H "User-Agent: Mozilla/5.0" "$url" 2>/dev/null | python3 -c "
|
|
import json,sys
|
|
try:
|
|
data=json.load(sys.stdin)
|
|
for item in data.get('items',[])[:5]:
|
|
stars=item.get('stargazers_count',0)
|
|
lang=item.get('language','N/A') or 'N/A'
|
|
desc=str(item.get('description','N/A'))[:80]
|
|
url=item.get('html_url','N/A')
|
|
name=item.get('full_name','')
|
|
print(f'NAME:{name}')
|
|
print(f'STARS:{stars}')
|
|
print(f'DESC:{desc}')
|
|
print(f'LANG:{lang}')
|
|
print(f'URL:{url}')
|
|
print('---')
|
|
except: pass
|
|
" 2>/dev/null
|
|
}
|
|
|
|
# 评估项目
|
|
evaluate_project() {
|
|
local name="$1"
|
|
local stars="$2"
|
|
local desc="$3"
|
|
local url="$4"
|
|
|
|
# 高价值关键词
|
|
case "$desc $name" in
|
|
*seo*|*search*|*keyword*|*ranking*)
|
|
echo "SEO直接相关"
|
|
return 2
|
|
;;
|
|
*scraper*|*crawler*|*browser*|*automation*)
|
|
echo "自动化工具"
|
|
return 2
|
|
;;
|
|
*playwright*|*selenium*|*puppeteer*)
|
|
echo "浏览器自动化"
|
|
return 2
|
|
;;
|
|
*agent*|*tool*|*cli*|*api*)
|
|
echo "Agent/工具"
|
|
return 1
|
|
;;
|
|
*)
|
|
return 0
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# 主流程
|
|
main() {
|
|
log "========== SEO进化猎手启动 =========="
|
|
|
|
check_resource || { log "资源不足"; exit 0; }
|
|
|
|
mkdir -p "$(dirname "$CANDIDATES")"
|
|
> "$CANDIDATES"
|
|
|
|
# 扫描
|
|
log "扫描SEO相关项目..."
|
|
for query in "SEO tool python" "web scraper python" "keyword research" "content generator python"; do
|
|
github_search "$query" >> "$EVAL_LOG"
|
|
done
|
|
|
|
# 提取候选
|
|
log "评估候选项目..."
|
|
while IFS=: read -r field value; do
|
|
case $field in
|
|
NAME*) name="$value" ;;
|
|
STARS*) stars="$value" ;;
|
|
DESC*) desc="$value" ;;
|
|
URL*) url="$value" ;;
|
|
---)
|
|
if [ -n "$name" ]; then
|
|
result=$(evaluate_project "$name" "$stars" "$desc" "$url")
|
|
priority=$?
|
|
if [ $priority -ge 1 ]; then
|
|
echo "【$result】⭐$stars $name" >> "$CANDIDATES"
|
|
echo " $desc" >> "$CANDIDATES"
|
|
echo " $url" >> "$CANDIDATES"
|
|
echo "" >> "$CANDIDATES"
|
|
fi
|
|
fi
|
|
name=""
|
|
;;
|
|
esac
|
|
done < "$EVAL_LOG"
|
|
|
|
# 统计
|
|
count=$(wc -l < "$CANDIDATES" 2>/dev/null || echo 0)
|
|
log "发现 $count 个候选"
|
|
|
|
# 自动安装高优先级
|
|
log "处理候选安装..."
|
|
while IFS= read -r line; do
|
|
echo "$line"
|
|
done < "$CANDIDATES"
|
|
|
|
# 记录
|
|
echo "## $(date '+%Y-%m-%d %H:%M'" >> "$PROGRESS_FILE"
|
|
echo "" >> "$PROGRESS_FILE"
|
|
cat "$CANDIDATES" >> "$PROGRESS_FILE"
|
|
echo "" >> "$PROGRESS_FILE"
|
|
|
|
log "========== 进化猎手完成 =========="
|
|
}
|
|
|
|
main
|