Немного фона:
В сети есть игра, в которую я играю под названием Doomlord ...
Я в клане. Я пытаюсь представить статистику по игрокам, которые актуальны для нас.
Для этого я должен получить имена игроков с веб-страницы, к которой я могу получить доступ только после входа в систему. Страница:
www.doomlord.net/index.php?m=szovetseg&sub=reszletes_statisztikak
но это приведет вас только к странице входа в игру, а не к реальной странице.
Чтобы добраться до реальной страницы, я использую cURL (чтобы войти в систему и получить cookie, который позволяет мне перемещаться по страницам).
Для извлечения данных из таблицы я использую класс JS_extractor.
Проблема:
Отдельно они работают, но при совместном использовании они выкарабкиваются.
Что я попробовал:
1)
Я использовал cURL и показал, что смог найти нужную мне страницу
смотрите здесь: doomlord.tamtek.net/gettable.php
2)
Я добавил js_extractor и cURL получает страницу, но js_extractor не получает данные
смотрите здесь: doomlord.tamtek.net/gettable2.php
3)
Я вошел на сайт doomlord вручную, зашел на нужную мне страницу, просмотрел, а затем «скопировал и вставил» источник. Затем я загрузил исходный код в виде html-страницы на свой веб-сайт, где я использовал js_extractor, и он отлично получил нужную таблицу в массив для дальнейшей манипуляции ...
Источник страницы: doomlord.tamtek.net/doomtest2.html
Результат js_extractor: doomlord.tamtek.net/gettable3.php
А для кода:
(прошу прощения за некоторые дополнительные записи, но я пытаюсь сделать это как можно более наглядным)
Это код cURL, который я использую:
$ckfile = tempnam ("tmp", "cookie.tmp");
$fields_string='';
$fields = array(
'username'=>urlencode(SITE_USER),
'jelszo'=>urlencode(SITE_PASS),
'vilag'=>urlencode(SITE_WORLD),
'tev'=>urlencode(SITE_TEV),
);
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
//rtrim($fields_string,'&');
$fields_string=substr($fields_string,0,-1);
//print_r($fields_string);
$ch=curl_init();
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt($ch,CURLOPT_URL,'http://www.doomlord.net');
curl_setopt($ch,CURLOPT_COOKIEJAR,$ckfile);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,20);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,3);
curl_setopt($ch,CURLOPT_MAXREDIRS,10);
$connect=curl_exec($ch);
$response1=curl_getinfo( $ch );
curl_close($ch);
$ch=curl_init();
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt($ch,CURLOPT_URL,'http://www.doomlord.net/index.php?m=szovetseg&sub=reszletes_statisztikak');
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,20);
curl_setopt($ch,CURLOPT_COOKIEFILE,$ckfile);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,3);
curl_setopt($ch,CURLOPT_MAXREDIRS,10);
$connect=curl_exec($ch);
$response1=curl_getinfo( $ch );
print_r($connect);
// print_r($response1);
curl_close($ch);
Это код cURL и js_extractor вместе:
<?php
session_start();
require_once('inc/constant.php');
require_once('inc/function.php'); //basic functions
$ckfile = tempnam ("tmp", "cookie.tmp");
$fields_string='';
$fields = array(
'username'=>urlencode(SITE_USER),
'jelszo'=>urlencode(SITE_PASS),
'vilag'=>urlencode(SITE_WORLD),
'tev'=>urlencode(SITE_TEV),
);
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
//rtrim($fields_string,'&'); //tried both commented out and not
$fields_string=substr($fields_string,0,-1);
$ch=curl_init();
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt($ch,CURLOPT_URL,'http://www.doomlord.net');
curl_setopt($ch,CURLOPT_COOKIEJAR,$ckfile);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,20);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,3);
curl_setopt($ch,CURLOPT_MAXREDIRS,10);
$connect=curl_exec($ch);
$response1=curl_getinfo( $ch );
curl_close($ch);
$ch=curl_init();
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt($ch,CURLOPT_URL,'http://www.doomlord.net/index.php?m=szovetseg&sub=reszletes_statisztikak');
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,20);
curl_setopt($ch,CURLOPT_COOKIEFILE,$ckfile);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,3);
curl_setopt($ch,CURLOPT_MAXREDIRS,10);
$connect=curl_exec($ch);
$response1=curl_getinfo( $ch );
print_r($connect); // just to show that i have connected
// print_r($response1);
set_include_path(get_include_path() . PATH_SEPARATOR . './library/');
require_once 'JS/Extractor.php';
//$extractor = new JS_Extractor(file_get_contents('http://www.doomlord.net/index.php?m=szovetseg&sub=reszletes_statisztikak'));
$extractor = new JS_Extractor(file_get_contents($connect)); // tried both ways
echo "</br />";
echo "This is the extractor:</br />";
var_dump($extractor);
echo "</br />";
echo "</br />";
$body = $extractor->query("body")->item(0);
echo "</br />";
echo "This is the body:</br />";
var_dump($body);
echo "</br />";
echo "</br />";
$table = $body->query("//table[@class=\"rstatisztika_tabla\"]")->item(0);
echo "</br />";
echo "This is the table:</br />";
var_dump($table);
echo "</br />";
echo "</br />";
$data = $table->extract(array("tr", "td"));
echo "</br />";
echo "This is the data:</br />";
var_dump($data);
echo "</br />";
echo "</br />";
curl_close($ch);
//}
?>
Это код js_extactor, который я использую для получения таблицы после размещения источника на моем сайте:
<?php
set_include_path(get_include_path() . PATH_SEPARATOR . './library/');
require_once 'JS/Extractor.php';
$extractor = new JS_Extractor(file_get_contents('http://doomlord.tamtek.net/doomtest2.html'));
echo "</br />";
echo "This is the extractor:</br />";
var_dump($extractor);
echo "</br />";
echo "</br />";
$body = $extractor->query("body")->item(0);
echo "</br />";
echo "This is the body:</br />";
var_dump($body);
echo "</br />";
echo "</br />";
$table = $body->query("//table[@class=\"rstatisztika_tabla\"]")->item(0);
echo "</br />";
echo "This is the table:</br />";
var_dump($table);
echo "</br />";
echo "</br />";
$data = $table->extract(array("tr", "td"));
echo "</br />";
echo "This is the data:</br />";
var_dump($data);
echo "</br />";
echo "</br />";
?>
и действительно странная часть:
Когда я запускаю скрипт так:
$extractor = new JS_Extractor(file_get_contents($connect)); // this is line 53
, я тоже получаю этот кусочек красоты:
*Warning*: file_get_contents(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://...@u="; var wa_referrer = "@r="; if(wa.WACID==null) { wa.WACID=wa.generateID('A'); wa.setCookie(wa.WACIDName,wa.WACID,wa.getTopDomain(wa.getDomain(document.URL))); } same = same + "@c=" + wa.WACID; if(screen) felbontas='@s='+screen.width+'x'+screen.height; if(document.referrer) wa_referrer=wa_referrer+document.referrer; if(document.URL) wa_url=wa_url+document.URL; same = same + felbontas + wa_url + wa_referrer; //--> </SCRIPT> </head> <body> <SCRIPT language="JavaScript"> <!-- document.write('<!-- Medián WebAudit HarmoNet Vegzetur 1/2 --><img style="position:absolute;top:-100px;left:-100px" src="http://audit.median.hu/cgi-bin/track.cgi?uc=12283086407878&dc=1&ui='+same+'" width="1" height="1">'); //--> </SCRIPT> <NOSCRIPT> <!-- M in */home2/tamtek/public_html/doomlord/gettable2.php* on line *53*
, что интересно, потому что он падает как 57 строк кода с веб-страницы между
*Warning*: file_get_contents(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://
и
@u="; var wa_referrer = "@r=";
в первой строке ...
затем печатает еще немного, а затем игнорирует остальные ... и выдает ошибку в строке 53
Полагаю, это приводит к интерпретации специального символа, из-за которого остальная часть страницы исчезает, но я понятия не имею, что это может быть и как от него избавиться ...
У кого-нибудь есть предложения, что может быть не так?
Кстати, здесь вы можете найти JS Extractor ...
jacksleight.com/old/blog/2008/02/10/js-extractor-and-the-death-of-table-extractor
А если вы любите играть в БЕСПЛАТНУЮ игру и действительно хотите помочь, вы можете присоединиться здесь:
www.doomlord.net/?kar=147
Вам нужен только адрес электронной почты и ничего больше.
Убедитесь, что вы выбрали алмазную орду (иначе вы не сможете присоединиться к моему клану и сделать это бесполезным упражнением)
И присоединяйтесь к моему клану, который называется «Girlfight» (это единственный способ для вас перейти на исходную страницу www.doomlord.net/index.php?m=szovetseg&sub=reszletes_statisztikak
Но даже не присоединяясь, я думаю, что приведу здесь достаточно данных, чтобы надеяться увидеть, что происходит ...
Если вы думаете, что можете помочь, но вам нужно больше данных, пожалуйста, не стесняйтесь спрашивать ...
Спасибо.
Тадсон