丢在这里了
所有文件保存在/tmp/koyomi
运行时需要密钥,可通过抓包客户端保存
https://lambda.ap-northeast-1.amazonaws.com/2015-03-31/functions/koyomimonogatari_app_auth_get/invocations
请求,保存json为/tmp/koyomi/key,并在脚本中指定HTTPS代理 $proxy ,即可正常运作
koyomi为批量下载一整集视频,自动选择最高清晰度
koyomi-raw为下载单个文件
#!/bin/sh
proxy="45.32.251.178:8888"
function downitem(){
keydata=$(cat /tmp/koyomi/key)
k="${keydata#*k\"\:\"}"; until [[ "$k" == "${k%\"*}" ]]; do k="${k%\"*}"; done
p="${keydata#*p\"\:\"}"; until [[ "$p" == "${p%\"*}" ]]; do p="${p%\"*}"; done
s="${keydata#*s\"\:\"}"; until [[ "$s" == "${s%\"*}" ]]; do s="${s%\"*}"; done
cookie="Cookie: CloudFront-Key-Pair-Id=$k; CloudFront-Policy=$p; CloudFront-Signature=$s"
s=; if [[ $2 == "s" ]]; then s="-s "; fi
if [[ $2 == "c" ]]; then s="-C - "; fi
mkdir -p /tmp/koyomi/${1%/*}
done=no
while [[ $done == no ]]; do
curl --connect-timeout 30 -x "$proxy" "https://d3249smwmt8hpy.cloudfront.net/$1" -H "$cookie" -o /tmp/koyomi/$1 $s
errno=$?
if [[ $errno == 6 || $errno == 7 ]]; then echo "无网络连接"; exit; fi
if [[ $errno == 28 || $errno == 56 ]]; then echo "连接超时,重试"; else if [[ $errno != 18 ]]; then done=done; fi; fi
done
if [[ -e /tmp/koyomi/$1 ]]; then
if [[ $(grep -F "AccessDenied" /tmp/koyomi/$1) != "" ]]; then
echo "密钥已失效"
rm -f /tmp/koyomi/key
exit
fi; fi
}
if [[ $1 == "" ]]; then
echo "请输入集数"
exit
fi
if [[ ! -e /tmp/koyomi/key ]]; then
echo "密钥文件缺失"
exit
fi
basepath=movie/koyomi_$1
#basepath=movie/$1
echo -n "获取信息..."
downitem "$basepath/index.m3u8" s
if [[ $(grep -F "NoSuchKey" /tmp/koyomi/$basepath/index.m3u8) != "" ]]; then
echo "该集不存在"
exit
fi
echo "完成"
info=$(cat /tmp/koyomi/$basepath/index.m3u8)
br=0k
bw=0
until [[ "$info" == "${info%.m3u8*}" ]];do
info=${info%.m3u8*}
curbw=$(echo -n "$info" | tail -n 2)
curbr=$(echo -n "$curbw" | tail -n 1)
curbw=${curbw#*BANDWIDTH=}; until [[ "$curbw" == "${curbw%,*}" ]];do curbw=${curbw%,*}; done
curbr=${curbr%bps/*}
echo "$br $bw $curbr $curbw"
if (( $curbw > $bw )); then bw=$curbw; br=$curbr; fi
done
filepath=$basepath/${br}bps
echo -n "${br}bps 获取分段..."
downitem "$filepath/movie_.m3u8" s
seginfo=$(cat /tmp/koyomi/$filepath/movie_.m3u8)
segs=${seginfo%.ts*}
until [[ "$segs" == "${segs#*movie_}" ]];do segs=${segs#*movie_}; done
until [[ "$segs" == "${segs#0}" ]];do segs=${segs#0}; done
let segs++
echo "共$segs分段"
downitem $filepath/vdata
cur=0
while (( $cur < $segs )); do
if (( $cur < 1000 )); then file="movie_00$cur.ts"; fi
if (( $cur < 100 )); then file="movie_000$cur.ts"; fi
if (( $cur < 10 )); then file="movie_0000$cur.ts"; fi
echo -e "\r\n\r-----------------------\n$file"
downitem $filepath/$file c
if [[ ! -e /tmp/koyomi/$filepath/$file ]]; then let cur--; fi
let cur++
done
#!/bin/sh
proxy="45.32.251.178:8888"
function downitem(){
keydata=$(cat /tmp/koyomi/key)
k="${keydata#*k\"\:\"}"; until [[ "$k" == "${k%\"*}" ]]; do k="${k%\"*}"; done
p="${keydata#*p\"\:\"}"; until [[ "$p" == "${p%\"*}" ]]; do p="${p%\"*}"; done
s="${keydata#*s\"\:\"}"; until [[ "$s" == "${s%\"*}" ]]; do s="${s%\"*}"; done
cookie="Cookie: CloudFront-Key-Pair-Id=$k; CloudFront-Policy=$p; CloudFront-Signature=$s"
s=; if [[ $2 == "s" ]]; then s="-s "; fi
if [[ $2 == "c" ]]; then s="-C - "; fi
mkdir -p /tmp/koyomi/${1%/*}
done=no
while [[ $done == no ]]; do
curl -v -x "$proxy" "https://d3249smwmt8hpy.cloudfront.net/$1" -H "$cookie" -o /tmp/koyomi/$1 $s
errno=$?
if [[ $errno == 6 || $errno == 7 ]]; then echo "无网络连接"; exit; fi
if [[ $errno == 28 || $errno == 56 ]]; then echo "连接超时,重试"; else done=done; fi
done
if [[ -e /tmp/koyomi/$1 ]]; then
if [[ $(grep -F "AccessDenied" /tmp/koyomi/$1) != "" ]]; then
echo "密钥已失效"
rm -f /tmp/koyomi/key
exit
fi; fi
}
if [[ $1 == "" ]]; then
echo "请输入集数"
exit
fi
if [[ ! -e /tmp/koyomi/key ]]; then
echo "密钥文件缺失"
exit
fi
downitem $1
if [[ $(grep -F "NoSuchKey" /tmp/koyomi/$1) != "" ]]; then
echo "文件不存在"
rm /tmp/koyomi/$1
exit
fi