summaryrefslogtreecommitdiff
path: root/.local
diff options
context:
space:
mode:
authorxyz <gky44px1999@gmail.com>2021-08-31 03:02:08 -0700
committerxyz <gky44px1999@gmail.com>2021-08-31 03:02:08 -0700
commitade5aeb2c33fcd6e58fa41e32119c1c54c7ff649 (patch)
tree86be3e541046869da31d1550ce56527dd21a3838 /.local
parenta04274e018f1c724fab3db6a2aaa0b50729e8bbd (diff)
curlkg, curl+jq+aria2c quanminkge
Diffstat (limited to '.local')
-rwxr-xr-x.local/bin/curlkg55
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