Телепрограмма
Многие товарищи, скачав какую-нибудь программу для работы с телепрограммой (например http://www.citycat.ru/tv/ListTV/ , кстати, под wine прекрасно работает), озадачиваются вопросом: «Где бы взять саму телепрограмму?». Каждый телеканал на своем сайте публикует программу передач на текущую неделю, но бегать и собирать нужные Вам каналы по всему интернету не очень удобно, да и скормить их своему менеджеру телепрограммы вряд ли удастся. Есть http://www.kulichki.tv/ , для Днепропетровска есть http://gorod.dp.ua/tv/ . Там собраны все телепрограммы в одном месте, но для получения нужных вам каналов придется заниматься мышевозяканием, а значит Вы обречены на еженедельное посещение одного из этих сайтов. Все это несколько противоречит врожденной лени сисадмина. Год назад возникла идея написать скрипт, который бы в автоматическом режиме скачивал необходимую информацию в виде текстового файла, который бы можно было скормить кому надо. Скрипт был написан(на bash, безупречно работал с http://www.kulichki.tv/ )-переписан-отлажен и .. благополучно удален. Несмотря на то, что обещали, что рукописи не горят, восстановить его не удалось. Все было реализовано средствами wget, grep и awk.
30 декабря, когда я в состоянии запоя попытался выкачать телепрограмму вручную, выяснилось, что большинство вебмастеров сайтов с телепрограммами уже тоже бухают и нет никакой возможности узнать под какую из телепередач можно с удобством поспать в салате в новогоднюю ночь. Однако, поскольку, http://gorod.dp.ua/tv/ практически единственный, предоставлял возможность скачать телепрограмму в удобном им виде, возникло желание тут же наваять на коленках выкачивалку, которая бы могла выкачать нужные мне каналы для нужного мне дня:
#!/bin/bash
rm ./ch.html
DAY=04
MNTH=01
YEAR=2008
case «$MNTH» in
01) MONTH=ъМБЮПЪ;;
02) MONTH=тЕБПЮКЪ;;
03) MONTH=лЮПРЮ;;
04) MONTH=юОПЕКЪ;;
05) MONTH=лЮЪ;;
06) MONTH=хЧМЪ;;
07) MONTH=хЧКЪ;;
08) MONTH=юБЦСЯРЮ;;
09) MONTH=яЕМРЪАПЪ;;
10) MONTH=нЙРЪАПЪ;;
11) MONTH=мНЪАПЪ;;
12) MONTH=дЕЙЮАПЪ;;
esac
echo ««> ch$YEAR$MNTH$DAY.txt
for channel in `ls ./need`
do
wget -c «http://gorod.dp.ua/tv/print.php?date=$YEAR-$MNTH-$DAY&`cat ./need/$channel|awk ‘{print $2}’`» —output-document=ch.html
echo $DAY $MONTH. `cat ./need/$channel|awk ‘{print $1}’` >> ch$YEAR$MNTH$DAY.txt tput-document=ch.html
cat ch.html|sed -e :a -e ‘s/<[^>]*>//g;/> ch$YEAR$MNTH$DAY.txt
rm ./ch.html
done
Может кому пригодится. GNU.
Комментарии:
варианты MONTH должен быть в виндовой кодировке, у меня просто локаль koi8-ru
В той же директории где скрипт должна быть директория ./need с файлами для нужных вам каналов. Каждый файл соответствует одному каналу и состоит из одной строки:
1+1 group=1&channel=54
К какой группе относится какой канал и какой у него номер можно узнать здесь http://gorod.dp.ua/tv/ просто анализируя ссылки на каналы.
Все это можно сделать и поудобней-пооптимальней, но меня и так устраивает, а нужно ли это кому-нибудь я не знаю. Соответственно, пишите. Могу попробовать портировать это на perl для лучшей кроссплатформенности.
ftp://212.86.230.189/TVprog.tar.gz