[PHP] content van andere site halen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Proxikill
  • Registratie: Mei 2007
  • Laatst online: 18-09 18:42
Hallo,

Ik zit met een probleempje. Ik zou graag van deze pagina de wedstrijden halen. Ook de soort wedstrijd heb ik nodig. Ik zou dit dan later in mijn database willen stoppen, zodat de mensen die op mijn site komen de wedstrijd aan hun "favorieten" kunnen toevoegen.
Ik zou natuurlijk alles mooi kunnen overtypen, maar daar kruipt nogal veel werk in. Ik zou daarom aan jullie willen vragen hoe ik dit doe dmv PHP. In kan het uitlezen dmv de file() functie, maar als ik dan een explode erover gooi lukt het niet echt goed.

Alvast bedankt
Kilian

Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 20:15

Onbekend

...

In de websitebron staat dit: ONCHANGE=location=this.options[this.selectedIndex].value
Dat betekent dat de waarden apart worden opgehaald.
Je zal i.p.v. de pagina zelf de waarden van de dropdownbox via de url van het onChange event moeten opvragen en die gaan ontleden.
Aan de website zelf heb je dus niet zoveel.

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Onbekend schreef op zondag 09 november 2008 @ 18:41:
In de websitebron staat dit: ONCHANGE=location=this.options[this.selectedIndex].value
Dat betekent dat de waarden apart worden opgehaald.
Je zal i.p.v. de pagina zelf de waarden van de dropdownbox via de url van het onChange event moeten opvragen en die gaan ontleden.
Aan de website zelf heb je dus niet zoveel.
Dat slaat natuurlijk nergens op aangezien je gewoon op een nieuwe url uitkomt :Z
http://vtdl.triathlon.be/inc/kalender2.asp?l=1 bv.

Weet je zeker dat die mensen het waarderen dat je gegevens steelt van hun site? En laat eens wat code zien.

Acties:
  • 0 Henk 'm!

  • PolarBear
  • Registratie: Februari 2001
  • Niet online
Je bent er van op de hoogte dat dit onder database dan wel auteursrecht valt? En dat dit dus een economisch delict is? (althans in Nederland, zie de quote 500 rel)

Acties:
  • 0 Henk 'm!

  • Proxikill
  • Registratie: Mei 2007
  • Laatst online: 18-09 18:42
PolarBear schreef op zondag 09 november 2008 @ 19:08:
Je bent er van op de hoogte dat dit onder database dan wel auteursrecht valt? En dat dit dus een economisch delict is? (althans in Nederland, zie de quote 500 rel)
Er is intussen al een mail weg naar hen, morgen is het werkendag dus dan zal ik antwoord krijgen. Ik vermoed niet dat ze er een probleem mee zullen hebben, maar dan ben ik al zeker. Natuurlijk komt er niets online voor ze het goedgekeurd hebben :)

Qua code kan in niet veel laten zien, simpelweg omdat ik niet veel heb. Ik weet dat ik dmv file () alles in een array krijg, en met file_get_contents() alles in een sting. Hoe ik dit nu moet gaan verwerken weet ik echt niet. iK heb niet echt heel veel ervaring met php. Daarom dat ik jullie hulp wilde inroepen.

Kilian

Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 20:15

Onbekend

...

Megamind schreef op zondag 09 november 2008 @ 18:51:
[...]

Dat slaat natuurlijk nergens op aangezien je gewoon op een nieuwe url uitkomt :Z
http://vtdl.triathlon.be/inc/kalender2.asp?l=1 bv.
Je hebt gelijk. Ik haalde wat door elkaar omdat het allemaal achter elkaar stond.

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • Proxikill
  • Registratie: Mei 2007
  • Laatst online: 18-09 18:42
Ik heb zojuist nog iets ontdekt.
Hier is er geen selectiebox, maar een gewoon tabelletje. Ik zou nu enkel die stylesheet eraf moeten zien te "knippen". Dan krijg ik een mooi tabelletje en denk ik dat het met een explode zou lukken.

Kilian

Acties:
  • 0 Henk 'm!

  • Leftblank
  • Registratie: Juni 2004
  • Nu online
Ik kan je niet echt verder helpen, maar wanneer je op Google zoekt naar 'screen scraping php' moet je een heel eind kunnen komen, mocht je behalve wat je nu hebt ook nog een stuk verder willen gaan natuurlijk ;)

Acties:
  • 0 Henk 'm!

  • Proxikill
  • Registratie: Mei 2007
  • Laatst online: 18-09 18:42
Ik heb nu dit gemaakt:
PHP:
1
2
3
4
5
6
7
8
9
<?php
$data = file_get_contents("http://triathlon.be/inc/kalender2.asp"); 
$arr=split('<TD colspan=2 bgcolor=gray>', $data);
$i=1;
while (isset($arr[$i])){
    echo $arr[$i++];
}

?>

Het volgende probleem is dat ik maar 4 regeltjes krijg. Dit komt omdat m'n timeout op 30 seconden staat. Is het normaal dat het zo lang duurt, of moet ik iets anders doen?

Kilian

--edit--
Nu ging hij veel sneller, wss ergens een foutje in de verbinding.
Ik denk wel dat ik hiermee door kan werken.
Bedankt voor de hulp, en als er nog iets in de mist gaat laat ik het wel weten

