(Nicht nur für) Irssi "Now Watch" Bash-Script

Games, Plugins, Utils, Tools, 3rdParty, etc...
Frank0711
Interessierter
Interessierter
Beiträge: 75
Registriert: Samstag 8. Februar 2003, 09:57

(Nicht nur für) Irssi "Now Watch" Bash-Script

Beitrag von Frank0711 »

Ich habe für mich mal ein kleines Bash-Script geschrieben, um den aktuellen Sender meiner Dbox2 per Irrsi-Command im aktuellen Channel bzw. Query anzuzeigen. Zwischenzeitlich habe ich es um Multiboxen-Support (ich hab 2 Boxen) und ausführlicher EPG-Ausgabe bzw einer "Next-Watch" Funktion erweitert. Ich bin weder Informatik-Student noch arbeite ich in der IT-Branche, daher nicht über den eventuell schlampigen Code lustig machen bitte :wink:

Über Hinweise und Vorschläge würde ich mich freuen. Macht mit dem Script was ihr wollt. Nur Postet bitte eure Erweiterungen und / oder Fixes wieder hier im Thread.

Also, wir brauchen:
  • * Eine Dbox2 im Lan
    * Eine Linux-Box
    * Basis Consolen Know How
Erstellt in einem beliebigen Verzeichniss (z.b. /home/username/scripts/) die Datei "dbox2nw" mit folgenden Inhalt:

Code: Alles auswählen

#!/bin/bash

# v 0.75
# rewitten the epg-data phraser. still "little mans work" but it works :P
# nextwatch + nextinfo now testing


# functions..

function do_cleanup () {
rm -f "/tmp/dbox2irssi-epg-*"
}

function show_help () {
echo "
  Usage: $0 <dbox2-ip>  <parameter>
Example: $0 192.168.0.5 nowwatch

parameters:
nowwatch - short nw output
extinfo  - extended epg output

nextwatch - short next watch
nextinfo  - extended next epg output
"
}

function unix2normaltime () {
python -c "import time;print time.strftime('%a, %d %b %Y %H:%M:%S',time.localtime($*))"
}

# main code starts here!

if [ "$2" == "" ]
then
echo "
linux@dbox2 shell info script (for use in irssi)"

show_help
exit 1
fi

dboxip="$1"
# channel id holen
chanid=$(lynx -dump http://$dboxip/control/getonidsid)
lynx -dump http://$dboxip/control/channellist | grep "$chanid" | cut -d " " -f 2- > /tmp/dbox2irssi-epg-channame
# channelname holen
channame=$(cat -n /tmp/dbox2irssi-epg-channame | grep "     1" | cut -b 8-)
# epg für channel auslesen
lynx -dump http://$dboxip/control/epg?$chanid > /tmp/dbox2irssi-epg-chanepg

curunixtime=$(date "+%s")
shortunixtime=$(echo "$curunixtime" | cut -b 1-5)

grep $shortunixtime /tmp/dbox2irssi-epg-chanepg > /tmp/dbox2irssi-epg-chanepg2
# chanepg=$(grep $(echo $curunixtime | cut -b "1-5") /tmp/dbox2irssi-epg-chanepg)

counter="0"
foundnr="null"

# get epg for "now"
for i in $(cat /tmp/dbox2irssi-epg-chanepg2 | cut -d " " -f 2);

do
counter=$(echo $counter + 1 | bc)
if [ "$i" -gt "$curunixtime" ] && [ "$foundnr" == "null" ]
then
foundnr=$counter
fi
done

case $2 in
nowwatch|extinfo)
foundnr=$(echo "$foundnr - 1" | bc)
esac

# get epg-eventid
counter="0"
# echo "$foundnr"
for i in $(cat /tmp/dbox2irssi-epg-chanepg2 | cut -d " " -f 1);
do
counter=$(echo $counter + 1 | bc)
if [ "$counter" == "$foundnr" ]
then
chaneventid=$i
fi
done

# starttime
counter="0"
for i in $(cat /tmp/dbox2irssi-epg-chanepg2 | cut -d " " -f 2);
do
counter=$(echo $counter + 1 | bc)
if [ "$counter" == "$foundnr" ]
then
chanunixtime="$i"
fi
done

# endtime
counter="0"
for i in $(cat /tmp/dbox2irssi-epg-chanepg2 | cut -d " " -f 2);
do
counter=$(echo $counter + 1  | bc)
if [ "$counter" == "$(echo "$foundnr + 1" | bc)" ]
then
channextunixtime="$i"
fi
done

