Leser: 19
[["ZG NR","Ortsangabe, Stoppunkt","Rücklaufende minuten"],["ZG NR","Ortsangabe, Stoppunkt","Rücklaufende Minuten"]]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
#!/usr/bin/perl -w use warnings; use strict; use Encode; require LWP::UserAgent; use JSON; use Data::Dumper; # adresse an die die anfrage geht my $SERVER = "https://192..168.0.999/abfahrten.do?id=01"; # zeichen vor der haltestelle my @SENDPRE = ('63','00','01','6d','00','14','67','65','74','44','65','70','61','72','74','75','72','65','73','46','6f','72','53','74','6f','70','53','00'); # zeichen nach der haltestelle my @SENDPOST = ('7A'); # regex um bahnen zu trennen my @BSPLIT = ('56','74','00','07','5C','5B','73','74','72','69','6E','67','6C','00','00','00','0D','53','00','2E'); my @WSPLIT = ('53','00','2E'); my $script = $0; my $stop = "@ARGV"; usage ($script, "Keine Haltestelle angegeben") if (!$stop); usage ($script) if ($stop =~ /^-?-h/); print "Frage $SERVER nach geplanten Stops für '$stop'...\n\n"; my $content = string_from_hex (@SENDPRE) . sprintf('%c', length (decode("utf8", $stop))) . $stop . string_from_hex (@SENDPOST); my $request = HTTP::Request->new('POST', $SERVER); $request->content($content); my $response = $ua->request ($request); # kam 200 OK zurück? if ($response->is_success) { my %entries = (); my $linienlen = length "Linie"; my $stationslen = length "Richtung"; my $datelen = length "Zeit"; # response in bahnen splitten my $splitter = string_from_hex(@BSPLIT); my @bahnen = split (/$splitter/s, $response->content); $splitter = string_from_hex (@WSPLIT); foreach my $b (@bahnen) { # bahn informationen extrahieren my @w = split(/$splitter/s, $b); if (@w > 3) { my @datum = split (/[.:]/, $w[2]); $linienlen = length $w[0] if (length $w[0] > $linienlen); $stationslen = length $w[1] if (length $w[1] > $stationslen); $datelen = length $datum[3].":".$datum[4] if (length $datum[3].":".$datum[4] > $datelen); $entries{$w[2].$w[0].$w[1]} = [$w[0], $w[1], $datum[3].":".$datum[4]]; } } # in tabellenform ausgeben printf "%".$datelen."s %".$linienlen."s %-".$stationslen."s\n", "Zeit", "Linie", "Richtung"; foreach my $e (sort keys %entries) { printf "%".$datelen."s %".$linienlen."s %-".$stationslen."s\n", $entries{$e}[2], $entries{$e}[0], $entries{$e}[1]; } } else { # da lief wohl etwas schief print $response->content . "\n"; die $response->status_line; } # ähm, usage... sub usage { my $script = shift; my $msg = shift; print $msg."\n" if $msg; print "USAGE: $script HALTESTELLE\n"; exit 1; } # einen string aus hex codes zusammen zaubern sub string_from_hex { my @code = @_; my $string = ""; foreach my $c (@code) { $string .= sprintf('%c',hex($c)); } return $string; }
my $SERVER = "http://192.168.0.99/abfahrten.do?id=01";
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
#! /usr/bin/perl use strict; use warnings; use JSON; # muss evtl. nachinstalliert werden use LWP::Simple; # muss evtl. nachinstalliert werden use Data::Dumper; # Wo sind die Daten zu holen? my $url = "http://192.168.0.99/abfahrten.do?id=01"; # Daten abholen lasssen #my $content = '[["01","Dresden, Plauen","2"],["01","Dresden, Plauen","2"],["01","Dresden, Plauen","2"],["01","Dresden, Plauen","2"],["01","Dresden, Plauen","2"],["05","Hamburg, Neugraben","5"]]'; my $content = get( $url ); # Abbruch, wenn Daten nicht geholt werden konnten die "Could not load data from $url." if not defined $content; # Bereite JSON-Parser vor my $json = JSON->new->allow_nonref; # Dekodiere JSON-Daten und erstelle eine Datenstruktur my $data = $json->decode( $content ); # Kontrollausgabe print Dumper $data;
Quotenein, kein Browser. nur der kleine TFT
2014-11-01T09:12:42 NIwuHallo rostl,
die Daten werden durch ein Tool so bereitgestellt.
ich kann die Ausgabe so wie ich sie bekomme nicht ändern.
Da ich kein Eingriff in das Script machen kann.
Deshlab war mein Plan per Perl die daten abzufragen und dann als
Console auszugeben.
Das Toll war ein Windows Prog was bei eine Datenbafrage macht und immer ein neues Json file( datensatz) rausgibt.
Ich kann im System leider keine Änderungen vornehmen.
Das Tool was die Daten herrausgibt, ist ein Eisenbahn tool für Modeleisenbahnen.
Und das Tool was die Großen ModelEisenbahn Unternehmen , Hamburg/Berlin usw,haben entweder ein eigenes Programm, oder ein anderes was aber den Kosten Nutzen Faktor mehr als nur überschreitet.
Deshlab wollte ich ein kleines Tool was auch reicht.
Meines kann max 10 Bahnhöfe verwalten. Wir haben 4
und max 100 Fahreinheiten.
Was auch ausreichend ist.
2014-11-01T16:08:59 NIwuHallo rostl
ja klar kann ich das, müßte nur x starten
oder gnome
das währe ist kein Thema
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
use Data::Dumper; my $array_from_json = [["ZG NR","Ortsangabe", "Stoppunkt","Rücklaufende minuten"],["ZG NR","Ortsangabe", "Stoppunkt","Rücklaufende Minuten"]]; $array_from_json = [["001","Berlin", "Jüterbog","120"],["002","Dresden", "Riesa","95"]]; my @keys = qw(ZugNr Ortsangabe Stoppunkt Returntime ); my %Fahrplan = (); foreach my $zug( 1 .. scalar @$array_from_json){ my %hh = (); # Helper Hash @hh{@keys} = @{$array_from_json->[$zug-1]}; $Fahrplan{$zug} = \%hh; } print Dumper \%Fahrplan; # ausgabe $VAR1 = { '1' => { 'Returntime' => '120', 'ZugNr' => '001', 'Stoppunkt' => 'Jüterbog', 'Ortsangabe' => 'Berlin' }, '2' => { 'Returntime' => '95', 'ZugNr' => '002', 'Stoppunkt' => 'Riesa', 'Ortsangabe' => 'Dresden' } };
Quotehab doch kein cgi-bin script.
print "Content-Type: text/html; Charset=UTF-8\n\n";
1 2 3
#!/usr/bin/perl print "Content-Type: text/html; Charset=UTF-8\n\n", "Hallo Welt";
Quotenur wie gesagt die ahnung in perl oder die json auslesen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
use JSON::XS; use strict; my $abfahrenString = '[["S3","Dresden, Plauen","1"],["S1","Dresden, Flughafen","2"],["RE01","Meissen","10"],["ICE","Hamburg, Neugraben","15"]]'; my @keys = qw(ZugNr Richtung Minuten); my @abfahrten = sort { $a->[2] <=> $b->[2] } @{decode_json $abfahrenString}; print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body>\n"; print "\n"; print "<table><tr>"; print "<th>$_</th>" for @keys; print "</tr>\n"; for my $zug (@abfahrten) { print "<tr>"; print "<td>$_</td>" for @$zug; print "</tr>\n"; } print "</table></body></html>\n";
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
#!"D:\webserver\xampp\perl\bin\perl.exe" #! /usr/bin/perl use strict; use warnings; use JSON; # muss evtl. nachinstalliert werden use LWP::Simple; # muss evtl. nachinstalliert werden require LWP::UserAgent; use Data::Dumper; use URI::Escape; use CGI::Carp qw(fatalsToBrowser); # Wo sind die Daten Haltestellen ID zu holen? my $url = "http://localhost/abfahrten.do?id=01"; # Daten abholen lasssen #my $content = get( $url ); my $content = '[["S3","Dresden, Plauen","1"],["S1","Dresden, Flughafen","2"],["RE01","Meissen","10"],["ICE","Hamburg, Neugraben","15"]]'; # Abbruch, wenn Daten nicht geholt werden konnten die "Could not load data from $url." if not defined $content; # Bereite JSON-Parser vor my $json = JSON->new->allow_nonref; # Dekodiere JSON-Daten und erstelle eine Datenstruktur #my $array_from_json = [["ZG NR","Richtung","Rücklaufende Minuten"],["ZG NR","Richtung", "Rücklaufende Minuten"]]; my $array_from_json = $json->decode( $content ); # Kontrollausgabe #print Dumper $data; # sortiere nach Abfahrten my @sorted = sort { $a->[2] <=> $b->[2] } @$array_from_json; #print Dumper \@sorted; # Zeige die nächsten 3 Abfahrten print "Abfahrten\n"; printf "%4s %15s %5s\n", 'Zug', 'Zielort', 'Abf. in'; for my $aRef ( @sorted[0 .. 2] ) { my ( $zugnr, $ziel, $min ) = @$aRef; $ziel = ( split m/,\s+/, $ziel )[1] if $ziel =~ m/,/; printf "%4s %15s %5s\n", $zugnr, $ziel, $min; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
#!"D:\webserver\xampp\perl\bin\perl.exe" #! /usr/bin/perl use strict; use warnings; use JSON; # muss evtl. nachinstalliert werden use LWP::Simple; # muss evtl. nachinstalliert werden use Data::Dumper; # Wo sind die Daten Haltestellen ID zu holen? my $url = "http://localhost/abfahrten.do?id=01"; # Wie viele Abfahrten sollen gezeigt werden my $how_many = 3; my @titles = ( 'Zug', 'Zielort', 'Abf. in' ); # Ueberschriften der Ausgabe my @formats = ( '%4s', '%15s', '%8s' ); # Feldbreiten der Ausgabe my $format = join( ' ', @formats ) . "\n"; # baue Format fuer Ausgabe zusammen # Daten abholen lasssen #my $content = get( $url ); my $content = '[["S3","Dresden, Plauen","1"],["S1","Dresden, Flughafen","2"],["RE01","Meissen","10"],["ICE","Hamburg, Neugraben","15"]]'; # Abbruch, wenn Daten nicht geholt werden konnten die "Could not load data from $url." if not defined $content; # Bereite JSON-Parser vor my $json = JSON->new->allow_nonref; # Dekodiere JSON-Daten und erstelle eine Datenstruktur #my $array_from_json = [["ZG NR","Richtung","Rücklaufende Minuten"],["ZG NR","Richtung", "Rücklaufende Minuten"]]; my $array_from_json = $json->decode( $content ); # Kontrollausgabe #print Dumper $data; # Sortiere nach Abfahrtszeiten my @sorted = sort { $a->[2] <=> $b->[2] } @$array_from_json; #print Dumper \@sorted; # Zeige die nächsten Abfahrten gemäß $how_many print "Abfahrten\n"; printf $format, @titles; for my $aRef ( @sorted[ 0 .. $how_many-1 ] ) { my ( $zugnr, $ziel, $min ) = @$aRef; $ziel = ( split m/,\s+/, $ziel )[1] if $ziel =~ m/,/; printf $format, $zugnr, $ziel, $min; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
#!"D:\webserver\xampp\perl\bin\perl.exe" #! /usr/bin/perl use strict; use warnings; use JSON; # muss evtl. nachinstalliert werden use LWP::UserAgent; # muss evtl. nachinstalliert werden use Data::Dumper; # Wo sind die Daten Haltestellen ID zu holen? #my $url = "http://localhost/abfahrten.do?id=01"; my $url = "http://phoenix/abfahrt.json"; # Wie viele Abfahrten sollen gezeigt werden my $how_many = 3; my @titles = ( 'Zug', 'Zielort', 'Abf. in' ); # Ueberschriften der Ausgabe my @formats = ( '%4s', '%15s', '%8s' ); # Feldbreiten der Ausgabe my $format = join( ' ', @formats ) . "\n"; # baue Format fuer Ausgabe zusammen sub fetch_data { my $url = shift; my $ua = LWP::UserAgent->new( timeout => 10 ); my $response = $ua->get($url); if ( $response->is_success ) { return $response->decoded_content; } else { die $response->status_line; } } # Hauptprogramm # ################################################################### # Daten abholen lasssen my $content = fetch_data( $url ); #my $content = '[["S3","Dresden, Plauen","1"],["S1","Dresden, Flughafen","2"],["RE01","Meissen","10"],["ICE","Hamburg, Neugraben","15"]]'; # Abbruch, wenn Daten nicht geholt werden konnten die "Could not load data from $url." if not defined $content; #print Dumper $content; # Bereite JSON-Parser vor my $json = JSON->new->allow_nonref; # Dekodiere JSON-Daten und erstelle eine Datenstruktur [ [ nr, richtung, minuten ], [ nr, richtung, minuten ] ] my $array_from_json = $json->decode( $content ); # Kontrollausgabe #print Dumper $data; # Sortiere nach Abfahrtszeiten my @sorted = sort { $a->[2] <=> $b->[2] } @$array_from_json; #print Dumper \@sorted; # Zeige die nächsten Abfahrten gemäß $how_many print "Abfahrten\n"; printf $format, @titles; for my $aRef ( @sorted[ 0 .. $how_many-1 ] ) { my ( $zugnr, $ziel, $min ) = @$aRef; $ziel = ( split m/,\s+/, $ziel )[1] if $ziel =~ m/,/; printf $format, $zugnr, $ziel, $min; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
#!/usr/bin/perl use strict; use warnings; #use Data::Dumper; print "Content-Type: text/html; Charset=UTF-8\n\n"; my $array_from_json = [["001","Berlin", "Jüterbog","120"],["002","Dresden", "Riesa","95"]]; # Überschriften, Datenfelder my @keys = qw(ZugNr Ortsangabe Stoppunkt Returntime ); # Fahrplan zur Ausgabe my %Fahrplan = (); # Das Array from JSON wird in einen Hash trasformiert # damit sind die Daten griffiger (direkte Adressierbarkeit der Felder) foreach my $zug( 1 .. scalar @$array_from_json){ my %hh = (); # Helper Hash @hh{@keys} = @{$array_from_json->[$zug-1]}; my $znr = $array_from_json->[$zug - 1][0]; $Fahrplan{$znr} = \%hh; } # Ausgabe als HTML print qq( <table style="width:100%" border> <tr> <th> ZugNr </th> <th> Ortsangabe </th> <th> Stoppunkt </th> <th> Returntime </th> </tr> ); # Ausgabe sortiert nach ZugNr foreach my $znr( sort { $a cmp $b } keys %Fahrplan ){ print "<tr>\n"; print qq( <td> $Fahrplan{$znr}->{ZugNr} </td> <td> $Fahrplan{$znr}->{Ortsangabe} </td> <td> $Fahrplan{$znr}->{Stoppunkt} </td> <td> $Fahrplan{$znr}->{Returntime} </td> ); print "<tr>\n"; } print qq( <table> );
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
use GD; print "Content-type: Text/html\n\n"; $x = 128; $y = 160; $image = new GD::Image($x,$y); $white = $image->colorAllocate(255,255,255); $red = $image->colorAllocate(255,0,0); $black = $image->colorAllocate(0,0,0); $image->string(gdLargeFont,0,0,"test",$red); $image->line(1,1,30,30,$black); $image->line(30,1,1,50,$black); $testimg="testimage_neu.gif"; $gifimage= $image->gif; open(FILE,"> $testimg"); print FILE "$gifimage"; close(FILE);
my $url = "http://192.168.0.99/abfahrten.do?id=01&id=02";
2014-11-14T20:32:30 Linuxer3)
Zeichenkodierung und Schrift sind zwei verschiedene Sachen.
Ich bin aus Deiner Antwort damals nicht schlau geworden und habe an dem Punkt aufgegeben. Ohne brauchbare Informationen kann ich auch nicht weiterhelfen. Zum Thema Umlaute kannst Du beim Perlgeek vorbeischauen; da hat sich moritz mit dem Thema auseinander gesetzt. Was bei Dir konkret gilt, kann ich mangels Kenntnis der Umgebung kaum beurteilen.
1 2 3
# Wo sind die Daten Haltestellen ID zu holen? #my $url = "http://localhost/abfahrten.do?id=01"; my $url = "http://phoenix/abfahrt.json";
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
# ################################################################### # Daten abholen lassen my $content = fetch_data( $url ); # Abbruch, wenn Daten nicht geholt werden konnten die "Could not load data from $url." if not defined $content; # Bereite JSON-Parser vor my $json = JSON->new->allow_nonref; # Dekodiere JSON-Daten und erstelle eine Datenstruktur my $array_from_json = $json->decode( $content ); # End System Question #Begin Cgi Code with output html print "Content-type: text/html\n\n"; #print "Content-Type: text/html; Charset=UTF-8\n\n"; print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">', "\n"; print '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de-DE" lang="de-DE">', "\n"; print '<head lang="de-DE">', "\n"; print "<html><head>";