[ Voor 21% gewijzigd door Proxikill op 09-11-2008 21:53 ]


Acties:
  • 0 Henk 'm!

  • Thomasje
  • Registratie: Augustus 2002
  • Laatst online: 29-05-2024

Thomasje

Semacode

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function findPos($text, $c, $start = 0){
    $pos = strpos($c, $text, $start);
    return $pos;
}

function findPosEnd($text, $c, $start = 0){
    $pos = $this->findPos($text, $c, $start);
    return ($pos==0 ? 0 : $pos + strlen($text));
}

function findPosString($text, $c, $pos=0){
    $posend = $this->findPos($text, $c, $pos);
    return substr($c,$pos,-$pos+$posend);
}


Waar $c de file is die je ingeladen hebt.

Stukje voorbeeld

PHP:
1
2
$pos = $scrape->findPosEnd("<tr class='", $c, $pos);
$check = $scrape->findPosString("'>", $c, $pos);

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
PHP:
1
2
3
4
$i=1;
while (isset($arr[$i])){
    echo $arr[$i++];
}


nooit van de foreach functie gehoord? ;)

Acties:
  • 0 Henk 'm!

  • Proxikill
  • Registratie: Mei 2007
  • Laatst online: 18-09 18:42
@Thomasje:
Wat doet juist wat? Ik zie niet echt wat het juist doet, en kan het beter ineens leren ipv cpoy/paste te gebruiken
@Cartman!:
Ik weet niet hoe ik het met foreach zover krijg dat hij het eerste resultaat niet weergeeft. Dit is nl. alles qua opmaak ed., wat ik natuurlijk niet nodig heb :)

Kilian

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Proxikill schreef op zondag 09 november 2008 @ 23:44:
@Cartman!:
Ik weet niet hoe ik het met foreach zover krijg dat hij het eerste resultaat niet weergeeft. Dit is nl. alles qua opmaak ed., wat ik natuurlijk niet nodig heb :)
Dit probleem komt eigenlijk doordat je een beetje een hack-oplossing hebt. :) Als je dingen als DOMDocument::loadHTMLFile en DOMXPath::query zou gebruiken, die er voor gemaakt zijn, dan zou je dit probleem niet hebben. Ook met bijvoorbeeld regular expressions krijg je dit probleem niet (maar dat is ook een hack bij het parsen van HTML).

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Thomasje
  • Registratie: Augustus 2002
  • Laatst online: 29-05-2024

Thomasje

Semacode

Proxikill schreef op zondag 09 november 2008 @ 23:44:
@Thomasje:
Wat doet juist wat? Ik zie niet echt wat het juist doet, en kan het beter ineens leren ipv cpoy/paste te gebruiken
@Cartman!:
Ik weet niet hoe ik het met foreach zover krijg dat hij het eerste resultaat niet weergeeft. Dit is nl. alles qua opmaak ed., wat ik natuurlijk niet nodig heb :)

Kilian
Ga er even vanuit dat je een simpel html bestand hebt:

HTML:
1
2
3
4
5
<html>
<body>
<div>test</div>
</body>
</html>


PHP:
1
2
3
4
function findPos($text, $c, $start = 0){
    $pos = strpos($c, $text, $start);
    return $pos;
}


Deze functie zoekt de positie op in een file. En met positie bedoel ik dan waar zeg maar de cursor in je bronbestand staat.

PHP:
1
2
3
4
function findPosEnd($text, $c, $start = 0){
    $pos = $this->findPos($text, $c, $start);
    return ($pos==0 ? 0 : $pos + strlen($text));
}


Deze doet in principe het zelfde maar dan geeft hij de positie terug aan het einde van de tekst die je zocht.

PHP:
1
2
3
4
function findPosString($text, $c, $pos=0){
    $posend = $this->findPos($text, $c, $pos);
    return substr($c,$pos,-$pos+$posend);
}


Stel je je doet findPosEnd("<div>", $htmlbestand) dan krijg je in dit html bestand waarschijnlijk terug 16. Het html bestand moet je namelijk inlezen met file() en dan alle newlines eruit halen. Als je dan vervolgens findPosString("</div>", $htmlbestand, 16) doet krijg je de waarde test terug.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Proxikill schreef op zondag 09 november 2008 @ 23:44:
@Cartman!:
Ik weet niet hoe ik het met foreach zover krijg dat hij het eerste resultaat niet weergeeft. Dit is nl. alles qua opmaak ed., wat ik natuurlijk niet nodig heb :)
Daar zijn natuurlijk meerdere mogelijkheden voor :) Kijk bijv. eens naar array_slice

Acties:
  • 0 Henk 'm!

  • Proxikill
  • Registratie: Mei 2007
  • Laatst online: 18-09 18:42
Bedankt voor de hulp allemaal. Ik heb daarnet antwoord gekregen op mijn vraag of het toegelanten was om die gegevens uit te lezen.
Het blijkt dat begin 2009 er een nieuwe site komt, en ze hebben mijn vraag om een xml bestand te maken door gegeven. Voorlopig kan ik dus beter even wachten...

Kilian
Pagina: 1