Avatar billede petan Nybegynder
27. august 2004 - 19:11 Der er 15 kommentarer og
1 løsning

Data grab - hente bestemte oplysninger fra en side.

Hej

Hvis man har brug for jævnligt at hente oplysninger fra en web-side, som f.eks. Sonofons priser for udlandstelefoni, se evt. dette link:

http://www.sonofon.dk/asp/udland/udlandspris.asp?LANDE_ID=&LANDE_ID=223&LANDE_ID=&LANDE_ID=&LANDE_ID=&LANDE_ID=&LANDE_ID=&LANDE_ID=&TELEFON=Indtast+nummer...

hvordan gør man det så nemmest? Kan det laves i PHP?

Vh
Petan
Avatar billede petan Nybegynder
27. august 2004 - 19:12 #1
Avatar billede petan Nybegynder
27. august 2004 - 19:13 #2
hmmm...i må selv lige klistre linket sammen for at få det til at virke.
Avatar billede petan Nybegynder
27. august 2004 - 19:16 #3
Avatar billede sukos Juniormester
27. august 2004 - 19:29 #4
Hvis ellers siden er ens opbygget hvergang, kan du bruge file()
Lige i dette tilfælde, kan du med en forløkke kikke efter "Kl:", strippe alle tags, og så få prisen.

      <td valign="top" align="center"><p>Kl: <b>00.00-24.00</b></p></td>
      <td class="altColor" valign="top" align="center"><p>Til fastnet: <b>kr. 1.31</b></p></td>
      <td valign="top" align="center"><p>Til mobil: <b>kr. 3.20</b></p></td>

bliver så til:

Kl: 00.00-24.00
Til fastnet: Kr. 1.31
Til mobil: Kr. 3.20

Men du skal nok også lige spørge om du må!
Avatar billede petan Nybegynder
27. august 2004 - 19:57 #5
Jeg har studeret php-manualen lidt, og har i første omgang prøvet at lave lidt kode hvor jeg henter hele siden i et array og derefter udskriver hver linie.

<?php

//siden hentes i en array via HTTP
$linier = file('http://www.sonofon.dk/asp/udland/udlandspris.asp?LANDE_ID=223');

//alle linier udskrives
foreach ($linier as $linie) {
  echo "$linie" . "<BR>";
}
?>

Dog er det kun en lille del af siden der bliver vist, hvor der står at jeg ikke bruger en browser der er egnet og jeg bør opdatere den...

Er der nogen der har en idé til hvordan jeg kommer videre?
Avatar billede sukos Juniormester
27. august 2004 - 20:07 #6
Hehe, jeg fik også samme problem med dette:
<?php
$find = file("http://www.sonofon.dk/asp/udland/udlandspris.asp?LANDE_ID=223", 'r');
    if($find) {
    for($i = 0; $i < count($find); $i++) {
echo $find[$i] ."<br>\n";
        if(!preg_match("/Kl:/i", $find[$i])) {
        continue;
}else{
    for($b = $i; $b < ($i+3); $b++) {
    $find[$b] = strip_tags($find[$b]);
    $find[$b] = trim($find[$b]);

    echo $find[$b] ."<br>\n";
        }
    }
}

}else{
echo"Kunne ikke åbne siden";
}
?>

Men det er vel fordi deres script IKKE finder en header som browseren sender videre?
Altså, f.eks. vil du med $_SERVER["HTTP_ACCEPT"] kunne finde hvilken browser brugeren har, og da det ikke lykkes for sonofon når ovenstående script køres, ja så viser de den "stansard" side.
Avatar billede petan Nybegynder
27. august 2004 - 20:10 #7
Det lille problem har jeg løst ved at lave url´en om til:

http://www.sonofon.dk/asp/udland/udlandspris.asp?LANDE_ID=223&browsercheck=checked

(Bemærk browsercheck=checked)
Avatar billede sukos Juniormester
27. august 2004 - 20:10 #8
ahh, selvf! :O)
Avatar billede petan Nybegynder
27. august 2004 - 20:14 #9
Dog virker scriptet du har lavet ikke helt, men det er som om den tænker hele siden igennem for at finde et "match": Umiddelbart kan jeg ikke se hvor fejlen ligger.
Avatar billede sukos Juniormester
27. august 2004 - 20:19 #10
Virker fint her?
Men hvis de laver deres side ens, som det jo også kræves for at det virker, er der jo heller ingen grund til at starte $i = 0
Så kan man jo finde det linienr. hvor kl. starter, og lægge tre til.
Avatar billede sukos Juniormester
27. august 2004 - 20:21 #11
<?php
$find = @file("http://www.sonofon.dk/asp/udland/udlandspris.asp?LANDE_ID=223&browsercheck=checked", 'r');
    if($find) {
    for($i = 528; $i < 531; $i++) {
    echo $i ." - ";
    $find[$i] = strip_tags($find[$i]);
    $find[$i] = trim($find[$i]);

    echo $find[$i] ."<br>\n";
    }
}else{
echo"Kunne ikke åbne siden";
}

?>
Avatar billede petan Nybegynder
27. august 2004 - 20:26 #12
hvis jeg afvikler det sidste script du har skrevet, får jeg dette resultat:
528 -
529 -
530 - Takster i alt pr. minut inkl. moms:
Avatar billede sukos Juniormester
27. august 2004 - 20:29 #13
hhm, det er sgutte nemt!
jeg får:

528 - Kl: 00.00-24.00
529 - Til fastnet: kr. 1.31
530 - Til mobil: kr. 3.20

i IE og NS

Men du kan jo prøve at lade det starte fra 0 igen, til slut, og se hvad linienr. du så får, hvor Kl: står
Avatar billede petan Nybegynder
27. august 2004 - 20:32 #14
Pudsigt....det virker hvis jeg afvikler det på mit webhotel.

Du har fortjent nogle point, så du må hellere smide et svar. Mange tak for hjælpen!

Hvorfor sætter man iøvrigt "@" foran "file" i linie nr. 2?
Avatar billede sukos Juniormester
27. august 2004 - 20:35 #15
@ er for ikke at få fejlmeddelser, hvis nu filen ikke findes eller deres server er nede etc.
Bruger du IIS på din egen maskine?
Avatar billede petan Nybegynder
27. august 2004 - 20:38 #16
ok, tak.

Nej, jeg bruger Apache.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB