#/bin/bash DOWNLOAD_DIR=/media/nas/video/series YOUTUBE_DL="/usr/bin/youtube-dl" #YOUTUBE_DL="python3 /usr/local/bin/youtube-dl" #KEEP_DAYS=40 KEEP_DAYS=100 ARGS=-qwc OPTIND=1 # Reset is necessary if getopts was used previously while getopts ":u:d" opt; do case "${opt}" in d) ARGS=-vwc set -x ;; u) url="${OPTARG}" ;; h) echo "Usage: ${0} <-d>" exit 1 ;; esac done shift "$((OPTIND-1))" # Shift off the options and optional --. # Formats: # python3 /usr/local/bin/youtube-dl -F http://www.cc.com/shows/the-daily-show-with-trevor-noah/full-episodes/ # [info] Available formats for b2a5ae64-3795-4914-b3a7-644eed83372f: # format code extension resolution note # 200 mp4 384x216 # 400 mp4 384x216 # 750 mp4 512x288 # 1200 mp4 640x360 # 1700 mp4 768x432 # 2200 mp4 960x540 # 3500 mp4 1280x720 (best) #FORMAT="vhttp-750" #FORMAT="rtmp-750" #FORMAT="rtmp-3500/rtmp2200" function download_show { url="$1" show="$2" mkdir -p "${DOWNLOAD_DIR}/${show}" # Get a chosen video format for each site if [[ "${url}" =~ cc.com ]]; then FORMAT=1200 elif [[ "${url}" =~ cbs.com ]]; then FORMAT="rtmp-496-0" fi # Try and download twice (resume if partially downloaded) for i in 1 2; do ${YOUTUBE_DL} ${ARGS} -f ${FORMAT} \ -o "${DOWNLOAD_DIR}/${show}/%(upload_date)s/%(title)s-%(id)s.%(ext)s" \ --download-archive "${DOWNLOAD_DIR}/${show}.archive" \ ${url} # Wait 10 minutes before trying again #sleep 600 done # Move files from ${DOWNLOAD_DIR}/The Daily Show/NA/ to ${DOWNLOAD_DIR}/The Daily Show/$date while IFS= read -r -d '' file; do dir=$( stat -c %y "$file" | sed -e 's/\([0-9]*\)-\([0-9]*\)-\([0-9]*\).*/\1\2\3/' ); mkdir -p "${DOWNLOAD_DIR}/${show}/${dir}/" # Keep a copy in /NA/ to avoid re-downloading cp -n "$file" "${DOWNLOAD_DIR}/${show}/${dir}/" done < <(find "${DOWNLOAD_DIR}/${show}/NA" -type f -print0) # Remove old copies in /NA/, since we don't need to # worry about re-downloading them any more find "${DOWNLOAD_DIR}/${show}/NA/" -mindepth 1 -mtime +7 -delete # Remove old shows find "${DOWNLOAD_DIR}/${show}/" -mindepth 1 -mtime +${KEEP_DAYS} -delete } if [[ -n ${url} ]]; then if [[ "${url}" =~ cc.com ]]; then show="The Daily Show" elif [[ "${url}" =~ cbs.com ]]; then show="The Late Show" fi download_show "${url}" "${show}" else for show in "The Daily Show" "The Late Show"; do url= if [[ "${show}" =~ Daily ]]; then url=http://www.cc.com/shows/the-daily-show-with-trevor-noah/full-episodes/ elif [[ "${show}" =~ Late ]]; then # Get URL from http://www.cbs.com/shows/the-late-show-with-stephen-colbert/video/ # Requires Unotelly DNS: # 197.242.94.51 # 197.189.212.164 url=$( wget -qO- http://www.cbs.com/shows/the-late-show-with-stephen-colbert/video/ | grep -E "/video/[^/]+/" | grep '"url":' | perl -pe 's/.*?"url":"(.*?)".*/$1/ims' | head -1 ) fi download_show "${url}" "${show}" done fi