Mir war einmal danach ein perlscript zu schreiben um im IRC zu Posten was ich wo gerade im TV anschaue. Und da ich denke das vieleicht anderre so ein Script auch wollen, werde ich es euch hier geben.
Der Output vom script sieht so aus:
.:: VDR :: DISCOVERY CHANNEL :: Mythbusters - Die Wissensjäger (Explosionen durch Handys) :: 17:30 - 18:25 :: Host: 192.168.1.13 :: 1.659036 ms ::.
Das einzige was ihr braucht ist die svdrpsend, welches bei einer vdr installation dabei ist, und wen ihr es wollt "Time::HiRes" für die Anzeige wielange das Script braucht.
Für gentoo:
emerge -av perl-core/Time-HiRes
Wen ihr dies nicht wollt einfach die entsprechenden Zeilen löschen
Wen ihr das Script ohne Parameter ausführen wollt müsst ihr einfach @conhost = "192.168.1.13"; an euren PC mit vdr anpassen.
#!/usr/bin/perl
use Socket;
use Getopt::Std;
use Time::HiRes qw(gettimeofday tv_interval);
getopts("d:p:");
$timestart = [gettimeofday];
$Dest = $opt_d || "192.168.1.13";
$Port = $opt_p || 2001;
$Timeout = 10;
$SIG{ALRM} = sub { Error("timeout"); };
alarm($Timeout);
$iaddr = inet_aton($Dest);
$paddr = sockaddr_in($Port, $iaddr);
$proto = getprotobyname('tcp');
socket(SOCK, PF_INET, SOCK_STREAM, $proto) || Error("socket: $!");
connect(SOCK, $paddr) || Error("connect: $!");
select(SOCK); $| = 1;
while (<SOCK>) {
last if substr($_, 3, 1) ne "-"
}
print SOCK "chan\r\n";
while (<SOCK>) {
$line = "$_";
chomp($line);
chop($line);
@array = split / /,$line;
if ($array[0] == 250) {
$chanid = $array[1];
splice(@array,0,2);
$channelname = join(" ",@array);
}
last if substr($_, 3, 1) ne "-"
}
print SOCK "lste $chanid now\r\n";
while (<SOCK>) {
@lste = "$_";
foreach $line (@lste) {
chomp($line);
@array = split / /,$line;
if ($array[0] eq "215-T") {
shift(@array);
$programm = join(" ",@array);
}
if ($array[0] eq "215-S") {
shift(@array);
$programminfo = join(" ",@array);
$programminfo = "($programminfo) ";
}
if ($array[0] eq "215-E") {
$starttime = $array[2];
$endtime = $array[2] + $array[3];
($startsec,$startmin,$starthour)=localtime $starttime;
($endsec,$endmin,$endhour)=localtime $endtime;
if(length($starthour) == 1) {$starthour="0$starthour";}
if(length($startmin) == 1) {$startmin="0$startmin";}
if(length($endhour) == 1) {$endhour="0$endhour";}
if(length($endmin) == 1) {$endmin="0$endmin";}
}
}
last if substr($_, 3, 1) ne "-"
}
close(SOCK);
sub Error
{
print STDERR "@_\n";
close(SOCK);
exit 0;
}
$timeend = [gettimeofday];
$time = tv_interval $timestart, $timeend;
print STDOUT ("\002.::\002 VDR \002::\002 $channelname \002::\002 $programm $programminfo\002::\002 $starthour:$startmin - $endhour:$endmin \002::\002 Host: $Dest :: $time s \002::.\002\n");
Alles anzeigen
Edit: thx steffen_b, auf diese idee war ich noch garne gekommen, dies mach das script gleich um die hälfte schneller :>