#!/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