Telkku.com ripperi

Whiz 07.09.02 18:15

Rippaa halutun kanavan päivän ohjelmat telkku.comista

 Tekstiversio  Arvo: 1 (5 ääntä)  Äänestä: +  -
käyttö= ./scripti kanavan_nimi

koodi on aika kauheeta purkkaa, mutta toimii ;)
scriptistä olemassa myös versio joka ei käytä ollenkaan
ulkoisia ohjelmia vaan avaa ite socketin telkku.comiin ja
hakee sivun sieltä, mutta törmäsin siinä ihan outoihin rivinvaihtoihin
jotka pisti kapuloita rattaisiin niin paljon että iskin koko projektin jäihin
hetkeks :) Scripti on alunperin suunniteltu siihen että se dumppaa
tekstitiedostoon ;-merkillä erotettuna ton datan, jotta toinen softa
osaisi sitten sitä lukea. No enivei karsin siitä poies tiedostoon
talletuksen, niin tästä tuli ihan kätevä purkka omaan käyttöön, greppaa
vaan outputista kellonajan perusteella ni näkee mitä kanavalta millonkin
tulee.. joo, mut enempiä jaarittelematta tässä se koodi on..
parannusehdotuksia otetaan todellakin vastaan..

[UPDATE 22.9] päivitetty versio, lynxi dumpattu ja scripti on
riippumaton nyt mistään ulkosista ohjelmista.. ja hyvin toimii :)[/UPDATE]

p.s niin ja sit toi kanavahashista otin pois noi ylimääräset krääsät niinku
therili ehdotti :))

#!/usr/bin/perl -Tw
use strict;
use IO::Socket;

if(!$ARGV[0]) { print "insert channel\n";exit;}
# definee kanaville
my %kanavat = (
      'yle1'   => '0',
      'yle2'   => '1',
      'mtv3'   => '2',
      'nelonen'   => '3',
      'subtv'   => '4',
      'moontv'   => '5',
      'canalplus'   => '6',
      'canalplusgold'   => '7',
      'canalplusblue'   => '8',
      'tv1000'   => '9',
      'tv1000cinema'   => '10&,',
      'eurosport'   => '11',
      'mtv'   => '12',
      'atv'   => '13',
      'yle24'   => '14',
      'yleteema'   => '15',
      'ylefst'   => '16',
      'urheilukanava'   => '17',
      'tvfinland'   => '18',
      'turkutv'   => '19',
      'tvtampere'   => '20',
      'bbcworld'   => '21',
      'discoverychannel'   => '22',
      'animalplanet'   => '23',
      'svt1'   => '24',
      'svt2'   => '25',
      'svt24'   => '26',
      'svteuropa'   => '27',
      'tv3'   => '28'
);

print "Telkku.com:$ARGV[0]\n";
my @source = GetPageSource($kanavat{"$ARGV[0]"}) or die("could not fetch page");
my @result;

foreach my $row(@source){
    if($row=~/(\d+:\d+)(.*)<\/b><\/td><\/tr>/) {
        $row =~ s/\t//;
        $row =~ s/<tr><td><blockquote><font class=a>/; /;
        $row =~ s/<\/blockquote><\/td><\/tr>.*/; /;
        $row =~ s/<\/b><\/td><\/tr>\n//;
        $row =~ s/\r//; $row =~ s/\n//; $row =~ s/^M//;
        push @result, "$row";
    }
}
my $res=@result;my $x=0; my @arr;
for my $row(@result){
    $x++;
    if($x==$res){
        @arr = split(";",$row);
        print "$arr[0]; $arr[1];\t\n";
    } else { print "$row\n"; }
}

# subi jolla haetaan muuttujaan koko sivun sisältö
sub GetPageSource{
    my $url = $_[0]; my $source; my @data;

    my $socket = IO::Socket::INET->new(
        Proto => 'tcp',
        PeerAddr => 'telkku.com',
        PeerPort => 80,
        Timeout => 60,
    );
    unless($socket) { die("Could not connect to telkku.com:80");}

    $socket->autoflush(1);
    print $socket ("GET /telkku.cgi?n=&s=&sivu=0&p=0&sn=11&konro=$url&\r\n");

    while (my $line = <$socket>) { $source = $source . " " . $line; }
    @data = split("<tr><td><font class=a><b>",$source);
    return @data;
}

Whiz 18:53 8.9.02 
$purkka++; :))
theril 01:24 9.9.02 
Miksi tallennat koko osoitteet %kanavat-hashtableen, kun niissä kuitenkin ovat erona ainoastaan nuo numerot? Laiskuus ja copypaste saaneet vallan?
Whiz 08:24 9.9.02 
Hmm.. Kanavien nimet piti saada jotenkin mukaan siihen, en keksinyt muutakaan tapaa, mutta oi perl guru jos keksit paremman tavan, niin valaise meitä :)
Whiz 08:26 9.9.02 
joo en mä taas lukenu yhtään mitä kirjotit, sori, vois herätä ennenku alkaa mitään kirjottaan.. jos menis lopettaan itsensä saunan taakse tai sit opiskeleen noita digitaalisia medioita...
renni 17:26 31.10.03 
Tuohon kun vielä lisää option jolla tulostuksen saa lyhyenä (ilman lisätietoja) tai pitkänä niin tuolla saattaisi olla jotain käyttökin.