Подкасты и программирование

    Долго слушая подкаст «Сиськи-Письки Шоу» я понял что у меня встала работа! :-)

    Подкаст был настолько увлекательным, что я не мог оторваться. И тут я решил, что неплохо бы его слушать в метро. Так, у меня есть КПК, который умеет подключаться к копьютеру как флешка.

    Отсюда у меня появилось 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 можно этот скрипт особенно полезен - он будет сразу останавливаться при получении уже существующего на носителе подкасте.

    С помощью этого скрипта я скачал целиком несколько подкастов абсолютно не отвлекаясь от работы.

    Хочется больше


    Конечно, это еще не все. Программисты не ищут легких путей. В следующей статье я расскажу о том как докачивать новые выпуски подкастов на КПК при его подключении автоматически.

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 27

    • НЛО прилетело и опубликовало эту надпись здесь
        +1
        Цель этой статьи не в супер-практичности. Я просто показал как с BASH можно играться и получать все что угодно.
        • НЛО прилетело и опубликовало эту надпись здесь
            0
            Нормальный разработчик не изобретает велосипедов, скрипт на bash, для закачивания подкастов уже существует.

            Поставьте пакет «podget». Скорость «разработки» сокращается до десятков секунд, если научиться пользоваться командой «apt-get search podcast» :)))))
              +2
              Не изобретая велосипеды - не стать многопрофильным специалистом :-)

              Книжки, мануалы - это не то. Пока сам не станешь решать задачи - не выучишь систему.

              А связывать профессию с BASH не хочется, он мне нравится лишь как инструмент для быстрого решения насущных задач.
                0
                Это да, но только лучше решать проблемы не решённые.
                  0
                  Например? :-)
                    0
                    Например допилить тот самый podget, чтобы он корректно работал со всеми фидами.

                    Или, сделать его интеграцию с iPod.
          +2
          Кстати, если RSS скормить - все работает также :-) Прямо универсальный скрипт)
            0
            не юзал, но если смотреть по коду, он помойму может любый mp3 файлы качать, если ссылки прямые
          +1
          Предусмотрите ситуацию, когда вы удалите прослушанные подкасты с плеера, а скрипт их вам затянет вновь.
          ps. и gPodder всё же удобнее :)
            –1
            Для этого и есть аргумент -s. Надо просто самый последний подкаст всегда оставлять на плеере :-)
              0
              :-) если подкаст лент не одна, а хотя бы 10-15, то уже становится тяжело отследить, какой подкаст последний. Хотя скрипт ваш выглядит красиво, занёс в scrapbook для изучения. Спасибо :)
                0
                1 подкаст-лента = 1 папка

                Я так организую :-)
              0
              >ps. и gPodder всё же удобнее :)
              Безусловно удобней, зато на порядок тяжелей, да и сохраняет он подкасты в каталоги со страшными названиями(
                0
                На счёт тяжелее согласен (но это не критично для меня)
                А вот с каталогами не сталкивался - версия 0.11.3 при синхронизации с MP3 плеером создаёт вполне себе отличные названия папок и файлов.
                ps. подкасты слушаю только на плеере
                  0
                  Предлагаю заглянуть в папку подкастов на компьютере)
              0
              Помоему отличный пример: того почему так любят программисты линукc) Не надо устанавливать никаких компиляторов типа делфи там или си какогонибудь)
              Все реально просто ;)

              У человека была задача он конечно и сам мог ручками все скачать, но программисты толи от своей лени то просто так от нечего делать пишут для себя)
                0
                Не могу говорить за всех программистов, но я люблю искать свой предел. Где же задачу которую я не смогу решить... В свободное время всегда есть чем заняться зато ;-)
                  0
                  Рад за тебя. Действительно.
                0
                Подчерк красивый и разметка :) , полтора оборотов перенял

                Сам всё качаю также иногда даже скрипт не создаю, прям так в полтора строки из смеси wget'а и sed'а

                ИМХО скрипт написать гораздо проще и быстрее, чем искать и устанавливать универсальную качалку(которая все равно не во всех ситуациях сработает).
                  0
                  Спасибо)

                  Написать самому еще и опыт дает! А он бесценен ;-)
                    0
                    Да когда-то это давало опыт, а щас все обычные действия давно уже заскриптованы. Тыкаю в кнопочку и уже не помню как оно там работает. :)
                    http://aonick.livejournal.com/672.html
                      0
                      В следующей статье как раз будет Zenity использоваться :-)
                  0
                  ИМХО, один из худших подкэтчеров.
                    0
                    Лучше бы автор доработал какой-нибудь из существующих, чем писать ещё один.
                    0
                    Интересно, но с rss действительно проще. Например, я сделал так.

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое