Jag får ner sidan och allt, men nu vill jag få ut vissa värden.
Så om någon vänlig regexpare skulle vilja ta tag i följande textsnutt vore det helfett:
Det är 00.45-01.15, 24 Nöje och 24 jag vill åt (just i detta exemplet givetvis.)
Jag testade själv med följande regexp, men det vill inte fungera:
<FONT COLOR="#6f6f6f">\s+\d+</FONT><FONT COLOR="#007f00">\s+(.+)\s+</FONT><FONT COLOR="6f6f6f">\s+(.+)\s*</FONT>
Borde nog fungera? Går säkert att göra både bättre och snyggare men jag är så seg så det får duga =)
Tänk på att det är lagbrott att publicera deras tablå på en hemsida, enstaka program faller dock under klassificeringen citat.
När man pillar med regexp är följande program guld värt: http://weitz.de/regex-coach/
Där skriver du in strängen du skall matcha mot och ditt regexp så kan du direkt se hur det hela funkar och vad som matchas. Klockrent.
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
my $agent = LWP::UserAgent->new;
my $response = $agent->get('http://www.svt.se/texttv/650.html');
unless ( $response->is_success ) {
die( $response->status_line );
}
my $html = $response->content;
my $fonts = [];
my $entries = [];
my $begin = 0;
while ( $html =~ m{<font color="(#6f6f6f|#007f00)">(.*?)</font>}igs ) {
my ( $color, $text ) = ( $1, $2 );
$text =~ s/^\s+//;
$text =~ s/\s+$//;
if ( $begin ) {
if ( $text =~ m/Kommande program/ ) {
last;
}
push @$fonts, { color => $color, text => $text };
}
else {
if ( $text =~ m/P.g.ende program/ ) {
$begin = 1;
}
next;
}
}
for ( my $i = 0 ; $i < scalar(@$fonts) ; $i += 3 ) {
my $entry = {};
$entry->{duration} = $fonts->[ $i ]->{text};
$entry->{show} = $fonts->[ $i + 1 ]->{text};
$entry->{channel} = $fonts->[ $i + 2 ]->{text};
if ( defined $fonts->[ $i + 3 ]
and $fonts->[ $i + 3 ]->{color} eq '#007f00' )
{
$entry->{show} .= " " . $fonts->[ $i + 3 ]->{text};
$i++;
}
push @$entries, $entry;
}
binmode( STDOUT, ':utf8' );
while ( my $entry = shift(@$entries) ) {
printf( "%s %-30s %s\n", $entry->{duration},
$entry->{show},
$entry->{channel} );
}
output:
mundus:~/dev/perl/svt chansen$ ./ontv
14.30-16.00 Kvinna ombord SVT1
12.00-15.10 Riksdagen i dag SVT2
12.15-15.15 Partiledardebatt i... 24
12.00-15.00 Twebbys smågodis Barn
14.30-15.00 Galen i dig TV3
14.35-15.00 Glamour TV4
14.35-15.05 Ett hem i... Kanal 5
Vad är det du inte förstår, om du kan precisera det lite så kan jag nog hjälpa dig
Vi har helt enkelt olika sätt att lösa problem, dina funkar till skillnad från mina :P. Sen är jag ganska grön när det kommer till Perl iochförsig. Och vad jag har förstått så _ska_ det vara svårt att förstå andra Perl-script :q.
Perl Monks har en tutorial om HTML::TokeParser.
Jag har varit där inne och läst, men jag har inte lyckats greppa tankegången. Om du har tid och lust kan du ju göra ett exempelprogram så att jag kanske förstår bättre :P.
140 ms totalt · 3 externa anrop · v20260731065814-full.55e59744