PDA

Bekijk Volledige Versie : Perl i.c.m. javascript



Matthijs de Z
22/01/03, 17:55
Hoi,

Ik heb net een perl scriptje gemaakt dat informatie ophaald van een pagina
(newsextern.pl):

#!/usr/bin/perl
use LWP::Simple;
print "Content-type: text/plain\n\n";
$news = get("http://www.smartcapital.be/cgi-bin/news/news.cgi");
printf "document.write\(\"$news\");\n";


Nu is het de bedoeling dat de inhoud door dit:

<SCRIPT
SRC="http://www.beursanalyse.info/cgi-bin/test/newsextern.pl"></SCRIPT>

in een pagina te plaatsen, wordt weergegeven.
Nu krijg ik als ik die perl pagina direct via mijn browser oproep, wel de
headlines te zien met daarvoor document.write(" en als laatste "); maar ik
krijg steeds de foutmelding dat de tekenreeks niet is afgesloten (alleen als
ik de informatie probeer weer te geven via <SCRIPT
SRC="http://www.beursanalyse.info/cgi-bin/test/newsextern.pl"></SCRIPT>)

Iemand enig idee waar de fout zit?
groeten,

Matthijs

Jeffrey Drooghenbroodt
22/01/03, 18:15
Matthijs de Z wrote:

