Toon posts:

[perl]hoe site in lezen in je INFILE?

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik ben dus begonnen met perl (YaY)
en gaat allemaal best redelijk.
ben bezig met een script that een site checked of er al een update van een file is.
(macafee anti-virus dat etc. etc.)
nou had ik voor testing purposes gewoon even de source van de site in een bestandje ge C&P'd (om niet een half milioen keer die site te downloaden)
en alles werkt.

maar nu wil ik dus dat hij inplaats van het uit dat bestand lezen.
het direct van het internet pakt.

ik had dus deze constructie verzonnen.
code:
1
open (INFILE, `get http://www.mcafeeb2b.com/naicommon/download/dats/mcafee_4x.asp`);


maar dat pakt hij niet.

iemand meschien hier een oplossing voor?

  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

probeer eens:
code:
1
open (INFILE, `get http://www.mcafeeb2b.com/naicommon/download/dats/mcafee_4x.asp |`);

Skill is when luck becomes a habit.


Verwijderd

Simpeler is om de module http://search.cpan.org/author/GAAS/libwww-perl-5.65/ te gebruiken, en vervolgens
code:
1
2
3
4
5
6
7
8
9
10
use LWP::UserAgent;
my $Response   = $userAgent->request( HTTP::Request->new('GET', $inSourceURI) );
if( $Response->is_success )
{
   $ContentData = $Response->{'_content'};
}
else
{
   print "MISLUKT !!! :~(";
}

Verwijderd

Topicstarter
mm is bedoeld voor een windows bak :) (activeperl) dus will nog niet beginnen met modules enzo. maar zal eek's antwoord proberen.

mmm eek's antwoord gaf een syntaxfout.
had ik moeten weten uiteraard. windows kent natuurlijk geen |
niet in die manier iig

  • Juup
  • Registratie: Februari 2000
  • Niet online
Outs, dat kan nog makkelijker. Gebruik de module LPW::Simple (uit libwww)
doe dan
code:
1
2
use LWP::Simple;
my $content = get("http://www.mcafeeb2b.com/naicommon/download/dats/mcafee_4x.asp");


Stratos: maak het jezelf gemakkelijk en gebruik die module. Bij activeperl zit een tool waarmee je supergemakkelijk modules kan installeren.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Verwijderd

Topicstarter
mmm probeerde die LPW te installen, maar PPM gaf een error dat de package bad was ofzo.
zijn er voor active perl dan speciale packages ofzo? (mega perl newbee)

-edit-
oeps sorry mensen.
die module zit er standaart bij :)
dus moet helemaal niks installen.

-edit-
mmm geeft nog steeds een fout
ik denk dat meschien de pagina te groot is ofzo voor zijn buffer :?

en Outs zijn oplossing geeft een error
"Can't call method "request" on an undefined value at blaat.pl line 14."

line 14 is de "my $Response = $userAgent->request(HTTP::Request->new('GET', $inSourceURI) );" lijn

Verwijderd

Topicstarter
naja ik zal maar even heel mijn script posten. meschien dat mensen dan iets hebben van (ooooh dat is het probleem, nou dat doe je gewoon zo en zo)

code:
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
#
#Getting page html, filtering it so i only get the line with the date in it.
#then somehow only get a piece with the date in it.
#
print("taking date and comparing it to previous file date\nConnecting to website, this may take a while....\n\n");
$tel=1;
$tel2=1;

#$var = `get http://www.mcafeeb2b.com/naicommon/download/dats/mcafee_4x.asp`;


use LWP::UserAgent;
$userAgent = LWP::UserAgent->new;
$userAgent->agent("MyApp/0.1 ");

#open (INFILE, "pagine.txt");
open (INFILE, $userAgent->request(HTTP::Request->new('GET', "http://www.mcafeeb2b.com/naicommon/download/dats/mcafee_4x.asp") ) );
$flag=0;
while (<INFILE>)
{
    print $html_line,"1";
    $html_line = $_;
    if ($html_line =~ /Date:.*/ && $flag==0) 
    { 
        $pos = index($html_line,"Date:");
        @dates = split / /,substr($html_line,$pos);
        $new_date = @dates[1];
            $flag=1;
    }
    
}
close(INFILE); 
#
#opening and reading  last.date
#
$infile = "last.date";
open (INFILE, $infile) || die "sorry, system can't open $infile for reading from";

#
#Reading the older date, and comparing it to the new one.
#will use chopping the date string and comparing the relevant bits.
#
while (<INFILE>) 
{
    $old_date = $_;
    @date1 = split /\//,$new_date;
    @date2 = split /\//,$old_date;
    # [0] is months, [1] is days.
    
    if (@date1[0] > @date2[0])
    {
        if (@date1[1] > @date2[1])
        {
            print "newer file found! \n new Date: ", $new_date,"\n old Date: ", $old_date;
            $save_date=1;
        }
        else 
        {
            print "Same or older. \n new Date: ", $new_date,"\n old Date: ", $old_date;
        }
    } 
    else 
    {
        print "Same or older. \n new Date: ", $new_date,"\n old Date: ", $old_date;
    }
} 
close (INFILE);
if ($save_date=1)
{
$outfile = "last.date";
open (OUTFILE, ">$outfile") || die "sorry, system can't open $outfile for reading/appending to";
print OUTFILE $new_date;
close (OUTFILE);
}


sorry voor de spaghetie code, tis nog maar mijn eerste perl script, dus tis ongeveer een half milioen keer verandered.

  • Juup
  • Registratie: Februari 2000
  • Niet online
Echt goed lezen kun je niet.
#$var = `get http://www.mcafeeb2b.com/...wnload/dats/mcafee_4x.asp`;
...
open (INFILE, $userAgent->request(HTTP::Request->new('GET', "http://www.mcafeeb2b.com/naicommon/download/dats/mcafee_4x.asp") ) );
Wat is dat voor onzin? Lees de post van Outs en mij eens.
De code in mijn vorige post werkt. Copy, paste, klaar.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Verwijderd

Topicstarter
he relax maar hoor, ik zij toch ook al dat ik nieuw was in perl.
en ik versimpel dingen graag als ik programmeer
en het leek mij mogelijk dat ik die variable waar je dan de text in dumbt gewoon kon weg laten.

naja iig nu werkt het goed.
dus bedankt voor de hulp enzo.

nu mezelf een gaan bezichhouden met als de datum nieuwer is een mailtje naar mezelf sturen dat er een update is :D
maar dat moet wel lukken denk ik, dat lijkt me gewoon een beetje in telnet zooien.

Verwijderd

een tip voor je:

www.perldoc.com

er is super veel te vinden, onder andere de hele perl manual....
erg usefull.
Pagina: 1