Initial commit: yu-zhi-ran platform with automation integration

This commit is contained in:
lt
2026-04-19 14:05:09 +08:00
commit 3cb2df51c8
209 changed files with 80379 additions and 0 deletions
+109
View File
@@ -0,0 +1,109 @@
#!/bin/bash
# 微信公众号自动发布脚本(直接检测元素,不依赖URL)
# 用法: ./publish_to_wechat_mp.sh <markdown_file> <images_dir>
set -e
PROJECT_ROOT="/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran"
SESSION_STATE="/root/.openclaw/workspaces/yzr-yxl/projects/yu-zhi-ran/automation/wechat_state.json"
if [ $# -ne 2 ]; then
echo "用法: $0 <markdown_file> <images_dir>"
exit 1
fi
MARKDOWN_FILE="$1"
IMAGES_DIR="$2"
echo "=========================================="
echo "微信公众号自动发布"
echo "=========================================="
# 1. 加载状态
agent-browser state load "$SESSION_STATE" 2>/dev/null || echo "⚠️ 加载状态失败,但继续..."
# 2. 检测编辑器是否就绪(通过快照查找关键元素)
echo "检测编辑器页面..."
SNAPSHOT="/tmp/wechat_check_$(date +%s).json"
agent-browser snapshot -i --json > "$SNAPSHOT" 2>/dev/null || true
# 查找标题输入框和正文编辑器
HAS_TITLE=$(jq -r '.data.refs | to_entries[] | select(.value.role=="textbox" and (.value.name|test("标题|title";"i"))) | .key' "$SNAPSHOT" | head -1)
HAS_CONTENT=$(jq -r '.data.refs | to_entries[] | select(.value.role|test("textbox|generic") and (.value.name|test("内容|正文|editor";"i"))) | .key' "$SNAPSHOT" | head -1)
if [ -z "$HAS_TITLE" ] || [ -z "$HAS_CONTENT" ]; then
echo "❌ 未检测到编辑器元素"
echo "请确保:"
echo " 1. 已点击'新的创作' → '文章'"
echo " 2. 编辑器已完全加载(看到标题输入框)"
echo " 3. 编辑器标签页是当前活动标签页"
echo ""
echo "当前页面元素数: $(jq '.data.refs | length' "$SNAPSHOT" 2>/dev/null || echo 'unknown')"
exit 3
fi
echo "✓ 编辑器就绪"
echo " 标题框: $HAS_TITLE"
echo " 正文框: $HAS_CONTENT"
# 3. 准备内容
ARTICLE_TITLE=$(head -1 "$MARKDOWN_FILE" | sed 's/^# //')
ARTICLE_BODY=$(sed '1d;$d' "$MARKDOWN_FILE")
COVER_IMG="$IMAGES_DIR/05-封面图.png"
[ -f "$COVER_IMG" ] || COVER_IMG=$(find "$IMAGES_DIR" -name "*封面*.png" -o -name "*cover*.png" | head -1)
echo "文章标题: $ARTICLE_TITLE"
echo "封面图: ${COVER_IMG:-未找到}"
# 4. 上传封面图(如果有)
if [ -f "$COVER_IMG" ]; then
echo "上传封面图..."
IMG_BTN=$(jq -r '.data.refs | to_entries[] | select(.value.name|test("图片|image|上传";"i")) | .key' "$SNAPSHOT" | head -1)
if [ -n "$IMG_BTN" ]; then
agent-browser click "@$IMG_BTN"
sleep 2
UPLOAD_INPUT=$(jq -r '.data.refs | to_entries[] | select(.value.role=="file") | .key' "$SNAPSHOT" | head -1)
if [ -n "$UPLOAD_INPUT" ]; then
agent-browser upload "@$UPLOAD_INPUT" "$COVER_IMG"
sleep 3
fi
fi
fi
# 5. 填写标题
echo "填写标题..."
agent-browser fill "@$HAS_TITLE" "$ARTICLE_TITLE"
sleep 1
# 6. 填写正文(分段)
echo "填写正文..."
echo "$ARTICLE_BODY" | fold -s -w 80 | while IFS= read -r line; do
[ -z "$line" ] && continue
agent-browser fill "@$HAS_CONTENT" "$line"
sleep 0.3
done
# 7. 截图
SCREENSHOT="$PROJECT_ROOT/content/published/$(date +%Y-%m-%d)-$(echo $ARTICLE_TITLE | tr -d '/*?\|"<>')/wechat-draft.png"
mkdir -p "$(dirname "$SCREENSHOT")"
agent-browser screenshot "$SCREENSHOT"
echo "截图: $SCREENSHOT"
# 8. 元数据
METADATA="$PROJECT_ROOT/content/published/$(date +%Y-%m-%d)-$(echo $ARTICLE_TITLE | tr -d '/*?\|"<>')/wechat-metadata.json"
cat > "$METADATA" <<EOF
{
"title": "$ARTICLE_TITLE",
"status": "draft",
"filled_at": "$(date -Iseconds)"
}
EOF
echo "=========================================="
echo "✅ 内容填充完成!"
echo "请手动:"
echo " 1. 点击'从正文选择'设置封面"
echo " 2. 填写摘要、标签"
echo " 3. 保存草稿"
echo "=========================================="