添加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