Долго слушая подкаст «Сиськи-Письки Шоу» я понял что у меня встала работа! :-)
Подкаст был настолько увлекательным, что я не мог оторваться. И тут я решил, что неплохо бы его слушать в метро. Так, у меня есть КПК, который умеет подключаться к копьютеру как флешка.
Отсюда у меня появилось 2 задачи:
Решаем первую задачу. Нужен скрипт, который скачает все подкасты со страницы на основе URL. Хорошей функцией будет остановка в случае если подкаст уже присутствует на носителе (для скачивания только новых).
В ходе работы у меня получился такой скрипт:
Подкаст был настолько увлекательным, что я не мог оторваться. И тут я решил, что неплохо бы его слушать в метро. Так, у меня есть КПК, который умеет подключаться к копьютеру как флешка.
Отсюда у меня появилось 2 задачи:
- Закачать оставшиеся подкасты на КПК
- Докачивать подкасты на КПК по мере выхода
За работу!
Для программистов нет нерешаемых проблем.Решаем первую задачу. Нужен скрипт, который скачает все подкасты со страницы на основе URL. Хорошей функцией будет остановка в случае если подкаст уже присутствует на носителе (для скачивания только новых).
В ходе работы у меня получился такой скрипт:
#!/bin/bash
# Как пользоваться скриптом
function usage
{
echo 'Usage: rpod-get.sh -u -f <dest. folder> [-s | -d]'
echo ' -u url'
echo ' -f folder path'
echo ' -d delete old files'
echo ' -s stop on old file'
}
# Обрабатываем аргументы
TMP=`getopt -o u:f:sd -n 'rpod-get.sh' '--' "$@"`
if [ $? != 0 ] ; then usage; exit 1; fi
eval set '--' "$TMP"
DELETE_OLD_FILES=0
STOP_ON_OLD_FILE=0
while true ; do
case "$1" in
-u) URL=$2; shift 2;;
-f) FOLDER=$2; shift 2;;
-d) DELETE_OLD_FILES=1 ; shift ;;
-s) STOP_ON_OLD_FILE=1 ; shift ;;
--) shift ; break ;;
esac
done
# Все ли аргументы имеют верные значения
if [ "$URL" = "" ]; then
usage
exit 1
fi
if [ "$FOLDER" = "" ]; then
usage
exit 1
fi
if [ "$DELETE_OLD_FILES" -eq "1" -a "$STOP_ON_OLD_FILE" -eq "1" ]; then
echo "Cannot use -s and -d args together"
usage
exit 1
fi
# Получаем ссылки на mp3-файлы с подкастами
LINKS=`wget -cq -O - $URL | grep 'mp3?' | iconv -f cp1251 -t utf-8 | sed -r -e 's/.*"(.*)".*/\1/'`
# Индикатор завершенных скачиваний
DONE=0
# За дело
for LINK in $LINKS; do
FILENAME=`echo $LINK | sed -r -e 's/.*\/([^\/]+)\?.*/\1/'`
if [ -e $FOLDER/$FILENAME ]; then
if [ "$DELETE_OLD_FILES" -eq "1" ]; then
rm $FOLDER/$FILENAME
wget -cq -O $FOLDER/$FILENAME $LINK
let DONE=$DONE+1
fi
if [ "$STOP_ON_OLD_FILE" -eq "1" ]; then
echo $DONE
exit 0
fi
else
wget -cq -O $FOLDER/$FILENAME $LINK
let DONE=$DONE+1
fi
done
echo $DONE
Результат?
В результате я получил скрипт, которому можно скармливать страницы вида siski-piski-show.rpod.ru и получать в указанной папке все подкасты с этой страницы. С учетом опции -s можно этот скрипт особенно полезен - он будет сразу останавливаться при получении уже существующего на носителе подкасте.
С помощью этого скрипта я скачал целиком несколько подкастов абсолютно не отвлекаясь от работы.
Хочется больше
Конечно, это еще не все. Программисты не ищут легких путей. В следующей статье я расскажу о том как докачивать новые выпуски подкастов на КПК при его подключении автоматически.