添加B站链接转换和浏览器安装脚本
- bilibili-short-to-long.sh: B站短链接转长链接工具 - 支持短链接、BV号、AV号多种格式 - 自动清理URL中的tracking参数 - 友好的输出格式 - install-browser-for-openclaw.sh: OpenClaw浏览器环境一键安装脚本 - 支持Ubuntu/Debian/CentOS - 自动安装Chromium浏览器 - 配置OpenClaw Gateway
This commit is contained in:
Executable
+91
@@ -0,0 +1,91 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# B站短链接转长链接脚本
|
||||||
|
# ============================================================================
|
||||||
|
# 用途:将B站短链接(b23.tv)转换为完整视频链接
|
||||||
|
# 支持:短链接、BV号、AV号
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# 颜色输出
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
# 获取长链接(核心逻辑)
|
||||||
|
get_long_url() {
|
||||||
|
local input=$1
|
||||||
|
|
||||||
|
# 如果是BV号格式(BV开头),直接返回完整URL
|
||||||
|
if [[ $input =~ ^BV[a-zA-Z0-9]+$ ]]; then
|
||||||
|
echo "https://www.bilibili.com/video/$input"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 构造短链接URL
|
||||||
|
if [[ $input =~ ^https?:// ]]; then
|
||||||
|
local short_url="$input"
|
||||||
|
elif [[ $input =~ ^b23\.tv/ ]]; then
|
||||||
|
local short_url="https://$input"
|
||||||
|
else
|
||||||
|
local short_url="https://b23.tv/$input"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 获取重定向地址
|
||||||
|
local redirect=$(curl -sLI "$short_url" 2>/dev/null | grep -i '^location:' | head -1 | sed 's/location: //I' | tr -d '\r' || echo "")
|
||||||
|
|
||||||
|
if [ -z "$redirect" ]; then
|
||||||
|
echo "错误:无法获取重定向地址" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 清理URL(移除tracking参数)
|
||||||
|
echo "$redirect" | sed 's/\?.*//' | sed 's/&/\&/g'
|
||||||
|
}
|
||||||
|
|
||||||
|
# 提取BV号
|
||||||
|
extract_bv() {
|
||||||
|
local url=$1
|
||||||
|
echo "$url" | grep -oP 'BV[a-zA-Z0-9]+' | head -1
|
||||||
|
}
|
||||||
|
|
||||||
|
# 主函数
|
||||||
|
main() {
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
echo "用法: $0 <短链接或BV号>"
|
||||||
|
echo ""
|
||||||
|
echo "示例:"
|
||||||
|
echo " $0 https://b23.tv/lid6E0m"
|
||||||
|
echo " $0 b23.tv/lid6E0m"
|
||||||
|
echo " $0 BV11t64BJEDZ"
|
||||||
|
echo " $0 lid6E0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local input=$1
|
||||||
|
local long_url=$(get_long_url "$input")
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local bv=$(extract_bv "$long_url")
|
||||||
|
|
||||||
|
# 输出结果
|
||||||
|
echo "=================================="
|
||||||
|
echo -e "${GREEN}B站链接转换结果${NC}"
|
||||||
|
echo "=================================="
|
||||||
|
echo "输入: $input"
|
||||||
|
echo "长链接: $long_url"
|
||||||
|
echo "BV号: ${bv:-未找到}"
|
||||||
|
echo "=================================="
|
||||||
|
|
||||||
|
# 单独输出长链接(便于脚本调用)
|
||||||
|
echo ""
|
||||||
|
echo "$long_url"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
Executable
+252
@@ -0,0 +1,252 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# OpenClaw浏览器环境一键安装脚本
|
||||||
|
# ============================================================================
|
||||||
|
# 用途:在Ubuntu/Debian服务器上安装Chromium浏览器,供OpenClaw Gateway使用
|
||||||
|
# 适用场景:无桌面环境的服务器,需要浏览器进行自动化操作
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
set -e # 遇到错误立即退出
|
||||||
|
|
||||||
|
# 颜色输出
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# 日志函数
|
||||||
|
log_info() {
|
||||||
|
echo -e "${GREEN}[INFO]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_warn() {
|
||||||
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_error() {
|
||||||
|
echo -e "${RED}[ERROR]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检查是否为root用户
|
||||||
|
check_root() {
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
log_error "请使用sudo运行此脚本: sudo $0"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检测系统
|
||||||
|
detect_os() {
|
||||||
|
if [ -f /etc/os-release ]; then
|
||||||
|
. /etc/os-release
|
||||||
|
OS=$ID
|
||||||
|
OS_VERSION=$VERSION_ID
|
||||||
|
else
|
||||||
|
log_error "无法检测操作系统类型"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "检测到系统: $OS $OS_VERSION"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检查snap是否可用
|
||||||
|
check_snap() {
|
||||||
|
if command -v snap &> /dev/null; then
|
||||||
|
log_info "snap已安装"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_warn "snap未安装"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 安装snap
|
||||||
|
install_snap() {
|
||||||
|
log_info "正在安装snap..."
|
||||||
|
|
||||||
|
case $OS in
|
||||||
|
ubuntu|debian)
|
||||||
|
apt update
|
||||||
|
apt install -y snapd
|
||||||
|
;;
|
||||||
|
centos|rhel|fedora)
|
||||||
|
yum install -y snapd
|
||||||
|
ln -s /var/lib/snapd/snap /snap
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log_error "不支持的操作系统: $OS"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# 等待snapd启动
|
||||||
|
log_info "等待snapd启动..."
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
# 检查snap是否安装成功
|
||||||
|
if command -v snap &> /dev/null; then
|
||||||
|
log_info "snap安装成功"
|
||||||
|
else
|
||||||
|
log_error "snap安装失败"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 安装Chromium(通过snap)
|
||||||
|
install_chromium_snap() {
|
||||||
|
log_info "正在通过snap安装Chromium..."
|
||||||
|
|
||||||
|
# 安装Chromium
|
||||||
|
snap install chromium --classic
|
||||||
|
|
||||||
|
# 等待安装完成
|
||||||
|
log_info "等待Chromium安装完成..."
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
# 验证安装
|
||||||
|
if snap list | grep -q chromium; then
|
||||||
|
log_info "Chromium安装成功"
|
||||||
|
|
||||||
|
# 显示Chromium路径
|
||||||
|
CHROMIUM_PATH=$(which chromium 2>/dev/null || echo "/snap/bin/chromium")
|
||||||
|
log_info "Chromium路径: $CHROMIUM_PATH"
|
||||||
|
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_error "Chromium安装失败"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 安装Chromium(通过apt,备选方案)
|
||||||
|
install_chromium_apt() {
|
||||||
|
log_info "尝试通过apt安装Chromium..."
|
||||||
|
|
||||||
|
case $OS in
|
||||||
|
ubuntu|debian)
|
||||||
|
apt update
|
||||||
|
apt install -y chromium-browser
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log_error "不支持的操作系统: $OS"
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# 验证安装
|
||||||
|
if command -v chromium-browser &> /dev/null || command -v chromium &> /dev/null; then
|
||||||
|
log_info "Chromium安装成功"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_error "Chromium安装失败"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 配置OpenClaw Gateway使用Chromium
|
||||||
|
configure_openclaw() {
|
||||||
|
log_info "配置OpenClaw Gateway..."
|
||||||
|
|
||||||
|
# 检查OpenClaw配置文件
|
||||||
|
OPENCLAW_CONFIG="$HOME/.openclaw/openclaw.json"
|
||||||
|
|
||||||
|
if [ ! -f "$OPENCLAW_CONFIG" ]; then
|
||||||
|
log_warn "未找到OpenClaw配置文件: $OPENCLAW_CONFIG"
|
||||||
|
log_info "跳过Gateway配置"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 获取Chromium路径
|
||||||
|
CHROMIUM_PATH=$(which chromium 2>/dev/null || echo "/snap/bin/chromium")
|
||||||
|
|
||||||
|
# 提示用户可能需要更新配置
|
||||||
|
log_info "Chromium已安装,路径: $CHROMIUM_PATH"
|
||||||
|
log_info "如果OpenClaw Gateway无法自动检测,请手动配置:"
|
||||||
|
echo " executablePath: \"$CHROMIUM_PATH\""
|
||||||
|
echo " headless: true"
|
||||||
|
echo " noSandbox: true"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 测试Chromium是否可用
|
||||||
|
test_chromium() {
|
||||||
|
log_info "测试Chromium是否可用..."
|
||||||
|
|
||||||
|
CHROMIUM_CMD=$(which chromium 2>/dev/null || which chromium-browser 2>/dev/null || echo "/snap/bin/chromium")
|
||||||
|
|
||||||
|
if $CHROMIUM_CMD --version &> /dev/null; then
|
||||||
|
VERSION=$($CHROMIUM_CMD --version)
|
||||||
|
log_info "Chromium版本: $VERSION"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_warn "Chromium可能需要图形库,无法显示版本(在无头环境中是正常的)"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 重启OpenClaw Gateway
|
||||||
|
restart_gateway() {
|
||||||
|
log_info "重启OpenClaw Gateway..."
|
||||||
|
|
||||||
|
if command -v openclaw &> /dev/null; then
|
||||||
|
openclaw gateway restart
|
||||||
|
log_info "OpenClaw Gateway已重启"
|
||||||
|
else
|
||||||
|
log_warn "未找到openclaw命令,请手动重启Gateway"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 主函数
|
||||||
|
main() {
|
||||||
|
log_info "========================================"
|
||||||
|
log_info "OpenClaw浏览器环境安装脚本"
|
||||||
|
log_info "========================================"
|
||||||
|
|
||||||
|
check_root
|
||||||
|
detect_os
|
||||||
|
|
||||||
|
# 安装snap(如果需要)
|
||||||
|
if ! check_snap; then
|
||||||
|
install_snap
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 尝试安装Chromium
|
||||||
|
if install_chromium_snap; then
|
||||||
|
log_info "Chromium安装成功(snap方式)"
|
||||||
|
else
|
||||||
|
log_warn "snap安装失败,尝试apt方式..."
|
||||||
|
if install_chromium_apt; then
|
||||||
|
log_info "Chromium安装成功(apt方式)"
|
||||||
|
else
|
||||||
|
log_error "所有安装方式都失败了"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 测试Chromium
|
||||||
|
test_chromium
|
||||||
|
|
||||||
|
# 配置OpenClaw
|
||||||
|
configure_openclaw
|
||||||
|
|
||||||
|
# 询问是否重启Gateway
|
||||||
|
read -p "是否立即重启OpenClaw Gateway?(y/n) " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
restart_gateway
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "========================================"
|
||||||
|
log_info "安装完成!"
|
||||||
|
log_info "========================================"
|
||||||
|
log_info "Chromium已安装并可以供OpenClaw使用"
|
||||||
|
log_info ""
|
||||||
|
log_info "验证方法:"
|
||||||
|
log_info " 1. 运行: openclaw status"
|
||||||
|
log_info " 2. 检查浏览器状态"
|
||||||
|
log_info " 3. 使用browser工具测试"
|
||||||
|
log_info "========================================"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 运行主函数
|
||||||
|
main "$@"
|
||||||
Reference in New Issue
Block a user