Небольшую... можно.
Получение данных:
<?php
//Аргументы функции
//[1] - ИД клана
//[2] - ИД сервера
function clan($clan_aid, $server_aid) {
//создаем массив
$data = array();
//Создаем DOM-объект
$doc = new DOMDocument();
//получаем HTML c веб сервера Астериоса, помещаем в DOM
@$doc->loadHTMLFile("http://asterios.tm/index.php?wnd=min&cmd=clan&serv=".$
server_aid."&id=".$clan_aid);
//Проверяем количество таблиц
//Если их меньше/больше 3-х - конец, возвращаем ложь
$tables = $doc->getElementsByTagName("table");
if($tables->length != 3) {
return false;
}
$info = $tables->item(0);
//Проверяем количество заголовков третьего уровня, должно быть три
$h3 = $info->getElementsByTagName("h3");
if($h3->length != 3) {
return false;
}
//Проверяем количество элементов bold, должно быть не меньше шести
$b = $info->getElementsByTagName("b");
if($b->length < 6) {
return false;
}
unset($info);
//наполняем массив
//имя клана
$data["clan"]["name"] = (string) mb_substr($h3->item(0)->nodeValue, 5, -1);
//ИД клана - вам это не нужно
$data["clan"]["aid"] = (int) $clan_aid;
//Название сервера
$data["server"]["name"] = (string) mb_substr($b->item(0)->nodeValue, 8);
//ИД сервера - вам это не нужно
$data["server"]["aid"] = (int) $server_aid;
//Ник лидера клана
$data["clan"]["leader"] = (string) mb_substr($b->item(1)->nodeValue, 7);
//Уровень клана
$data["clan"]["level"] = (int) mb_substr($b->item(2)->nodeValue, 5);
//Замок/Крепость, если есть
$data["clan"]["castle"] = (string) mb_substr($b->item(3)->nodeValue, 7);
if($data["clan"]["castle"] == "нет") $data["clan"]["castle"] = NULL;
//Количество очков
$data["clan"]["points"] = (int) mb_substr($b->item(4)->nodeValue, 11);
//Название альянса, если есть
$data["alliance"]["name"] = (string) mb_substr($b->item(5)->nodeValue, 8);
if($data["alliance"]["name"] == "нет") $data["alliance"]["name"] = NULL;
//Количество ПВП/ПК - всего, ставим по нулям
$data["clan"]["players pvp"] = 0;
$data["clan"]["players pk"] = 0;
//ИД альянса, ставим пустым
$data["alliance"]["aid"] = NULL;
//Если есть ссылка на альянс - значит клан состоит в альянсе
if($b->item(5)->getElementsByTagName("a")->length) {
$a = $b->item(5)->getElementsByTagName("a")->item(0);
$href = $a->getAttribute("href");
//Узнаем ИД альянса
$data["alliance"]["aid"] = (int) mb_substr($href, mb_stripos($href, "id=") + 3, -2);
unset($a, $href);
}
//ИКОНКА КЛАНА - НАЧАЛО! ВАМ ОНА НЕ нУЖНА!!!
//Спим 1 секунду, чтобы избежать Gateway TimeOut
sleep(1);
//Наполняем массив бинарными данными
$data["clan"]["crest"] = @file_get_contents("http://asterios.tm/crest_img.php?serv=".$server_aid."&t=c&
id=".$clan_aid);
//Если изображение не PNG, значит у клана нет иконки...
if(mb_strpos($data["clan"]["crest"], "PNG") === false) {
//Если иконка не PNG и не GIF(1х1, когда иконка отсутсвует) - это ошибка: Gateway TimeOut
if(mb_strpos($data["clan"]["crest"], "GIF") === false) return false;
//Иначе присваиваем массиву пустое значение
else $resurs["clan"]["crest"] = NULL;
}
unset($h3, $;
//ИКОНКА КЛАНА КОНЕЦ!
//Читаем таблицу с игроками
$trs = $tables->item(1)->getElementsByTagName("tr");
for($i=1; $i<$trs->length; $i++) {
$tds = $trs->item($i)->getElementsByTagName("td");
//Игрок
//Извлекаем ПВП/ПК
$pvp_pk = explode("/", $tds->item(4)->nodeValue);
//Извлекаем позицию в клане - опыт
$data["players"][$i-1]["exp"] = (int) $tds->item(0)->nodeValue;
//Имя игрока
$data["players"][$i-1]["name"] = (string) str_replace(" *", "", $tds->item(1)->nodeValue);
//Пол игрока
$data["players"][$i-1]["sex"] = $tds->item(2)->nodeValue;
//Класс игрока
$data["players"][$i-1]["class"] = (string) $tds->item(3)->nodeValue;
//ПВП
$data["players"][$i-1]["pvp"] = (int) $pvp_pk[0];
//ПК
$data["players"][$i-1]["pk"] = (int) $pvp_pk[1];
//Статус онлайн/офлайн - Bool
$data["players"][$i-1]["online"] = (bool) $tds->item(1)->getElementsByTagName("font")->length ? true:false;
//Суммарно ПВП/ПК клана
$data["clan"]["players pvp"] += (int) $pvp_pk[0];
$data["clan"]["players pk"] += (int) $pvp_pk[1];
unset($tds, $pvp_pk);
}
unset($trs);
//Количество игроков в клане
$data["clan"]["players num"] = sizeof($data["players"]);
//Таблица: войны с кланами
$trs = $tables->item(2)->getElementsByTagName("tr");
for($i=1; $i<$trs->length; $i++) {
$tds = $trs->item($i)->getElementsByTagName("td");
$a = $tds->item(2)->getElementsByTagName("a")->item(0);
$href = $a->getAttribute("href");
//ИД клана - вам это не нужно
$data["war clans"][$i-1]["aid"] = (int) mb_substr($href, mb_stripos($href, "id=") + 3, -2);
//Имя клана
$data["war clans"][$i-1]["name"] = (string) $tds->item(2)->nodeValue;
unset($tds, $a, $href);
}
unset($trs, $tables);
//Общее количество войн
$data["clan"]["wars num"] = @sizeof($data["war clans"]);
//Возвращаем массив со всеми полученными данными!
return $data;
}
?>[/code]
Вывод данных, список игроков онлайн
(пишу без теста, могут быть ошибки!):
[code]<?php
//Клан SilentiuM, сервер Asterios x3
//http://asterios.tm/index.php?wnd=min&cmd=clan&serv=0&id=269808783
//Id сервера = 0
//Id клана = 269808783;
//Загружаем данные в массив
$data = clan(269808783. 0);
//Если массив пустой, значит произошла ошибка
if(empty($data))
exit('Error');
//Вывод данных
for($i=0; $i<$data["clan"]["players num"]; $i++) {
//Если игрок оффлайн, переходим к следующему
if(!$data["players"][$i]["online"]) {
continue;
}
//Выводим имя игрока через конструкцию echo в теге P
echo "<p>{$data["players"][$i]["name"]}</p>\n";
}
?>
Примечание 1: Функция была написана пол года назад! За это время Астериос менял дизайн несколько раз, поэтому на данный моммент, функция нуждается в небольшом обновлении!
Примечание 2: Для работы скрипта нужен хостинг с включенным allow_url_fopen, иначе вы не сможете подключаться к любым удаленным серверам и получать от них данные.
Примечание 3: На данный момент у астериоса может быть защита от БОТов, поэтому вам необходимо обойти её. Отправлять Куки, менять User-Agent и т.д.
Примечание 4: Если вы ламер/блондинка или просто задрот, не пытайтесь разобраться в этом...