Jump to content
  • 0

Вывод данных с другого сайта


MefistofeleS
 Share

Question

Как можно сделать так, что бы на сайте выводилась информация с другого? например, статус персонажа в игре как тут http://murdrum.ru/char/Obscurus

Подскажите, пожалуйста.

Edited by MefistofeleS
Link to comment
Share on other sites

Recommended Posts

  • 0

Как можно сделать так, что бы на сайте выводилась информация с другого? например, статус персонажа в игре как тут http://murdrum.ru/char/Obscurus

Подскажите, пожалуйста.

Читайте страницу и ищите нужную вам строчку:


<tr><td style="height:26px; width:70px; text-align:left; vertical-align:bottom; border-bottom:1px solid #f6f3ec;">Статус</td><td style="text-align:left; vertical-align:bottom;"><span style='color:green;'>Online</span></td></tr>

Конечно это лучше делать отдельно через cron и с периодичностью обновлять результат.

Link to comment
Share on other sites

  • 0

Читайте страницу и ищите нужную вам строчку:


<tr><td style="height:26px; width:70px; text-align:left; vertical-align:bottom; border-bottom:1px solid #f6f3ec;">Статус</td><td style="text-align:left; vertical-align:bottom;"><span style='color:green;'>Online</span></td></tr>

Конечно это лучше делать отдельно через cron и с периодичностью обновлять результат.

Вы меня наверное не поняли..) Мне надо что бы на другом сайте показывало онлайн етот игрок или нет? или я вас не понял. что мне ето даст?


<tr><td style="height:26px; width:70px; text-align:left; vertical-align:bottom; border-bottom:1px solid #f6f3ec;">Статус</td><td style="text-align:left; vertical-align:bottom;"><span style='color:green;'>Online</span></td></tr>

Link to comment
Share on other sites

  • 0

первый раз в жизни попробовал ради интереса регуляркой вытащить данные со страницы и че-то какая-то шляпа получилась:


$file = file_get_contents("http://murdrum.ru/char/Obscurus");
preg_match("#<td.*?>(.*?)</td>#is", $file, $td);
preg_match("#<span.*?>(.*?)</span>#is", $td[1], $span);
$r = $td[1];
echo $r;

если бы там стоял класс какой-нибудь было бы наверное попроще.

Link to comment
Share on other sites

  • 0

Вы меня наверное не поняли..) Мне надо что бы на другом сайте показывало онлайн етот игрок или нет? или я вас не понял. что мне ето даст?


<tr><td style="height:26px; width:70px; text-align:left; vertical-align:bottom; border-bottom:1px solid #f6f3ec;">Статус</td><td style="text-align:left; vertical-align:bottom;"><span style='color:green;'>Online</span></td></tr>

Да скорее всего вы меня не поняли. Как прочитать страницу по урлу написал вам Veseloff.

Далее, т.к. строка достаточно уникальна, просто проверяем на её наличие если есть, то у себя сохраняем как статус онлайн, если нет - оффлайн

Link to comment
Share on other sites

  • 0

:) в html я как то шарю, а вот php совсем тьма...можете на примере показать?


$string = "Искомая строка";
$url = "http://адрес_страницы";
$page = file_get_contents($url);
if(stripos($page, $string)) Echo "Юзер онлайн";

file_get_contents()

stripos()

Link to comment
Share on other sites

  • 0

Большое спасибо!)

stripos() это для того что бы не считывать каждый раз всю страницу? не понял я чего то..

мне надо что бы при онлайн отображалась одна картинка, а прри оффлайн другая

как это можно сделать правильно? у меня только это получилось


<?php $string = "<span style='color:green;'>Online</span>";
$url = "http://murdrum.ru/char/Obscurus";
$page = file_get_contents($url);
if(stripos($page, $string)) Echo '<img src="image/ONLINE.GIF" width="7" height="7" /> <a href="http://murdrum.ru/char/Obscurus">Obscurus</a>';?>

<?php $string = "<span style='color:darkred;'>Offline</span>";
$url = "http://murdrum.ru/char/testdrive";
$page = file_get_contents($url);
if(stripos($page, $string)) Echo '<img src="image/OFFLINE.GIF" width="7" height="7" /> <a href="http://murdrum.ru/char/Obscurus">Obscurus</a>';?>

на странице будет около 30 таких статусов...грузит жутко долго..как-нибудь можно ето упростить?

Edited by MefistofeleS
Link to comment
Share on other sites

  • 0

Давайте ссылку на страницу, которую нужно спарсить — попробую что-нибудь посмотреть. Кстати, а администрация сайта не против, что вы будете оттуда что-то получать?

Link to comment
Share on other sites

  • 0

Давайте ссылку на страницу, которую нужно спарсить — попробую что-нибудь посмотреть. Кстати, а администрация сайта не против, что вы будете оттуда что-то получать?

Нет, мы делаем сайт гильдии из этой игры а берем только статусы игроков)

http://murdrum.ru/char/obscurus

вот их этой страницы надо вытянуть статус игрока. и в зависимости от статуса что бы показывало картинку

<img src="image/ONLINE.GIF" width="7" height="7" />

<img src="image/ONFFLINE.GIF" width="7" height="7" />

В общем то работает...но страницу грузит более минуты т.к. таких статусов он считывает около 30 штук

Link to comment
Share on other sites

  • 0

Окей. Я бы сделал так. Пишем скрипт по такому принципу:

1. Создаём массив игроков. Например, в БД.

CREATE TABLE `playes` (`name` VARCHAR(50), `status` ENUM('online', 'offline'), KEY `name` (`name`))ENGINE=MyISAM

2. Делаем выборку из этой таблицы

SELECT `name` FROM `players`

3. Чтобы понять онлайн игрок или нет нам надо найти в странице следующие вхождения

<span style='color:green;'>Online</span>

если человек онлайн

<span style='color:darkred;'>Offline</span>

если нет. Поскольку варианта всего два, то ограничимся всего одним поиском.

4. Итак, для каждой записи получаем содержимое страницы при помощи file_get_contents(), потом ищем вхождение нужной нам подстроки при помощи strpos().

5. Результат записываем в БД.

6. Скрипт ставим на запуск, допустим, каждые пять минут (или сколько там надо?) любым планировщиком.

7. При загрузке страницы просто получаем статусы игроков из БД.

Всё, готово.

Link to comment
Share on other sites

  • 0

А как отыскать элемент с динамически меняющимся содержимым? Например, есть таблица топ игроков, и нужно найти игрока с рейтингом "1". А потом выводить его ник, другие данные.

Найти ячейку с рейтом "1" можно, а остальные та будут меняться...

<tr>
<td>Рейтинг</td>
<td>Ник</td>
<td>Статус</td>
<td>...</td>
</tr>

Edited by grafnet
Link to comment
Share on other sites

  • 0

А как отыскать элемент с динамически меняющимся содержимым? Например, есть таблица топ игроков, и нужно найти игрока с рейтингом "1". А потом выводить его ник, другие данные.

Найти ячейку с рейтом "1" можно, а остальные та будут меняться...

<tr>
<td>Рейтинг</td>
<td>Ник</td>
<td>Статус</td>
<td>...</td>
</tr>

Используйте для этого регулярные выражения preg_match()

Link to comment
Share on other sites

  • 0

Используйте для этого регулярные выражения preg_match()

или если с регулярками тяжко, можно как вариант через xPath попробовать. хотя в php работа с Dom тоже не сахар...

Link to comment
Share on other sites

  • 0

Попробовал так:

<?php
$url = "http://myurl.ru/";
$file = file_get_contents($url);
preg_match("#<td.*><a.*>(.*)</a></td>#u", $file, $usr);
$u = $usr[1];
echo $u;

В результате получил первое совпадение. А как получить еще два (или более) совпадений? Если через preg_match_all, то как тогда ограничить результаты совпадений до N-го количества? Подскажите плз.

Edited by grafnet
Link to comment
Share on other sites

  • 0

Не ограничевать? А если у меня 1000 совпадений из которых нужны только первые 3? Тогда лишние 997 значений тоже попадут в массив. Разве это не замедлит работу скрипта?

Edited by grafnet
Link to comment
Share on other sites

  • 0

<?php
$url = "http://myurl.ru/";
$file = file_get_contents($url);
$found=array();
for ($__=0; $__ < 3; $__++)
{
preg_match("#<td.*><a.*>(.*)</a></td>(.+)$#su", $file, $usr);
$found[] = $usr[1];
$file = $usr[2];
}
?>

Я имел в виду что-то такое

//Вот же дурной хайлайтер

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy