[PHP] logowanie do xml przez php

0

Witam ! Próbuję wyciągnąć informację z xmlów z tej strony: http://online.sokker.org/xmlinfo.php
Jednak nie umiem sobie poradzić z uzyskaniem dostępu przez php dla strony. Istnieje także możliwość uzyskania praw poprzez ciasteczko XMLSESSID, aczkolwiek z tym także nie mogę sobie poradzić.

<?
$c = curl_init();
curl_setopt($c, CURLOPT_URL, 'http://online.sokker.org/start.php?session=xml');
curl_setopt($c, CURLOPT_POST, 1);
curl_setopt($c, CURLOPT_POSTFIELDS, 'ilogin=moj_login&ipassword=moje_haslo');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
 $page = curl_exec($c);
curl_close($c);

$xml = simplexml_load_file('http://online.sokker.org/xml/player-13215651.xml');
 echo $xml -> countryID;

?>
</url>
0

Ustaw żeby CURL zapisywał ciasteczka (curl_setopt manual) i ten plik:

http://online.sokker.org/xml/player-13215651.xml

Po autoryzacji też pobierz cURLem przedstawiając ciasteczka, a potem wystarczy otworzyć wynik simplexmlem...

0

Hmmm zapomniałem dodać, że w php dopiero raczkuję:

curl_setopt($c, CURLOPT_COOKIESESSION, true);

Po autoryzacji też pobierz cURLem przedstawiając ciasteczka, a potem wystarczy otworzyć wynik simplexmlem...

Tu nie za bardzo wiem o co chodzi :-)

Tak jak pisałem wcześniej, autoryzacja nie jest wymagana, można także korzystać z gotowego XMLSESSID zapisanego w ciasteczku, skrypt będzie wykonany tylko raz.

0

Jakoś się udało, aczkolwiek nastąpił inny problem... Webserv oraz XAMPP wyświetlają błąd:

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in C:\xampp\htdocs\index2.php:30 Stack trace: #0 C:\xampp\htdocs\index2.php(30): SimpleXMLElement->__construct('') #1 {main} thrown in C:\xampp\htdocs\index2.php on line 30

Z biblioteką curla sobie poradziłem ale tu wymiękam...

0

Debugowanie nie boli?
var_dump() zmiennej daj zanim ją wstawisz w simplexml_parse_string.

0

Poradziłem sobie, problem był błachy, miałem zablokowany port przez firewall. Teraz znów coś innego :-)

<?php

error_reporting(0);
$file = "baza.txt";
set_time_limit(86400);

//logowanie i ustawienie ciastka

$postFields['ilogin'] = "login";
$postFields['ipassword'] = "hasło";

$c = curl_init();

curl_setopt($c, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie_xml.txt');
curl_setopt($c, CURLOPT_URL, 'http://online.sokker.org/start.php?session=xml');
curl_setopt($c, CURLOPT_POST, 1);
curl_setopt($c, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_exec($c);

$i=1;
// ciasto ustawione pobieram dane z wskazanego url
//for( $x = 7000000; $x <= 17525825; $x++ ){
    for( $x = 7685443; $x <= 17525825; $x++ ){
//
$url="http://online.sokker.org/xml/player-".$x.".xml";

curl_setopt($c, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie_xml.txt');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_URL, $url);
$dane = curl_exec($c);

// parsuję dane i wyświetlam

@$xml = new SimpleXMLElement($dane);

 $countryid=$xml[$x]->countryID;
 $id=$xml[$x]->ID;
 $age=$xml[$x]->age;
 $name=$xml[$x]->name;
 $surname=$xml[$x]->surname;
 $value=$xml[$x]->value;
 $value=$value/4;
If ($countryid==90){
   $tablicaid[$i]=$id;
   $tablicaage[$i]=$age;
   $tablicaname[$i]=$name;
   $tablicasurname[$i]=$surname;
   $tablicavalue[$i]=$value;
     $tekst='[pid='.$tablicaid[$i].']'.$tablicaname[$i].' '.$tablicasurname[$i].' Age: '.$tablicaage[$i].' '.$tablicavalue[$i].' euro[/pid]';
   $i=$i+1;

$fp=fopen("$file", "a");
fwrite($fp, $tekst);
fwrite($fp, '<br />');
}

}

?>

Pętla wykonuje się 4080 razy i skrypt się zatrzymuje. Bez żadnego błędu. Błędy mam wyłączone, ponieważ przy każdej pętli wyświetlane są warningi:

Warning: main() [function.main]: Cannot add element player number 7685443 when only 0 such elements exist in C:\Program Files\WebServ\httpd\index2.php on line 37

Warning: main() [function.main]: Cannot add element player number 7685443 when only 0 such elements exist in C:\Program Files\WebServ\httpd\index2.php on line 38

Warning: main() [function.main]: Cannot add element player number 7685443 when only 0 such elements exist in C:\Program Files\WebServ\httpd\index2.php on line 39

Warning: main() [function.main]: Cannot add element player number 7685443 when only 0 such elements exist in C:\Program Files\WebServ\httpd\index2.php on line 40

Warning: main() [function.main]: Cannot add element player number 7685443 when only 0 such elements exist in C:\Program Files\WebServ\httpd\index2.php on line 41

Warning: main() [function.main]: Cannot add element player number 7685443 when only 0 such elements exist in C:\Program Files\WebServ\httpd\index2.php on line 42
0

Poczytaj o max_execution_time.

Generalnie nie powiedziałbym, że PHP będzie idealnym narzędziem do pobrania i sparsowania 10 milionów dokumentów XML ściąganych z internetu. Da się to zrobić, ale...

0

Tylko ten xml wymaga autoryzacji, a z tym sobie nie poradzę (chociażby w delphi).

Sprawa jest o tyle dziwna, że raz się pętla wykonała około 100 tys razy, a za drugim razem już tylko 2 tys. Jest to może wina konfiguracji webserva ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1