diff --git a/yuja-dl b/yuja-dl index 11a29d1..2f55f10 100755 --- a/yuja-dl +++ b/yuja-dl @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash # -------------------------------------- # name: yuja-dl # main: Jaidyn Ann @@ -7,9 +7,10 @@ # -------------------------------------- function download_url { - local url="$1"; local output="$2" - local id="$(echo "$url" | video_id)" + local url="$1" local sub="$(echo "$url" | subdomain)" + local id="$(video_metadata "$url" "$sub" | video_pid)" + local output="${OUTPUT:-$(get_metadata "$sub" "$id" | default_video_title)}" local captions_key="$(get_metadata "$sub" "$id" | caption_file_key)" local node_pid="$(get_metadata "$sub" "$id" | video_node_pid)" @@ -39,6 +40,15 @@ function video_node_pid { | jq -r .videoListNodePID } +function video_pid { + jq -r .videoPID +} + +function default_video_title { + jq -r .video \ + | jq -r .title +} + #--------------------------------------- function get_node_metadata { @@ -79,20 +89,27 @@ function caption_url { #--------------------------------------- -function video_id { - sed 's%.*v=%%' \ - | sed 's%&.*%%' -} - function subdomain { awk -F '.' '{print $1}' \ | sed 's%.*//%%' } +function video_uid { + sed 's%.*u=%%' \ + | sed 's%&.*%%' +} + +function video_metadata { + local url="$1"; local sub="$2" + local uid="$(echo "$url" | video_uid)" + curl -b "$COOKIES" -s \ + "https://${sub}.yuja.com/V/VideoDecryptLogicServlet?u=${uid}" +} + # INVOCATION # -------------------------------------- function usage { - echo "usage: yuja-dl URL OUTPUT [cookies.txt]" + echo "usage: yuja-dl URL [-o OUTPUT] [-c cookies.txt]" echo echo " URL is a *.yuja.com URL with a video ID argument" echo " OUTPUT is the basename for the mp4 and srt files" @@ -101,10 +118,31 @@ function usage { exit 2 } -URL="$1" -OUTPUT="$2" -COOKIES="$3" +if [ "$#" -eq 0 ]; then + usage +fi -if test -z "$URL" -o -z "$OUTPUT"; then usage; fi +OPTIND=2 +while getopts ":hc:o:" arg; do + case "$arg" in + h) + usage + ;; + c) + COOKIES="$OPTARG" + ;; + o) + OUTPUT="$OPTARG" + ;; + :) + echo "$0: Must supply an argument to -$OPTARG." + exit 1 + ;; + ?) + echo "Invalid option: -${OPTARG}" + usage + ;; + esac +done -download_url "$URL" "$OUTPUT" +download_url "$1"