#!/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
#
# 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='
' -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