> <SCRIPT
> SRC="http://www.beursanalyse.info/cgi-bin/test/newsextern.pl"></SCRI
> PT>
>
> in een pagina te plaatsen, wordt weergegeven.
> Nu krijg ik als ik die perl pagina direct via mijn browser oproep,
> wel de headlines te zien met daarvoor document.write(" en als
> laatste "); maar ik krijg steeds de foutmelding dat de tekenreeks
> niet is afgesloten (alleen als ik de informatie probeer weer te
> geven via <SCRIPT
> SRC="http://www.beursanalyse.info/cgi-bin/test/newsextern.pl"></SCRI
> PT>)
>
> Iemand enig idee waar de fout zit?

Je vergeet om het '-teken binnen je document.write te gaan escapen...


document.write('<table>

<tr><td><a href=' <== hier sluit je die ' alweer af...

--
Jeffrey
http://www.pebbels.be/

Matthijs de Z
22/01/03, 18:25
> > Iemand enig idee waar de fout zit?
>
> Je vergeet om het '-teken binnen je document.write te gaan escapen...
>
>
> document.write('<table>
>
> <tr><td><a href=' <== hier sluit je die ' alweer af...

Dus ik zou hier iets moeten veranderen:

printf "document.write\(\"$news\");\n";

Ik dacht dat ik de " al had geëscaped...maar het moet dus met de inhoud van
$news ook gebeuren. Hoe kan ik in die inhoud alle " automatisch vervangen
door \" voordat ik $news in printf "document.write\(\"$news\");\n"; plaats?
Groeten,

Matthijs

robert
22/01/03, 18:35
Matthijs de Z <haalallesvoorhetstreepjeplushetstreepjezelfweg-mldz@hotmail.com>:
> #!/usr/bin/perl
> use LWP::Simple;
> print "Content-type: text/plain\n\n";
> $news = get("http://www.smartcapital.be/cgi-bin/news/news.cgi");
> printf "document.write\(\"$news\");\n";

Tip: er zijn meerdere mogelijkheden om strings te printen in Perl, en een
aantal ervan zijn veel makkelijker als je met quotes te maken hebt.

Bv:
print <<EOB;
document.write("$news");
EOB

print qq{
document.write("$news");
};

--
robert

Matthijs de Z
22/01/03, 19:15
> > #!/usr/bin/perl
> > use LWP::Simple;
> > print "Content-type: text/plain\n\n";
> > $news = get("http://www.smartcapital.be/cgi-bin/news/news.cgi");
> > printf "document.write\(\"$news\");\n";
>
> Tip: er zijn meerdere mogelijkheden om strings te printen in Perl, en een
> aantal ervan zijn veel makkelijker als je met quotes te maken hebt.
>
> Bv:
> print <<EOB;
> document.write("$news");
> EOB
>
> print qq{
> document.write("$news");
> };


Als ik bijvoorbeeld dit maak:
#!/usr/bin/perl
use LWP::Simple;
print "Content-type: text/plain\n\n";
$news = get("http://www.smartcapital.be/cgi-bin/news/news.cgi");
print <<EOB;
document.write("$news");
EOB

Nog sterker...ik krijg de melding dat het script fout is.... en met

print qq{
document.write("$news");
};

krijg ik als output in mijn browser alleen:
document.write("");

Iemand nog suggesties?
Groeten,

Matthijs

P.S. Het mag wat mij betreft ook in PHP hoor. Als het maar via <script
src="plaats van het script"></script>

shaimelz
22/01/03, 19:45
Maak een template ($mijn_template) met hierin een string ($new), bijvoorbeeld

<html>$new</html>

Open de template en vul de $new met de inhoud van het opgehaalde berichtje met
behulp van onderstaande script, zodoende heb je geen javascript nodig!

# /usr/bin/perl

&print_pagina_en_vul_string;

sub print_pagina_en_vul_string {

print "Content-type: text/html \n\n";

open(FILE, $mijn_template) or die "cannot open $mijn_template: $! \n ";

while(<FILE>) {
chomp($_);
eval "print <<EOT;\n$_\nEOT";
#print "$_\n";
}

close(FILE);

exit;
}


Matthijs de Z wrote:

> > > #!/usr/bin/perl
> > > use LWP::Simple;
> > > print "Content-type: text/plain\n\n";
> > > $news = get("http://www.smartcapital.be/cgi-bin/news/news.cgi");
> > > printf "document.write\(\"$news\");\n";
> >
> > Tip: er zijn meerdere mogelijkheden om strings te printen in Perl, en een
> > aantal ervan zijn veel makkelijker als je met quotes te maken hebt.
> >
> > Bv:
> > print <<EOB;
> > document.write("$news");
> > EOB
> >
> > print qq{
> > document.write("$news");
> > };
>
> Als ik bijvoorbeeld dit maak:
> #!/usr/bin/perl
> use LWP::Simple;
> print "Content-type: text/plain\n\n";
> $news = get("http://www.smartcapital.be/cgi-bin/news/news.cgi");
> print <<EOB;
> document.write("$news");
> EOB
>
> Nog sterker...ik krijg de melding dat het script fout is.... en met
>
> print qq{
> document.write("$news");
> };
>
> krijg ik als output in mijn browser alleen:
> document.write("");
>
> Iemand nog suggesties?
> Groeten,
>
> Matthijs
>
> P.S. Het mag wat mij betreft ook in PHP hoor. Als het maar via <script
> src="plaats van het script"></script>

Matthijs de Z
22/01/03, 20:05
> Open de template en vul de $new met de inhoud van het opgehaalde berichtje
met
> behulp van onderstaande script, zodoende heb je geen javascript nodig!

Bedankt voor de genome moeite. Op zich is het binnen halen van de info op
mijn eigen server geen enkel probleem. Ik zou dan gewoon php gebruiken en
die pagina includen. Maar het gaat er juist om dat anderen heel makkelijk
met die script tag die headlines op hun site kunnen zetten, zonder dat ze
perl / PHP / iframe / ilayer moeten gebruiken. Een soortgelijk script heb ik
ooit werkend gehad op een andere server met een iets andere input. Dus het
kan wel. Als ik bijvoorbeeld

#!/usr/bin/perl
use LWP::Simple;
print "Content-type: text/plain\n\n";
printf "document.write\(\"hoi, wat dacht je hiervan\");\n";

en dat probeer op te halen via

<script
scr="http://www.beursanalyse.info/cgi-bin/test/newsextern.pl"></script>

Dan komt er gewoon heel mooi 'hoi, wat dacht je hiervan' te staan. Maar
ja...ik krijg het niet voor elkaar. Ik heb zelf al even met PHP geprobeert
om met eregi replace alle " te vervangen door \". Nu weet ik niet of ik het
fout heb gedaan, of dat het gewoon niet werkt (het hele script stond in
PHP), maar ik kreeg niets te zien.
Groeten,

Matthijs

robert
22/01/03, 20:25
Matthijs de Z <haalallesvoorhetstreepjeplushetstreepjezelfweg-mldz@hotmail.com>:
> Als ik bijvoorbeeld dit maak:
> #!/usr/bin/perl
> use LWP::Simple;
> print "Content-type: text/plain\n\n";
> $news = get("http://www.smartcapital.be/cgi-bin/news/news.cgi");
> print <<EOB;
> document.write("$news");
> EOB
>
> Nog sterker...ik krijg de melding dat het script fout is....

En welke melding krijg je dan? Als je een melding krijgt dat EOB niet
gevonden kan worden moet je ervoor zorgen dat er geen spaties of tabs
achter het tweede voorkomen van EOB staan.

> print qq{
> document.write("$news");
> };
>
> krijg ik als output in mijn browser alleen:
> document.write("");

Dan doet de get() het niet. Helaas doe je geen errorcheck waarbij je dat
zou kunnen zien. Maaruh, waarom niet simpel een IFRAME gebruiken?

--
robert

Matthijs de Z
23/01/03, 00:45
> En welke melding krijg je dan? Als je een melding krijgt dat EOB niet
> gevonden kan worden moet je ervoor zorgen dat er geen spaties of tabs
> achter het tweede voorkomen van EOB staan.

Ik krijg gewoon niets te zien. En dat zonder fouten ;-)

> > print qq{
> > document.write("$news");
> > };
> >
> > krijg ik als output in mijn browser alleen:
> > document.write("");

> Dan doet de get() het niet. Helaas doe je geen errorcheck waarbij je dat
> zou kunnen zien. Maaruh, waarom niet simpel een IFRAME gebruiken?

Omdat dat veel nadelen heeft en niet door iedere browser gebruikt kan
worden.
Daarnaast is het makkelijker om het te integreren op die manier zoals ik het
graag zou willen.
groeten,

Matthijs