| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
Telkku.com ripperiWhiz 07.09.02 18:15 Rippaa halutun kanavan päivän ohjelmat telkku.comista
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. |
![]() Haku
|