mirror of
https://gitea.invidious.io/iv-org/youtube-utils.git
synced 2024-08-15 00:53:16 +00:00
api-helper: Improve error/info printing
This commit is contained in:
parent
93f0844af3
commit
8d4d6244fb
1 changed files with 76 additions and 66 deletions
|
@ -7,54 +7,64 @@
|
|||
|
||||
print_usage()
|
||||
{
|
||||
echo "Usage: yt-api-helper -i [-c <client>] [-e <endpoint>]"
|
||||
echo "Usage: yt-api-helper -c <client> -e <endpoint> -d <data>"
|
||||
(
|
||||
echo "Usage: yt-api-helper -i [-c <client>] [-e <endpoint>]"
|
||||
echo "Usage: yt-api-helper -c <client> -e <endpoint> -d <data>"
|
||||
) >&2
|
||||
}
|
||||
|
||||
print_help()
|
||||
{
|
||||
print_usage
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -c,--client Client to use. Mandatory in non-interactive mode."
|
||||
echo " -d,--data Raw data to send to the API"
|
||||
echo " -e,--endpoint Youtube endpoint to request."
|
||||
echo " Mandatory in non-interactive mode"
|
||||
echo " -h,--help Show this help"
|
||||
echo " -i,--interactive Run in interactive mode"
|
||||
echo " -o,--output Print output to file instead of stdout"
|
||||
echo ""
|
||||
echo " --debug Show what is sent to the API"
|
||||
echo ""
|
||||
|
||||
(
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -c,--client Client to use. Mandatory in non-interactive mode."
|
||||
echo " -d,--data Raw data to send to the API"
|
||||
echo " -e,--endpoint Youtube endpoint to request."
|
||||
echo " Mandatory in non-interactive mode"
|
||||
echo " -h,--help Show this help"
|
||||
echo " -i,--interactive Run in interactive mode"
|
||||
echo " -o,--output Print output to file instead of stdout"
|
||||
echo ""
|
||||
echo " --debug Show what is sent to the API"
|
||||
echo ""
|
||||
) >&2
|
||||
|
||||
print_clients
|
||||
print_endpoints
|
||||
}
|
||||
|
||||
print_clients()
|
||||
{
|
||||
echo ""
|
||||
echo "Available clients:"
|
||||
echo " - web"
|
||||
echo " - web-embed"
|
||||
echo " - web-mobile"
|
||||
echo " - android"
|
||||
echo " - android-embed"
|
||||
echo " - apple-ios"
|
||||
echo " - tv-html5"
|
||||
echo " - tv-html5-embed"
|
||||
(
|
||||
echo ""
|
||||
echo "Available clients:"
|
||||
echo " - web"
|
||||
echo " - web-embed"
|
||||
echo " - web-mobile"
|
||||
echo " - android"
|
||||
echo " - android-embed"
|
||||
echo " - apple-ios"
|
||||
echo " - tv-html5"
|
||||
echo " - tv-html5-embed"
|
||||
) >&2
|
||||
}
|
||||
|
||||
print_endpoints()
|
||||
{
|
||||
echo ""
|
||||
echo "Available endpoints:"
|
||||
echo " - browse"
|
||||
echo " - browse-continuation"
|
||||
echo " - next"
|
||||
echo " - next-continuation"
|
||||
echo " - player"
|
||||
echo " - search"
|
||||
echo " - resolve"
|
||||
(
|
||||
echo ""
|
||||
echo "Available endpoints:"
|
||||
echo " - browse"
|
||||
echo " - browse-continuation"
|
||||
echo " - next"
|
||||
echo " - next-continuation"
|
||||
echo " - player"
|
||||
echo " - search"
|
||||
echo " - resolve"
|
||||
) >&2
|
||||
}
|
||||
|
||||
|
||||
|
@ -82,7 +92,7 @@ query_with_error()
|
|||
read -r data
|
||||
|
||||
if [ -z "$data" ]; then
|
||||
echo "Error: $error_message"
|
||||
error_msg "$error_message"
|
||||
exit 1
|
||||
else
|
||||
echo "$data"
|
||||
|
@ -105,6 +115,12 @@ is_arg()
|
|||
}
|
||||
|
||||
|
||||
error_msg()
|
||||
{
|
||||
printf "Error: %s\n" "$1" >&2
|
||||
}
|
||||
|
||||
|
||||
#
|
||||
# Parameters init
|
||||
#
|
||||
|
@ -138,7 +154,7 @@ while :; do
|
|||
shift
|
||||
|
||||
if [ $# -eq 0 ] || is_arg "$1"; then
|
||||
echo "Error: missing argument after -c/--client"
|
||||
error_msg "missing argument after -c/--client"
|
||||
print_usage
|
||||
exit 2
|
||||
fi
|
||||
|
@ -150,7 +166,7 @@ while :; do
|
|||
shift
|
||||
|
||||
if [ $# -eq 0 ] || is_arg "$1"; then
|
||||
echo "Error: missing argument after -d/--data"
|
||||
error_msg "missing argument after -d/--data"
|
||||
print_usage
|
||||
exit 2
|
||||
fi
|
||||
|
@ -162,7 +178,7 @@ while :; do
|
|||
shift
|
||||
|
||||
if [ $# -eq 0 ] || is_arg "$1"; then
|
||||
echo "Error: missing argument after -e/--endpoint"
|
||||
error_msg "missing argument after -e/--endpoint"
|
||||
print_usage
|
||||
exit 2
|
||||
fi
|
||||
|
@ -183,7 +199,7 @@ while :; do
|
|||
shift
|
||||
|
||||
if [ $# -eq 0 ] || is_arg "$1"; then
|
||||
echo "Error: missing argument after -o/--output"
|
||||
error_msg "missing argument after -o/--output"
|
||||
print_usage
|
||||
exit 2
|
||||
fi
|
||||
|
@ -196,7 +212,7 @@ while :; do
|
|||
;;
|
||||
|
||||
*)
|
||||
echo "Error: unknown argument '$1'"
|
||||
error_msg "unknown argument '$1'"
|
||||
print_usage
|
||||
exit 2
|
||||
;;
|
||||
|
@ -213,7 +229,7 @@ done
|
|||
if [ ! -z "$data" ]; then
|
||||
# Can't pass data in interactive mode
|
||||
if [ $interactive = true ]; then
|
||||
echo "Error: -d/--data can't be used with -i/--interactive"
|
||||
error_msg "-d/--data can't be used with -i/--interactive"
|
||||
print_usage
|
||||
exit 2
|
||||
fi
|
||||
|
@ -221,14 +237,14 @@ if [ ! -z "$data" ]; then
|
|||
# In non-interactive mode, we still need to pass a client
|
||||
# so the right API key is passed as a URL parameter
|
||||
if [ -z "$client_option" ]; then
|
||||
echo "Error: -c/--client is required to select an API key"
|
||||
error_msg "-c/--client is required to select an API key"
|
||||
print_usage
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# Endpoint must be given if non-interactive mode
|
||||
if [ -z "$endpoint_option" ]; then
|
||||
echo "Error: In non-interactive mode, an endpoint must be passed with -e/--endpoint"
|
||||
error_msg "In non-interactive mode, an endpoint must be passed with -e/--endpoint"
|
||||
print_usage
|
||||
exit 2
|
||||
fi
|
||||
|
@ -236,16 +252,13 @@ fi
|
|||
|
||||
if [ -z "$data" ] && [ $interactive = false ]; then
|
||||
# Data must be given if non-interactive mode
|
||||
echo "Error: In non-interactive mode, data must be passed with -d/--data"
|
||||
error_msg "In non-interactive mode, data must be passed with -d/--data"
|
||||
print_usage
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [ -z "$output" ] && [ $interactive = true ]; then
|
||||
printf "\nIt is recommended to use --output in interactive mode.\nContinue? [y/N]: "
|
||||
read -r confirm
|
||||
|
||||
if [ -z "$confirm" ]; then confirm="n"; fi
|
||||
confirm=$(query_with_default "\nIt's recommended to use --output in interactive mode.\nContinue?" "No")
|
||||
|
||||
case $confirm in
|
||||
[Yy]|[Yy][Ee][Ss]) ;;
|
||||
|
@ -261,8 +274,7 @@ fi
|
|||
if [ -z "$client_option" ]; then
|
||||
if [ $interactive = true ]; then
|
||||
print_clients
|
||||
echo ""
|
||||
client_option=$(query_with_default "Enter a client to use" "web")
|
||||
client_option=$(query_with_default "\nEnter a client to use" "web")
|
||||
else
|
||||
exit 2
|
||||
fi
|
||||
|
@ -325,7 +337,7 @@ case $client_option in
|
|||
;;
|
||||
|
||||
*)
|
||||
echo "Error: Unknown client '$client_option'"
|
||||
error_msg "Unknown client '$client_option'"
|
||||
print_clients
|
||||
exit 1
|
||||
;;
|
||||
|
@ -339,8 +351,7 @@ esac
|
|||
if [ -z "$endpoint_option" ]; then
|
||||
if [ $interactive = true ]; then
|
||||
print_endpoints
|
||||
echo ""
|
||||
endpoint_option=$(query_with_default "Enter an endpoint to request" "")
|
||||
endpoint_option=$(query_with_default "\nEnter an endpoint to request" "")
|
||||
else
|
||||
exit 2
|
||||
fi
|
||||
|
@ -407,7 +418,7 @@ case $endpoint_option in
|
|||
;;
|
||||
|
||||
*)
|
||||
echo "Error: Unknown endpoint '$endpoint_option'"
|
||||
error_msg "Unknown endpoint '$endpoint_option'"
|
||||
print_endpoints
|
||||
exit 1
|
||||
;;
|
||||
|
@ -471,6 +482,18 @@ if [ $interactive = true ]; then
|
|||
if ! [ -z "$client_extra_form_factor" ]; then
|
||||
client="${client},\"clientFormFactor\":\"${client_extra_form_factor}\""
|
||||
fi
|
||||
|
||||
|
||||
data="{\"context\":{\"client\":{$client}},$partial_data}"
|
||||
|
||||
# Basic debug
|
||||
if [ $debug = true ]; then
|
||||
if command -v jq >&2 >/dev/null; then
|
||||
printf "\nSending: %s\n\n" "$data" | jq . >&2
|
||||
else
|
||||
printf "\nSending: %s\n\n" "$data" | sed 's/{/{\n/g; s/}/\n}/g; s/,/,\n/g' >&2
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
@ -478,19 +501,6 @@ fi
|
|||
# Final command
|
||||
#
|
||||
|
||||
if [ $interactive = true ]; then
|
||||
data="{\"context\":{\"client\":{$client}},$partial_data}"
|
||||
|
||||
# Basic debug
|
||||
if [ $debug = true ]; then
|
||||
echo
|
||||
echo "sending:"
|
||||
echo "$data" | sed 's/{/{\n/g; s/}/\n}/g; s/,/,\n/g'
|
||||
echo
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
url="https://www.youtube.com/${endpoint}?key=${apikey}"
|
||||
|
||||
# Headers
|
||||
|
|
Loading…
Reference in a new issue