Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Взять данные с другого сайта 
:(
    Опции темы
Sice
  Дата 4.1.2009, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Радио Онлайн
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.12.2007

Репутация: 0
Всего: 0



Подскажите пожалуйста, как взять определенные данные с другого сайта? Вот например сайт сервера (по онлайн игре) выводит количество онлайн персонажей. Как мне взять эту выводимую цифру с другого сайта?

Заранее спасибо.
PM MAIL WWW   Вверх
egrik
Дата 4.1.2009, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 10.11.2006
Где: Voronezh

Репутация: нет
Всего: 1



CURL - для получения данных, далее парсить.
PM MAIL ICQ Skype   Вверх
SneG0K
Дата 4.1.2009, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Код

function parseUrl($url, $timeout = 5)
{
   $url_parsed = parse_url($url);
   $host = $url_parsed["host"];
   if ($url == '' || $host == '') {
       return false;
   }
   $hostName = gethostbyname($host);
   $ip = ip2long($hostName);
   if ($ip === -1 || $ip === false) {
        return false;
   }
   $port = ($url_parsed["port"] == 0 ? 80 : $url_parsed["port"]);
   $path = (empty($url_parsed["path"]) ? '/' : $url_parsed["path"]);
   $path.= (!empty($url_parsed["query"]) ? '?'.$url_parsed["query"] : '');
   $out = "GET $path HTTP/1.0\r\nHost: $host\r\nConnection: Close\r\n\r\n";
   $fp = fsockopen($host, $port, $errno, $errstr, intval($timeout));
   if (!$fp) {
       return false;
   }
   stream_set_timeout($fp, intval($timeout));
   fwrite($fp, $out);
   $headers = '';
   $content = '';
   $buf = '';
   $isBody = false;
   while (!feof($fp)) {
        $buf = fgets($fp, 1024);
        if ($isBody) {
            $content .= $buf;
        } else {
            $headers .= $buf;
        }
        if ($buf == "\r\n" ) {
            $isBody = true;
        }
   }
   preg_match('#HTTP/1.[0-9]{1}\s+([0-9]{3}).*#is', $headers, $match);
   fclose($fp);
   if($match[1] != 200) {
       return false;
   }
   return array('headers'=>$headers,'body'=>$content);
}

PM WWW Skype   Вверх
skyboy
Дата 4.1.2009, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



разобраться сначала с сайтом.
как данніе  передаются? или генерируются?
а то потом окажется, что данніе отображаются посредством флеш-контрола и встанет вопрос о "распарсивании" флеш-ролика...
PM MAIL   Вверх
Sice
Дата 4.1.2009, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Радио Онлайн
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.12.2007

Репутация: 0
Всего: 0



Цитата(skyboy @ 4.1.2009,  10:40)
разобраться сначала с сайтом.
как данніе  передаются? или генерируются?
а то потом окажется, что данніе отображаются посредством флеш-контрола и встанет вопрос о "распарсивании" флеш-ролика...

Данные генерируются простым запросом в базу данных, флеш-роликов нет smile 

SneG0K, большое спасибо, но у меня он почему-то не заработал..
PM MAIL WWW   Вверх
egrik
Дата 4.1.2009, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 10.11.2006
Где: Voronezh

Репутация: нет
Всего: 1



Цитата(Sice @ 4.1.2009,  12:58)
SneG0K, большое спасибо, но у меня он почему-то не заработал..

Покажи, как вызывал функцию с примером на конкретный сайт.
PM MAIL ICQ Skype   Вверх
Sice
  Дата 5.1.2009, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Радио Онлайн
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.12.2007

Репутация: 0
Всего: 0



Цитата(egrik @ 4.1.2009,  23:07)
Цитата(Sice @ 4.1.2009,  12:58)
SneG0K, большое спасибо, но у меня он почему-то не заработал..

Покажи, как вызывал функцию с примером на конкретный сайт.

Код


$url = "http://onpulse.ru/";

function parseUrl($url, $timeout = 5)
{
   $url_parsed = parse_url($url);
   $host = $url_parsed["host"];
   if ($url == '' || $host == '') {
       return false;
   }
   $hostName = gethostbyname($host);
   $ip = ip2long($hostName);
   if ($ip === -1 || $ip === false) {
        return false;
   }
   $port = ($url_parsed["port"] == 0 ? 80 : $url_parsed["port"]);
   $path = (empty($url_parsed["path"]) ? '/' : $url_parsed["path"]);
   $path.= (!empty($url_parsed["query"]) ? '?'.$url_parsed["query"] : '');
   $out = "GET $path HTTP/1.0\r\nHost: $host\r\nConnection: Close\r\n\r\n";
   $fp = fsockopen($host, $port, $errno, $errstr, intval($timeout));
   if (!$fp) {
       return false;
   }
   stream_set_timeout($fp, intval($timeout));
   fwrite($fp, $out);
   $headers = '';
   $content = '';
   $buf = '';
   $isBody = false;
   while (!feof($fp)) {
        $buf = fgets($fp, 1024);
        if ($isBody) {
            $content .= $buf;
        } else {
            $headers .= $buf;
        }
        if ($buf == "\r\n" ) {
            $isBody = true;
        }
   }
   preg_match('#HTTP/1.[0-9]{1}\s+([0-9]{3}).*#is', $headers, $match);
   fclose($fp);
   if($match[1] != 200) {
       return false;
   }
   return array('headers'=>$headers,'body'=>$content);
}

function parseUrl()

echo $content;


 smile 


Это сообщение отредактировал(а) Sice - 5.1.2009, 00:21
PM MAIL WWW   Вверх
egrik
Дата 5.1.2009, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 10.11.2006
Где: Voronezh

Репутация: нет
Всего: 1



Ну, как минимум, должно быть:

Код

$url = "http://onpulse.ru/";
$page = parseUrl($url);
echo $page['body'];


на работоспособность не проверял, но вроде все ок.
PM MAIL ICQ Skype   Вверх
Sice
Дата 5.1.2009, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Радио Онлайн
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.12.2007

Репутация: 0
Всего: 0



Цитата(egrik @ 5.1.2009,  01:16)
Ну, как минимум, должно быть:

Код

$url = "http://onpulse.ru/";
$page = parseUrl($url);
echo $page['body'];


на работоспособность не проверял, но вроде все ок.

Большое спасибо, работает, а как мне взять отдельные данные? Вот например, только цифры - это кол-во онлайн игроков?
PM MAIL WWW   Вверх
theworldcreator
Дата 5.1.2009, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 362
Регистрация: 25.8.2007
Где: Москва

Репутация: 10
Всего: 13



А вы не думали прочитать книжку вроде "PHP для чайников"? Вы не подумайте что я хочу вас обидеть, я сам начинал именно с этой книжки, но просить помощи на форуме не зная как вызвать функцию и как передать ей параметры...
PM MAIL WWW ICQ   Вверх
Sice
Дата 5.1.2009, 01:44 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Радио Онлайн
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.12.2007

Репутация: 0
Всего: 0



Цитата(theworldcreator @ 5.1.2009,  01:40)
А вы не думали прочитать книжку вроде "PHP для чайников"? Вы не подумайте что я хочу вас обидеть, я сам начинал именно с этой книжки, но просить помощи на форуме не зная как вызвать функцию и как передать ей параметры...

Если бы я этим занимался или увлекался - то непременно, а тут мне нужно просто пару операций выполнить, поэтому и прошу помощи..
PM MAIL WWW   Вверх
egrik
Дата 5.1.2009, 02:59 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 10.11.2006
Где: Voronezh

Репутация: нет
Всего: 1



Цитата(Sice @ 5.1.2009,  01:22)
а как мне взять отдельные данные? Вот например, только цифры - это кол-во онлайн игроков?

2-х функций будет достаточно:
  • http://ru2.php.net/strpos
  • http://ru2.php.net/substr

PM MAIL ICQ Skype   Вверх
ТРЕТЬ
Дата 5.1.2009, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 8.1.2006
Где: mind's gloomy corner

Репутация: нет
Всего: 1



есть подозрение, что вырвать из кода число участников онлайн (а я так понял, что число выводится где-то внутри html-кода сайта), будет гораздо проще посредством регулярного выражения. Почитать можно здесь http://phpclub.ru/detail/article/simple_regular (там еще продолжение статьи, по навигации ищи).

Просто надо "выследить" между какими наборами символов находится искомое число и под это подогнать регулярку.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.