понедельник, 16 ноября 2009 г.

Спутниковое ТВ №х

Задача: организовать архив тв программ на разных машинах, с предустановленной Виндовс ХП

Реализация.

Необходимо получить программу передач из сети (я брал из teleguide.info).
Перекодировать (если необходимо) в системную кодировку. Распарсить ее по задачам и каналам. Раздать задачи соответствующим машинам.

в результате, методом проб и ошибок, наваял скрипток:

#!/bin/bash
#переработка программы передач inter-tv в зажания nnCron
#для последующей записи на других машинах

#перекодируем файл программы и ДОС-кодировки
#в системную
iconv -f RUSCII /win1/iptv/inter-tv.txt >/home/nast/inter-tv.txt
#peremennie
#chan="Россия"
#pnr="10304"
#url="udp://@:1111" #url
vlc="c:\Program Files\VideoLAN\VLC" #put' do vlc - player

for param in "ТНТ 12345 udp://@:1111" "СТС 23456 udp://@:1111" "НТВ 34567 udp://@:1111" "Россия 10304 udp://@:1111"
do
set -- $param
#echo "PAR1 $1 $2 $3"
chan=$1
pnr=$2
url=$3

#generatsiya nnCron.tab fajla
exec 3>&1 1>/home/nast/nncron.$chan #perevod vyvoda v file s zamenoy sodergimogo
#standartniy zagolovok
echo "#CRONTAB FILE "
echo "# Classic crontab format:"
echo "# Minutes Hours Days Months WeekDays Years Command"
echo "# see 'example.tab'"
echo ""
echo "#( purge-cron-log"
echo " Time: 0 12 * * 5 *"
echo " Action: PURGE-OLD: "log*.log" 7"
echo ")#"
echo ""
echo ""
echo ""
#zada4a o4istki zapolnennogo diska
echo "#( DriveLimitClear"
echo "Rule: [CHAR] D FREE-SPACE 50000000 < " echo "Action:" echo "RECURSIVE" echo "WITHDIRS" echo "PURGE-OLDW: "d:\video\*" 24" echo ")#" echo "" echo "" echo "" #exec 1>&3
#exec 3>&1 1>>/home/nast/nncron.tab #ostalnoe dopisivaem

cat inter-tv.txt | sed -e '/^ */d;s/"//g' | sed -e '/^\s*$/d' | sed -e '/^[А-Я]*\.\ [0-9]*/{x;p;x;}' | sed -e 's/^\([0-9]*\):\([0-9]*\) \(.*\)./hour="\1" min="\2" name="\3" fl2="1"/' | sed -e 's/^\([А-Я]*\)\.\ \([0-9]* [А-Я][а-я]*\)\.\ \(.*\)./day="\1" date="\2" kanal="\3" fl1="1"/' | sed -e '/./{H;$!d;}' -e 'x;/="'$chan'"/!d;' | sed -e 's/\./_/g' -e 's/\,/_/g' -e 's/\\/_/g' -e 's/\//_/g' -e 's/\:/-/g' -e 's/\!/_/g' -e 's/\?/_/g' -e 's/\*/_/g' |
while read VAR; do
eval $VAR;
if [ "$fl2" ]; then
if [ $day = "ПОНЕДЕЛЬНИК" ]; then dn="1" ; fi;
if [ $day = "ВТОРНИК" ]; then dn="2" ; fi;
if [ $day = "СРЕДА" ]; then dn="3" ; fi;
if [ $day = "ЧЕТВЕРГ" ]; then dn="4" ; fi;
if [ $day = "ПЯТНИЦА" ]; then dn="5" ; fi;
if [ $day = "СУББОТА" ]; then dn="6" ; fi;
if [ $day = "ВОСКРЕСЕНЬЕ" ]; then dn="7" ; fi;

if [ $hour -lt "05" ]; then dn=$(($dn + 1))
if [ $dn -eq "8" ]; then dn="1" ; fi
fi;

echo "#( $chan-$day$hour$min"
echo "RunOnce"
echo "RunMissed"
echo "Time: $min $hour * * $dn *"
echo "Action:"
echo "StartIn: \"$vlc\" "
echo "ShowNormal NormalPriority"
echo "START-APP: $vlc\taskkill.exe /IM vlc.exe"
echo "PAUSE: 2"
echo "DIR-CREATE: \"d:\\video\\$chan-$date-$day\""
echo "START-APP: \"$vlc\vlc.exe\" \"$url\" --sout=#duplicate{dst=std{access=file,dst=\"d:\\video\\$chan-$date-$day\\$hour$min-$name.mpg\"}}"
echo ")#"
echo
echo
echo

unset fl2;
fi;
done
exec 1>&3
#perekodiruem nnCron.tab v windows kodirovku i otdaem v nnCron
iconv -f UTF8 -t CP1251 nncron.$chan | sed 's/$'"/`echo \\\r`/" > /mnt/$pnr/nncron.tab

done


задачи раздаются компам, примонтированным через fstab к точкам /mnt/12345(и др.) расшаренной папкой "~/nnCron/" из виндовой машины.

для остановки процесса записи (влц) нужен процесс taskkill, у меня на одной машине по умолчанию он был, на других небыло, я тупо скопровал taskkill.exe в папку с влц.

Я поставил этот скрипт в кронтаб моей убунты, на время 4.56 чтобы автоматизировать раздачу задач.

Теперь остается еженедельно скачивать из нета файл Inter-tv (телепрограмма) и забрасывать ее в нужное место (кстати появляется он в нете не раньше воскресенья предшествующей недели)

Реклама

Комментариев нет:

Отправить комментарий