#!/bin/bash

VERSION='2015/07/08 23:55:51 UTC'

exitproc1(){ rm -rf "${TMPFILE5}" "${TMPFILE2}" "${TMPFILE7}";}
exitproc2(){ rm -rf "${TMPFILE6}";}

count_depth()
{
	local count=1
	local src=${1}

	while [ "${src}" != "" ]
	do
		testline=${src%%/*}  # 最初の/より前の文字列を取り出す   
		if test "${testline}" != "${src}"; then
			src=${src#*/}  # 最初の/より後ろの文字列を取り出す   
		else
			echo  ${count}
			return
		fi
		count=$((count+1))
	done
}

downfiles()
{
# downfiles [-x] [-nr] [targetdir] rest-of-url
#
# eg. downfiles     targetdir rest-of-url
# eg. downfiles -nr targetdir rest-of-url
# eg. downfiles -x            rest-of-url (similar to wget -x)
#
MAKEDIRS=false
NORMV=false

while test -n "${1}"
do
case "${1}" in
-x)
MAKEDIRS=true # ダウンロード元のディレクトリ構造を再現する
NORMV=true # 削除処理をおこなわない
shift;;
-nr|--noremove)
NORMV=true # 削除処理をおこなわない
shift;;
*)break;;
esac
done

if ${MAKEDIRS}; then
ADDURL=${1}
else
TARGET=${1}
ADDURL=${2}
mkdir -p ${TARGET}
cd ${TARGET} || exit 1
depth=$(count_depth "${TARGET}")
fi
URL=${BASEURL}${ADDURL}

protocol=${URL%%//*}  # 最初の//より前を取り出す
urlrest=${URL#*//}  # 最初の//より後ろを取り出す
urltop=${urlrest%%/*}  # 最初の/より前を取り出す
urltop=${protocol}//${urltop}
TMPFILE1="`mktemp`"
TMPFILE2="`mktemp`"
TMPFILE7="`mktemp`"
numfiles=0
${WGET} -O "${TMPFILE1}" ${URL}
if test $? -eq 0; then
trap '
exitproc2
exit 1
' 2 15

# ダウンロード元のxmlファイルを加工して、
# ダウンロード済みのファイルやその説明を一覧できるhtmlファイルを作成する
# xsltproc libxml-validate-perl を使用
#XMLCHECK=$(validxml ${TMPFILE1} 2>/dev/null|tail -1|cut -b1-2)
#if test "${XMLCHECK}" == "ok"; then # xmlと確認できた場合
if (head -1 ${TMPFILE1}|grep -q "xml version") then
	testline=${URL%*\.xml}  # 拡張子がxmlか確認
	if test "${URL}" != "${testline}" ; then  # 確認成功の場合
		outfile=${testline##*/}.html # 元のファイル名を活かす
	else
		outfile=index.html # 今のところラジカントロプス専用
	fi
	xsltproc -o  "${outfile}" "${DOCUMENTROOT}/rss.xslt" ${TMPFILE1}
	if ${MAKEDIRS}; then
	perlcmd='s/http:\/\/[-_.!~*'\''()a-zA-Z0-9;?:@&=+$,%#]+\/([^>]+)\.mp3/$1\.mp3/g'
	else
	perlcmd='s/http:\/\/[-_.!~*'\''()a-zA-Z0-9;\/?:@&=+$,%#]+\/([^\/]+)\.mp3/$1\.mp3/g'
	fi
	perl -i -pe $perlcmd "${outfile}"
	perlcmd='s/<img[\s]+src([^<>]+)>//g'
	perl -i -pe $perlcmd "${outfile}"
fi

TMPFILE6="`mktemp`"
cat ${TMPFILE1}|nkf -e -Lu > "${TMPFILE6}"
perlscript="$(echo "my \$file=\"${TMPFILE6}\";open (SFH, \"<\$file\"); \
undef $/;my \$Src=<SFH>;close(SFH);\$Src=~s/<!--.*?-->//sg; \
\$Src=~s/a\ href\=/a\ href\=\\n/isg; \
\$Src=~s/a\s+.+href\=/a\ href\=\\n/ig; \
\$Src=~s/a.+\s+href\=/a\ href\=\\n/ig; print \$Src;")"
perlcmdline="$(echo perl -e \'${perlscript}\')"
eval ${perlcmdline} > "${TMPFILE1}"
rm "${TMPFILE6}"
trap 1 2 15
grep \.${TARGETEXT} "${TMPFILE1}">"${TMPFILE2}"
rm "${TMPFILE1}"
while read -r line
do
testline=${line#*url=}  # 最初のurlより後ろの文字列
if test "${line}" != "${testline}" ; then
	line=${testline}  # url=が含まれている場合
else
	line=${line#*href}  # 最初のhrefより後ろの文字列を取り出す
fi
line=${line#*\"}  # 最初の"より後ろの文字列を取り出す
line=${line%%\"*}  # 最初の"より前の文字列を取り出す   
testline=${line%*\.${TARGETEXT}}  # 指定拡張子の切取を試みる
if test "${line}" != "${testline}" ; then  # 切取に成功した場合
	testline=${line%*//*}  # //が含まれているかチェック
	if test "${line}" != "${testline}" ; then
		TARGETURL=${line}  # //が含まれている場合
	else
		if test "x${line:0:1}" = "x/"; then
		# 絶対パスで指定されている場合
		TARGETURL=${urltop}${line} 
		else
		# 相対パスで指定されている場合
		urlrest=${URL%/*}  # 最後の/より前の文字列を取り出す
		TARGETURL=${urlrest}/${line}
		fi
	fi

	TARGETFILE=${TARGETURL##*/}
	numfiles=$((numfiles+1))
	! ${NORMV} && echo "${TARGETFILE}" >> "${TMPFILE7}"

if test ${numfiles} -gt ${MAXFILES}; then
	break # 最大でもMAXFILESまでしかダウンロードしない
fi

relativepath=

if $MAKEDIRS; then

	urlrest=${TARGETURL#*//}  # 最初の//より後ろの文字列を取り出す
	urlrest=${urlrest#*/}  # 最初の/より後ろの文字列を取り出す   
	testline=${urlrest%/*}  # 最後の/より前の文字列を取り出す   

	if test "$testline}" != "${urlrest}"; then
	# 中間のパスが含まれることが確認できた場合
		relativepath=${testline}

		mkdir -p "${relativepath}"
		TARGETFILE="${relativepath}/${TARGETFILE}"
		relativepath="${relativepath}/"

	else
	# 中間のパスが含まれない場合
		: # 無視(許容)
	fi

fi

	if !(test -e "${TARGETFILE}") then
		currentdir="`pwd`"
		trap '
		exitproc1
		exit 1
		' 2 15
		TMPFILE5="`mktemp "${currentdir}/${relativepath}tmp.XXXXXXXXXX"`"
		${WGET} -N -O "${TMPFILE5}" "${TARGETURL}"
		test $? -ne 0 && test -e "${TMPFILE5}" && rm "${TMPFILE5}"
		test -e "${TMPFILE5}" && ! test -s "${TMPFILE5}" && rm "${TMPFILE5}"
		test -e "${TMPFILE5}" && mv "${TMPFILE5}" "${TARGETFILE}"
		trap 1 2 15
		if test -e "${TARGETFILE}" && test "${TARGETEXT}" = "mp3"; then
			chmod go+r "${TARGETFILE}"
			# Complete.
#			led-green on
			echo "`pwd`/${TARGETFILE}" >> "${FILELST}"
#			DISPLAY=:0.0 zenity --info --title "download_radio" \
#			--text "Complete:${TARGETFILE}" &
		fi
	elif test "${TARGETEXT}" = "mp3"; then
		echo "${TARGETFILE} already exists"
	else
#		${WGET} -N "${TARGETURL}"
#		test -e "${TARGETFILE}" && ! test -s "${TARGETFILE}" && rm "${TARGETFILE}"
		echo "Error, can't handle ${TARGETEXT}"
	fi
#	if test -e "${TARGETFILE}" && test "${TARGETEXT}" = "asx"; then
#		size=$(stat -c %s "${TARGETFILE}")
#		if test ${size} -ge 1000; then
#			echo "Not an asx file ${TARGETFILE}, removing..."
#			rm "${TARGETFILE}"
#		fi
#	fi
fi
done<"${TMPFILE2}"
else
rm "${TMPFILE1}"
fi
rm "${TMPFILE2}"

if ! $NORMV; then
# ここには簡易的な、古ファイル削除処理を記述しています。
#  -xオプションもしくは-nrオプションを指定した場合を除き、ここで削除処理が試みられます。
# 古いファイルをいつまでも残したい場合は、-nrオプションを指定するか、MAXFILESに大きな値を
# 設定して下さい。
#ls -Atr *.${TARGETEXT}|tail -${MAXFILES}>"${TMPLST}" && ls *.${TARGETEXT}| \
ls -Atr *.${TARGETEXT}|tail -${MAXFILES}>"${TMPLST}"
cat<"${TMPFILE7}">>"${TMPLST}"
cat "${TMPLST}"|sort|uniq>"${TMPFILE7}"
cat "${TMPFILE7}">"${TMPLST}"
ls *.${TARGETEXT}| \
while read i
do
if !(grep -q "$i"<"${TMPLST}") then
rm "$i"
fi
done
rm "${TMPLST}"
fi
rm "${TMPFILE7}"

if ! $MAKEDIRS; then
for ((i=$depth;i>0;i--))
do
	cd ..
done
fi
}

# 二重起動チェック
SHELLNAME=${0##*/}  # 最後の/より後ろを取り出す
SHELLBASE=${SHELLNAME%\.*}
SHELLEXT=${SHELLNAME##*\.}
test "${SHELLBASE}" != "${SHELLEXT}" && SHELLEXT=".${SHELLEXT}"
PROCESSNUM=$(ps aux|grep -v "sh -c "|grep "${SHELLBASE}"|grep "${SHELLEXT}"|wc -l)
if test ${PROCESSNUM} -ge 3; then
echo "${SHELLNAME} now running."
exit
fi

PATH=${PATH}:/usr/local/bin
WGET="wget -t 1 -T 15"
DOCUMENTROOT=/home/disklessfun/Documents
FILELST="${DOCUMENTROOT}/Complete.lst"
TMPFILELST="${DOCUMENTROOT}/tmp.Complete.lst"
#LSTMAX=100
LSTMAX=150
LOGDIR="${DOCUMENTROOT}/01_logs"
mkdir -p "${LOGDIR}"

# 文化放送用
LANG=C
BASEDIR="${DOCUMENTROOT}/BunkaHousou" # 必ず絶対パス
BASEURL="http://www.joqr.co.jp/blog/"
TARGETEXT=mp3
MAXFILES=1000
mkdir -p "${BASEDIR}"
cd "${BASEDIR}" || exit 1
TMPLST="/tmp/`basename "${0}" .sh`-maintenance$$.lst"

MAXFILES=10 # 2013.09.13時点の同時公開ファイル数
downfiles golden-opening "golden-opening/index.xml"
downfiles main           "main/index.xml"
downfiles shinshi        "shinshi/index.xml"
MAXFILES=2 # 2013.09.13時点の同時公開ファイル数
downfiles kuniryu        "kuniryu/index.xml"
MAXFILES=14 # 2013.09.13時点の同時公開ファイル数
downfiles green_pod      "green_pod/index.xml"
BASEURL="http://www.joqr.co.jp/"
MAXFILES=2 # 2013.09.13時点の同時公開ファイル数
downfiles takeda_pod     "takeda_pod/index.xml" # 武田鉄矢・今朝の三枚おろし


# TBS用
LANG=C
BASEDIR="${DOCUMENTROOT}/TBS" # 必ず絶対パス
BASEURL="http://www.tbsradio.jp/"
TARGETEXT=mp3
MAXFILES=1000
mkdir -p "${BASEDIR}"
cd "${BASEDIR}" || exit 1
TMPLST="/tmp/`basename "${0}" .sh`-maintenance$$.lst"

MAXFILES=13 # 2013.09.13時点の同時公開ファイル数
downfiles tama954     "tama954/index.xml"
MAXFILES=25 # 2013.09.13時点の同時公開ファイル数
downfiles daycatch    "dc/rss.xml"
MAXFILES=5 # 2013.09.13時点の同時公開ファイル数
downfiles horio       "horio/index.xml"
MAXFILES=15 # MAXFILES=37 # 2013.09.13時点の同時公開ファイル数
downfiles -nr ss954   "ss954/index.xml"
MAXFILES=5 # 2013.09.13時点の同時公開ファイル数
downfiles kume954     "kume954/rss.xml"
# JUNK 山里亮太の不毛な議論
MAXFILES=1 # 2013.09.13時点の同時公開ファイル数
downfiles fumou       "fumou/index.xml"
# 高見沢俊彦のロックばん外伝 高見沢俊彦SPECIAL
MAXFILES=1 # MAXFILES=5 # 2013.09.13時点の同時公開ファイル数
downfiles takamizawa  "takamizawa/index.xml"


# ニッポン放送用
LANG=C
BASEDIR="${DOCUMENTROOT}/NipponHousou" # 必ず絶対パス
BASEURL="http://podcast.1242.com/"
TARGETEXT=mp3
MAXFILES=1000
mkdir -p "${BASEDIR}"
cd "${BASEDIR}" || exit 1
TMPLST="/tmp/`basename "${0}" .sh`-maintenance$$.lst"

# 高田文夫のラジオビバリー昼ズPodcast
MAXFILES=3 # MAXFILES=554 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles takada      "takada/index.xml"
# ますおか「裏」ちゃんねる
MAXFILES=3 # MAXFILES=325 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles masuoka     "masuoka/index.xml"
# 角田龍平のオールナイトニッポンポッドキャスト
MAXFILES=3 # MAXFILES=143 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles bengoshi    "bengoshi/index.xml"
# 上柳昌彦　ごごばん！Podcast
MAXFILES=3 # MAXFILES=44 # 2013.09.13時点の同時公開ファイル数
downfiles gogoban     "gogoban/index.xml"
# がん検診にGO!GO!オトナの健康ラジオ
MAXFILES=3 # MAXFILES=13 # 2013.09.13時点の同時公開ファイル数
downfiles otona       "otona/index.xml"
# 谷村新司・まぁるい日曜日ポッドキャスト
MAXFILES=3 # MAXFILES=152 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles tanimura    "tanimura/index.xml"
# ザ・ボイス
MAXFILES=5 # MAXFILES=361 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles voice       "voice/index.xml"


# ラジオ日本用
LANG=C
BASEDIR="${DOCUMENTROOT}/RadioNippon" # 必ず絶対パス
BASEURL="http://feeds.feedburner.com/"
TARGETEXT=mp3
MAXFILES=1000
mkdir -p "${BASEDIR}"
cd "${BASEDIR}" || exit 1
TMPLST="/tmp/`basename "${0}" .sh`-maintenance$$.lst"

# ラジカントロプス2.0ポッドキャスト
#MAXFILES=51 # 2013.09.13時点の同時公開ファイル数、GBクラス
MAXFILES=3
#downfiles -nr radicanthropus  "radican?format=xml"


# JFN用
LANG=C
BASEDIR="${DOCUMENTROOT}/JFN" # 必ず絶対パス
BASEURL="http://www2.jfn.co.jp/"
TARGETEXT=mp3
MAXFILES=1000
mkdir -p "${BASEDIR}"
cd "${BASEDIR}" || exit 1
TMPLST="/tmp/`basename "${0}" .sh`-maintenance$$.lst"

## ON THE WAY JOURNAL
# MAXFILES=390 # 2013.09.13時点の同時公開ファイル数、GBクラス
#downfiles -x                    "owj/podcast_owj.xml"
MAXFILES=390
# サードプレイス
downfiles -x                    "place/podcast_place.xml"
# SUNDAY FLICKERS
MAXFILES=150 # MAXFILES=534 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles poddata/sunday        "sunday/podcast_sunday.xml"
# 日曜日の朝刊・世界を笑え！
MAXFILES=1 # MAXFILES=9 # 2013.09.13時点の同時公開ファイル数
downfiles poddata/people/news   "people/news/podcast_news.xml"
# 編集長！お時間です。
MAXFILES=1 # MAXFILES=35 # 2013.09.13時点の同時公開ファイル数
downfiles poddata/people/editor "people/editor/podcast_editor.xml"
# D.N.A.ロックの殿堂 ～増子直純（怒髪天）～
MAXFILES=1 # MAXFILES=144 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles poddata/dna/mashiko   "dna/podcast_dna2.xml"
# D.N.A.ロックの殿堂 ～吉川晃司 Samurai Rock～
MAXFILES=1 # MAXFILES=41 # 2013.09.13時点の同時公開ファイル数
downfiles poddata/dna/k2        "dna/podcast_dna4.xml"
# ニッポン長寿企業
MAXFILES=1 # MAXFILES=116 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles poddata/com           "company/pod/podcast_com.xml"
# Sound Library～世界にひとつだけの本～
MAXFILES=2 # MAXFILES=170 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles poddata/library       "library/pod/podcast_sl.xml"
# 週刊サッカーリポート　J's SPIRIT
MAXFILES=1 # MAXFILES=15 # 2013.09.13時点の同時公開ファイル数
downfiles poddata/js            "blog/js/pod/podcast_js.xml"

BASEURL="http://www.jfn.co.jp/"
# ラジオ版　学問のススメ
MAXFILES=1 # MAXFILES=200 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles -x "susume/podcast_susume.xml" # 2010年途中以降全部
MAXFILES=1 # MAXFILES=52 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles -nr poddata/susume "susume/y2010/"
MAXFILES=1 # MAXFILES=52 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles -nr poddata/susume "susume/y2009/"
MAXFILES=3 # MAXFILES=105 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles -nr poddata/susume "susume/y2008/"
MAXFILES=3 # MAXFILES=134 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles -nr poddata/susume "susume/y2007/"
MAXFILES=3 # MAXFILES=92 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles -nr poddata/susume "susume/y2006/"

BASEURL="http://nakikusu.jfn.co.jp/"
# 泣きたいときのクスリ 2007
MAXFILES=1 # MAXFILES=22 # 2013.09.13時点の同時公開ファイル数
downfiles -nr  nakikusu07 "radio/podcasting/podcast_nakikusu07.xml"
# 泣きたいときのクスリ 2008
MAXFILES=1 # MAXFILES=35 # 2013.09.13時点の同時公開ファイル数
downfiles -nr  nakikusu08 "radio/podcasting/podcast_nakikusu08.xml"


# RKB毎日放送用
LANG=C
BASEDIR="${DOCUMENTROOT}/RKB" # 必ず絶対パス
BASEURL="http://rkbr.jp/podcast/"
TARGETEXT=mp3
MAXFILES=1000
mkdir -p "${BASEDIR}"
cd "${BASEDIR}" || exit 1
TMPLST="/tmp/`basename "${0}" .sh`-maintenance$$.lst"

MAXFILES=20 # MAXFILES=56
downfiles -nr insight     "insight.xml"  # インサイト


# MBS毎日放送用
LANG=C
BASEDIR="${DOCUMENTROOT}/MBS" # 必ず絶対パス
BASEURL="http://www.mbs1179.com/"
TARGETEXT=mp3
MAXFILES=1000
mkdir -p "${BASEDIR}"
cd "${BASEDIR}" || exit 1
TMPLST="/tmp/`basename "${0}" .sh`-maintenance$$.lst"

MAXFILES=3 # MAXFILES=206 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles 117_p       "117_p/rss.xml"
MAXFILES=3 # MAXFILES=103 # 2013.09.13時点の同時公開ファイル数、GBクラス
downfiles hog         "hog/rss.xml"


# NHK
LANG=C
BASEDIR="${DOCUMENTROOT}/NHK" # 必ず絶対パス
BASEURL="http://www.nhk.or.jp/"
TARGETEXT=mp3
MAXFILES=1000
mkdir -p "${BASEDIR}"
cd "${BASEDIR}" || exit 1
TMPLST="/tmp/`basename "${0}" .sh`-maintenance$$.lst"

# すっぴん！
MAXFILES=1 # 2013.09.13時点の同時公開ファイル数
downfiles -nr suppin_tsuda    "suppin/podcast/tsuda.xml"    # 津田大介
downfiles suppin_kosodate "suppin/podcast/kosodate.xml" # ダイヤモンド☆ユカイ
downfiles suppin_kawashima "suppin/podcast/kawashima.xml"   # 川島明
downfiles suppin_kokugo   "suppin/podcast/kokugo.xml"   # 高橋源一郎
#downfiles suppin_kikaku   "suppin/podcast/personality.xml"

MAXFILES=5 # 2013.09.13時点の同時公開ファイル数
downfiles r-asa_business "r-asa/podcast/business.xml"  # ラジオあさいちばん「ビジネス展望」
downfiles r-asa_life     "r-asa/podcast/life.xml"      # ラジオあさいちばん「健康ライフ」
downfiles r-news         "r-news/podcast/nhkradionews.xml" # NHKラジオニュース
# English News - NHK WORLD RADIO JAPAN
MAXFILES=1 # 2013.09.13時点の同時公開ファイル数
downfiles radio-japan    "rj/podcast/rss/english.xml"
# 怒髪天 増子直純兄ィのロックな労働相談室-相談コーナー
MAXFILES=5 # 2014.04.20時点の同時公開ファイル数
#downfiles masuko         "masuko/rock1.xml"


test ! -e "${FILELST}" && exit 0

# FILELSTの行数をLSTMAX以下に保つ
LSTNUM=$(wc -l<"${FILELST}")
test ${LSTNUM} -le ${LSTMAX} && exit 0
tail -${LSTMAX} "${FILELST}" > "${TMPFILELST}"
diff -u "${FILELST}" "${TMPFILELST}"
set -x
mv "${TMPFILELST}" "${FILELST}"
