#!/bin/sh

# Tento script stahuje nahrávky z archivu Českého Rozhlasu.
# Na vstupu dostáváme URL stránky s archivem daného pořadu, např.
# hledani.rozhlas.cz/iradio/?porad[]=%C4%8Cten%C3%A1%C5%99sk%C3%BD+den%C3%ADk
# hledani.rozhlas.cz/iradio/?porad[]=%C4%8Cetba+na+pokra%C4%8Dov%C3%A1n%C3%AD
# hledani.rozhlas.cz/iradio/?porad[]=Jazzofon
#
# Na těchto stránkách se vyskytují odkazy tří druhů, někdy zároveň.
# Nejprve tedy sestavujeme seznam věcí ke stáhnutí a pak stahujeme.
#
# 1. "Stáhnout", což je přímý link na mp3 soubor
# http://media.rozhlas.cz/_download/3918656.mp3
# FIXME Odkazy tvaru http://media.rozhlas.cz/_download/3773605.mp3 timeoutují
# https://vltava.rozhlas.cz/sites/default/files/audios/02364303.mp3
# https://dvojka.rozhlas.cz/sites/default/files/audios/39525072cb831bce59d727a608272584.mp3?uuid=5b8e29ba55bae
# Takové linky stačí z dané stránky vygrepovat.
#
# 2. "Stream", mnohdy nezobrazený odkaz vedoucí na
# http://www2.rozhlas.cz/stream/3846261.mp3
# ze kterého si můžeme rozmyslet
# http://media.rozhlas.cz/_audio/3846261.mp3 resp.
# http://media.rozhlas.cz/_download/3846261.mp3
#
# 3. "Přehrát" vedoucí na stránku s playerem
# http://prehravac.rozhlas.cz/audio/3918656
# Ve zdrojáku této player stránky je napsáno
# <div id="player-track" ... data-id="3918656" ...>
# přičemž "data-id" je pak ten správný odkaz na
# http://media.rozhlas.cz/_audio/3918656.mp3 resp.
# http://media.rozhlas.cz/_download/3918656.mp3
# Zároveň je ale 'data-id' stejné jako v linku,
# takže na tuto player stránku vůbec nechodíme.
#
# 4. "Přehrát" vedoucí na stránku s _jiným_ playerem, např.
# http://vltava.rozhlas.cz/jazzstory-jakuba-dolezala-7057448?player=on
# což je stránka s embedded přehrávadlem, ve které jsou odkazy tvaru
# vltava.rozhlas.cz/sites/default/files/8becc47a6803c627e7290c531aa36d2d.mp3
# https://vltava.rozhlas.cz/sites/default/files/audios/03012668.mp3
# Pro některé pořady je tam jeden takový odkaz (poslední vysílání Jazzofonu),
# pro jiné (např. Četba na pokračování) jsou tam odkazy na všechny díly:
# https://vltava.rozhlas.cz/karel-schulz-kamen-a-bolest-6934108?dil=18
# Seznam těchto dílů k přehrání může být menší, než je přehled dílů
# na iRadio stránce, kde jsou odkazy "Přehrát" i na díly, které už nejsou.

err() {
	echo "$@" >&2
}

fatal() {
	err "$@"
	exit 1
}

usage() {
	fatal "usage: $0 url [dir]"
}

test $# -ge 1 || usage
test $# -ge 2 && { mkdir -p "$2" && cd "$2" || fatal Cannot cd to $2 ; }

PAGE=`mktemp`
LINK=`mktemp`
LIST=`mktemp`
#trap "rm -f $PAGE $LINK $LIST" EXIT
#trap "exit 1" INT TERM

FTP="ftp -i -M -n -r 10 -U Mozilla -S dont -V -w 30"
$FTP -o $PAGE "$1" || fatal Cannot download "$1"

#awk -F'"' '/_download/   {print $4}' < $PAGE >> $LIST	# 1. "Stáhnout"
awk -F'"' '/audios/      {print $4}' < $PAGE >> $LIST	# 1. "Stáhnout"
awk -F'"' '/stream.*mp3/ {print $4}' < $PAGE |		# 2. "Stream"
#awk -F/   '{print "http://media.rozhlas.cz/_download/" $NF}' >> $LIST
awk -F'"' '/prehravac.*audio/ {print $4}' < $PAGE |	# 3. "Přehrát"
#awk -F/   '{print "http://media.rozhlas.cz/_download/" $NF ".mp3"}' >> $LIST
awk -F'"' '/player=on/ {print $2}' < $PAGE > $LINK	# 4. "Přehrát"

while read link ; do
	link=${link%%#*} # Odkazy tvaru
	# .../ingmar-bergman-dobra-vule-7561618#dil=11?player=on#player
	# většinou hlásí 404 not found, zato takhle OK.
	$FTP -o $PAGE $link || { err Cannot download "$link" ; continue ; }
	# FIXME $PAGE bychom meli znovu progrepovat na vsechny typy.
	# Vsechny ty odkazy jsou na jendom radku, proto RS=
	grep -F '.mp3?uuid' $PAGE |
	awk -v RS='<li>' -F 'uuid' '/uuid/ {print$1}' |
	grep -Fv expired | cut -d'?' -f1 | cut -d'"' -f2 >> $LIST
	# Mezi již nedostupnými pořady se vyskytují i filenames jako
	# "vedral.mp3._ihf4u2h6d5j9fndn2fj...", takže mp3 v linku ještě
	# neznamená, že je to mp3jka: třeba je "expired".
done < $LINK

test -s $LIST || fatal No mp3 links
sort -u $LIST |  xargs -n1 $FTP
