diff options
-rwxr-xr-x | .local/bin/curlkg | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/.local/bin/curlkg b/.local/bin/curlkg new file mode 100755 index 00000000..d13ceebf --- /dev/null +++ b/.local/bin/curlkg @@ -0,0 +1,55 @@ +#!/bin/sh +# references: +# https://blog.csdn.net/qq_41730930/article/details/79327757 +# https://blog.csdn.net/u011112876/article/details/89634505 +# https://github.com/pystardust/ytfzf + +homepage_url='https://node.kg.qq.com/cgi/fcgi-bin/kg_ugc_get_homepage' +music_url='https://node.kg.qq.com/cgi/fcgi-bin/fcg_get_play_url' +#tab_space=$(printf '\t') +# num seems only 8 and 15 works +num=15 +tmp_json_file='/tmp/curlkg.json' + +while getopts u: opt; do + case $opt in + u) uid="$OPTARG";; + \?) exit 1;; + esac +done +# for lan lan, uid=649b9e82272a348b +# for cheng ruan, uid=64949d822c25328c +[ -z "$uid" ] && echo 'error: must provide share_uid +ex: curlkg -u 649b9e82272a348b ./' >&2 && exit 1 +shift $((OPTIND-1)) +download_dir="${1:-./}" +[ -d "$download_dir" ] || mkdir -p "$download_dir" + +get_json () +{ + curl -s -G --data-urlencode type=get_uinfo -d outCharset=utf-8 -d start="$1" -d num=$num -d share_uid="$uid" "$homepage_url" | sed -e 's/^MusicJsonCallback(//' -e 's/)$//' +} + +get_json 1 > "$tmp_json_file" +ugc_total_count=$(jq '.data.ugc_total_count' "$tmp_json_file") +# can also use while loop with i=$((i+1)) +# maybe can improve to consider if ugc_total_count is num, numx2 ... +for i in $(seq 2 $((ugc_total_count/num+1))); do + get_json "$i" >> "$tmp_json_file" +done + +jq -r '.data.ugclist[]|"'"$music_url"'?shareid=\(.shareid)\n out=\(.title)_\(.time).m4a"' "$tmp_json_file" | aria2c -d "$download_dir" --auto-file-renaming=false -i- + +## ytfzf way with curl only +#data="$(jq -r '.data.ugclist[]|[.shareid,.time,.title]|@tsv' "$tmp_json_file")" +#while IFS=$tab_space read -r shareid time title; do +# filename="$download_dir/${title}_$time.m4a" +# if ! [ -e "$filename" ]; then +# # may need parallel download and control pid for curl to be faster +# curl -L -G --data-urlencode shareid="$shareid" "$music_url" > "$filename" +# else +# echo "$filename exist" +# fi +#done <<- EOF +#$data +#EOF |