Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Уязвимости (https://forum.antichat.xyz/forumdisplay.php?f=74)
-   -   Как получать данные с сайта на свой сайт: (https://forum.antichat.xyz/showthread.php?t=46554)

inlanger 12.08.2007 00:36

Как получать данные с сайта на свой сайт:
 
Есть куча сайтов типа:ссылка на сайт. Где они берут данные? Или может подскажите как с этих сайтов эти данные взять.

Piflit 12.08.2007 00:40

Цитата:

Сообщение от vovan x100
как с этих сайтов эти данные взять.

парсинг. но брать чужое нехорошо. поэтому смотри канал "спорт"

inlanger 12.08.2007 00:45

Ну, понятно, что чужое брать нехорошо. Но какой файл парсить?

Piflit 12.08.2007 00:48

Цитата:

Сообщение от vovan x100
Ну, понятно, что чужое брать нехорошо. Но какой файл парсить?

какой файл? не знаю, какой файл. код странички с результатами парсь

inlanger 12.08.2007 00:50

Эээ... разве это так делается? По-моему эти данные должны где-то быть, чтобы их все подобные сайты брали... Разве не так? Они же не в ручную пишут.

Dr.Frank 12.08.2007 05:30

Ищи ссылку типа RSS, если нету, то скорее всего
Цитата:

код странички с результатами парсь

Dr.Frank 12.08.2007 05:31

а вобще внизу страницы ссылка есть Get scores on your site for free

inlanger 12.08.2007 11:17

Мне не надо всю таблицу брать. Мне нужны отдельные матчи, которые меня интересуют.

groundhog 12.08.2007 11:24

Тебе же сказали - прасить...

Raz0r 12.08.2007 11:31

Цитата:

Мне нужны отдельные матчи, которые меня интересуют.
А вручную дак никак? И как ты это будешь делать автоматом если тебя не все подряд интересует? Вручную делай, Кулибин епрст.

inlanger 12.08.2007 11:43

Цитата:

Сообщение от groundhog
Тебе же сказали - прасить...

Как чужую страницу парсить?

*D1VER 12.08.2007 11:58

мож так?
$straniza=filegetcontents("http://site.ru/index.html");
echo"$straniza";

groundhog 12.08.2007 12:12

*D1VER, у нормального прова отключён вызов filegetcontents с удалённой урлы... Так что на 99% это гиблое дело...

vovan x100, если у тебя нормальный хостер, есть PHP с сокетами, то алгоритм прост:
1) Посылаешь GET запрос через сокеты и получаешь содержимое страницы;
2) С помощью регулярных выражений (или иными функциями) ищёшь/вырезаешь интересующие тебя врагменты;
3) Найденные фрагменты выводишь/сохраняешь/обрабатываешь;

Для примера привожу функцию на PHP для получения страницы:

Цитата:

function getContentFromRemoteResource ($remoteUrl, &$pageContent) {
$urlData = parse_url($remoteUrl);

if (!isset($urlData["host"])) return false;
if (!isset($urlData["port"])) $urlData["port"] = 80;
if (!isset($urlData["path"])) $urlData["path"] = "/";

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) return false;

$result = socket_connect($socket, $urlData["host"], $urlData["port"]);
if (!$result) return false;

$resource = $urlData["path"];
if (isset($urlData["query"])) $resource .= "?{$urlData["query"]}";

$sendData = "GET {$resource} HTTP/1.1\r\n";
$sendData .= "Host: {$urlData["host"]}\r\n";
$sendData .= "User-Agent: Antichat Evil Fetcher\r\n";
$sendData .= "Accept: */*\r\n";
$sendData .= "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\r\n";
$sendData .= "Pragma: no-cache";
$sendData .= "Connection: Close\r\n\r\n";

$ret = socket_write($socket, $sendData, strlen($sendData));
if (!$ret) return false;

$buffer = "";
while ($data = socket_read($socket, 1024)) {
$buffer .= $data;
}

socket_close($socket);

list($headers, $content) = preg_split("/\r\n\r\n/", $buffer, 2);
if (strlen($content) <= 0 || strlen($headers) <= 0) return false;

$httpCode = intval(substr($headers, 9, 3));
if ($httpCode != 200) return false;

$pageContent = $content;

return true;
}
Дальше содержимое из $pageContent парсишь с нужными тебе критериями для поиска необходимой информации.

inlanger 12.08.2007 12:21

у сеюя на апаче такое не сотворишь?

inlanger 12.08.2007 12:24

белая страница...

inlanger 12.08.2007 12:26

Цитата:

Notice: Undefined variable: pageContent in s:\home\localhost\www\test.php on line 48
[ убрать подсказку | никогда больше не показывать ]

Это предупреждение, вероятнее всего, возникает вследствие высокого уровня контроля ошибок в PHP, по умолчанию установленного в Денвере (E_ALL). Такой режим вывода ошибок является рекомендуемым и сильно помогает при отладке скриптов. Однако множество готовых скриптов требуют более низкого уровня ошибок.

Вы можете установить более слабый контроль ошибок одним из следующих способов:

* Впишите в скрипты строчку:

Error_Reporting(E_ALL & ~E_NOTICE);

Этот способ особенно удобен, если в скрипте есть один файл (конфигурационный), который подключается всеми остальными.
* Рекомендуемый способ. Создайте в директории со скриптом файл .htaccess следующего содержания:

php_value error_reporting 7

* Исправьте в /usr/local/php/php.ini значение error_reporting на E_ALL & ~E_NOTICE. Этот способ не является рекомендуемым и может привести к серьезным неудобствам при отладке!
во как матерится

А на серваке хостера:
Цитата:

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, support@freehostia.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Apache/1.3.33 Server at ?????????.org.ua Port 80

groundhog 12.08.2007 12:53

У себя на апачах, это легко можно сотворить... Странно, проверил - всё работает... Вот код + пример вызова:
Цитата:

<?php

function getContentFromRemoteResource ($remoteUrl, &$pageContent) {
$urlData = parse_url($remoteUrl);

if (!isset($urlData["host"])) return false;
if (!isset($urlData["port"])) $urlData["port"] = 80;
if (!isset($urlData["path"])) $urlData["path"] = "/";

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) return false;

$result = socket_connect($socket, $urlData["host"], $urlData["port"]);
if (!$result) return false;

$resource = $urlData["path"];
if (isset($urlData["query"])) $resource .= "?{$urlData["query"]}";

$sendData = "GET {$resource} HTTP/1.1\r\n";
$sendData .= "Host: {$urlData["host"]}\r\n";
$sendData .= "User-Agent: Antichat Evil Fetcher\r\n";
$sendData .= "Accept: */*\r\n";
$sendData .= "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\r\n";
$sendData .= "Pragma: no-cache";
$sendData .= "Connection: Close\r\n\r\n";

$ret = socket_write($socket, $sendData, strlen($sendData));
if (!$ret) return false;

$buffer = "";
while ($data = socket_read($socket, 1024)) {
$buffer .= $data;
}

socket_close($socket);

list($headers, $content) = preg_split("/\r\n\r\n/", $buffer, 2);
if (strlen($content) <= 0 || strlen($headers) <= 0) return false;

$httpCode = intval(substr($headers, 9, 3));
if ($httpCode != 200) return false;

$pageContent = $content;

return true;
}



if (!getContentFromRemoteResource("http://ya.ru", $yaRuContent))
die("Could not fetch content from remote host");

print("<pre>");
var_dump($yaRuContent);
print("</pre>");

?>
А Internal Server Error может быть вызван отсутствием поддержки сокет на стороне провайдера... В любом случае, откатай сначала локально скрипт и убедись, что он работает... Проверь, правильно ли сделал вызов...

inlanger 12.08.2007 14:03

Сокеты закрыты...
Цитата:

Fatal error: Call to undefined function: socket_create() in /home/www/sport.inlanger.org.ua/test2.php on line 61
есть ещё выход, кроме как хостера менять?

inlanger 12.08.2007 14:14

О-па... на другом хостинге заработало! А теперь тупой вопрос... Как парсить содержимое?

NOmeR1 12.08.2007 14:15

Ты PHP знаешь?

Попробуй мою функцию.
PHP код:

<?
function parse($site,$ot,$do)
{
     
$fp file_get_contents($site);
     
preg_match_all('#'.$ot.'(.*?)'.$do.'#is'$fp$parsePREG_SET_ORDER);
     foreach(
$parse as $out) {
          echo 
$out[1];
     }
}
parse('сайт.ру','<ОТ>','</ДО>'); // 'сайт','от какого тега','до кокого тега'
?>

P.S. Не проверял.

groundhog 12.08.2007 14:22

NOmeR1, боюсь, на сложных документах результат будет неожиданный... Жадность поиска не регулируется... Думаю лучше ограничиться минимальной, т.е. добавить модификатор U (#isU).


Время: 06:12