chanstart=$(unix2normaltime $chanunixtime | cut -d " " -f5 | cut -d : -f 1-2)
chanstop=$(unix2normaltime $channextunixtime | cut -d " " -f5 | cut -d : -f 1-2)


# check parameters

case $2 in
nowwatch)
lynx -dump http://$dboxip/control/epg?eventid=$chaneventid > /tmp/dbox2irssi-epg-info
chansendung=$(cat -n /tmp/dbox2irssi-epg-info | grep "     1" | cut -b 8-)
if [ "$chansendung" != "" ]
then
echo "nw: \"$chansendung\" ($chanstart Uhr bis $chanstop Uhr auf \"$channame\")"
else
echo "nw: \"$channame\""
fi
do_cleanup
exit 0
;;

nextwatch)
lynx -dump http://$dboxip/control/epg?eventid=$chaneventid > /tmp/dbox2irssi-epg-info
chansendung=$(cat -n /tmp/dbox2irssi-epg-info | grep "     1" | cut -b 8-)
if [ "$chansendung" != "" ]
then
echo "nextwatch: \"$chansendung\" ($chanstart Uhr bis $chanstop Uhr auf \"$channame\")"
else
echo "nextwatch: \"$channame\""
fi
do_cleanup
exit 0
;;

extinfo)
wget -q -O /tmp/dbox2irssi-epg-info "http://$dboxip/control/epg?eventid=$chaneventid"
epginfo=$(cat /tmp/dbox2irssi-epg-info)
if [ "$epginfo" != "" ]
then
echo "nw: $epginfo"
echo "($chanstart Uhr bis $chanstop Uhr auf \"$channame\")"
else
echo "nw: \"$channame\""
fi
do_cleanup
exit 0
;;


nextinfo)
wget -q -O /tmp/dbox2irssi-epg-info "http://$dboxip/control/epg?eventid=$chaneventid"
epginfo=$(cat /tmp/dbox2irssi-epg-info)
if [ "$epginfo" != "" ]
then
echo "nextwatch: $epginfo"
echo "($chanstart Uhr bis $chanstop Uhr auf \"$channame\")"
else
echo "nextwatch: \"$channame\""
fi
do_cleanup
exit 0
esac


# if we make it here, somethings wrong :(
echo "
somethings wrong, parameter "$2" is not valid."
show_help
do_cleanup
Jetzt macht ihr das Script ausführbar mit

Code: Alles auswählen

chmod +x dbox2nw
Syntax des Scipts ist wie folgt:

Code: Alles auswählen

./dbox2nw <Ip-der-dbox> <Parameter>
Parameter:
  • nowwatch - Kurze "Now Watch" Ausgabe
    extinfo - Ausführliche EPG Ausgabe

    nextwatch - Kurze "Next Watch" Ausgabe
    nextinfo - Ausführliches EPG der nächsten Sendung
Beispiel:

Code: Alles auswählen

./dboxnw 192.168.0.15 nowwatch
nw: "Tagesschau" (12:45 Uhr bis 13:15 Uhr auf "Das Erste")

Code: Alles auswählen

./dboxnw 192.168.0.15 extinfo
nw: hundkatzemaus

Panther-Chamäleons ("Furcifer pardalis") sind mittelgroße Chamäleons. Die handtellergroßen Tiere stammen aus den Wäldern Madagaskars und leben dort in den Bäumen und im Strauchwerk. Ihre Farbe changiert zwischen grün, grau/braun oder violett.
(12:50 Uhr bis 13:30 Uhr auf "VOX")
Wenn das Script auf der Console funktioniert könnt ihr es aus Irrsi mit folgendem Befehl ausführen:

Code: Alles auswählen

/exec /pfad/zum/script/dbox2nw <IP> <Parameter>
um nur "Lokal" den aktuellen Sender zu sehen oder

Code: Alles auswählen

/exec -o /pfad/zum/script/dbox2nw <IP> <Parameter>
um den aktuellen Channel bzw Query-Partner über euer Sehverhalten zu informieren. :D

Bitte achtet darauf, das in vielen Channels solche Scripte nicht grade gern gesehen sind. Gegen ein sinngerechtes einsetzen als Antwort auf die Frage "Was schaustn grad" wird wohl auch dort keiner was haben, nur macht mich nicht verantwortlich, wenn ihr bei "Abuse" gebanned werdet! :wink: