写起来也不算很复杂就是了~
-user <用户名> 登录
-getnew 获取地址
-file <filename> 指定文件上传
按步骤进行,登陆过可直接获取,cookie可能会过期
#!/bin/sh
while [[ $1 != "" ]]; do
case $1 in
-user)
user=$2
shift 2
;;
-file)
file=$2
shift 2
;;
-silent)
silent=" -s"
shift 1
;;
-getnew)
getnew="true"
shift 1
;;
-h|--help)
echo "BiliBili Uploader in shell
by lcz970
-h --help
输出本帮助信息
-user <userid>
登录模式,指定用户名,密码将在执行时询问,用于获取cookie
-getnew
获取地址,获取后写入文件方可开始上传,需要cookie正常获取
-file <path/to/file>
上传模式,读取给定的文件并上传,需要存在可用的上传地址
-silent
静默上传,不输出curl信息,只显示切片字节"
exit
;;
*)
echo "未知参数 $1"
exit
;;
esac
done
if [[ $user != "" ]]; then
echo "登陆用户 $user"
read -s -p "输入密码 " pwd
if [[ $pwd == "" ]]; then echo "密码为空"; exit; fi
echo -e "\n登陆中..."
return=$(curl -s --data "userid=$user&pwd=$pwd" "https://passport.bilibili.com/ajax/miniLogin/login" -c /tmp/bili_cookie)
if [[ $return != ${return#*status\"\:true} ]]; then echo "登陆成功"; else echo "登陆失败"; echo $return; fi
exit
fi
if [[ $getnew == "true" ]]; then
echo "获取新上传地址"
return=$(curl -s "http://member.bilibili.com/get_vupload_url" -b /tmp/bili_cookie)
if [[ $return == ${return#*url\"\:} ]]; then echo "获取失败"; echo $return; else
url=${return#*url\"\:\"}
until [[ "$url" == "${url%\"*}" ]]; do url="${url%\"*}"; done
filename=${return#*file_name\"\:\"}
until [[ "$filename" == "${filename%\"*}" ]]; do filename="${filename%\"*}"; done
echo -e "上传服务器:${url:7:5}\n上传文件名 $filename\n地址已保存"
echo -n $url >/tmp/bili_upload_url
fi
exit
fi
if [[ $file == "" ]]; then
echo "上传必需参数不足,-h查看帮助"
exit
fi
if [[ ! -f $file ]]; then
echo "文件不存在"
exit
fi
if [[ ! -f /tmp/bili_upload_url ]]; then
echo "上传地址不存在,请使用-getnew获取"
exit
fi
url=$(</tmp/bili_upload_url)
filename=${url#*filename=}; until [[ "$filename" == "${filename%&*}" ]]; do filename="${filename%&*}"; done
hash=${url#*hash=}; until [[ "$hash" == "${hash%&*}" ]]; do hash="${hash%&*}"; done
uploadFile=$file; until [[ "$uploadFile" == "${uploadFile#*/}" ]]; do uploadFile="${uploadFile#*/}"; done
echo "上传服务器:${url:7:5}
上传vid: $filename
上传文件:$uploadFile"
size=$(ls -l "$file")
size=${size#* * * * }
until [[ "$size" == "${size% *}" ]]; do size="${size% *}"; done
let start=0 sizeR=size-1
let M=size/1024/1024 "K=(size-M*1024*1024)/1024*100/1024"; if (( $K < 10 )); then K=0$K; fi; sizeh=$M.$K
while (( $start < $size )); do
let block=512*1024 end=start+block-1
if (( $end >= $sizeR )); then
let end=sizeR block=end-start+1
fi
let M=start/1024/1024 "K=(start-M*1024*1024)/1024*100/1024"; if (( $K < 10 )); then K=0$K; fi; starth=$M.$K
let M=end/1024/1024 "K=(end-M*1024*1024)/1024*100/1024"; if (( $K < 10 )); then K=0$K; fi; endh=$M.$K
let "percent=start/(size/10000)" percentI=percent/100 "percentD=percent-(percentI*100)"
if (( $percentI < 10 )); then percentI=0$percentI; fi
if (( $percentD < 10 )); then percentD=0$percentD; fi
echo "上传分片 ${starth}M-${endh}M/${sizeh}M($start-$end/$size) $percentI.$percentD%"
dd "if=$file" of=/tmp/part.flv skip=$start bs=$block count=1 iflag=skip_bytes status=none
return=
return=$(curl "$url" -A "Mozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/43.0.4" -H "Content-Range: bytes $start-$end/$size" -H "Content-Disposition: attachment" -F "files[]=@/tmp/part.flv;type=video/x-flv;filename=\"$uploadFile\""$silent)
if [[ $silent == "" ]]; then echo; fi
if [[ $return == "-1" ]]; then echo "无效地址"; exit; fi
if [[ "$return" == "${return#*size\"\:}" ]]; then
echo "上传出错,重新尝试"
else
current=${return#*size\"\:}
until [[ "$current" == "${current%,*}" ]]; do current="${current%,*}"; done
start=$current
fi
rm -rf /tmp/part.flv
done
echo "完成
投稿代码:
[vupload]$filename;$uploadFile;2;[/vupload]#p#这里填分P标题#e#"
echo -e "[vupload]$filename;$uploadFile;2;[/vupload]#p#这里填分P标题#e#\r" >>~/bili_upload_history.txt






