andrewk Опубликовано 15 марта, 2010 Поделиться Опубликовано 15 марта, 2010 (изменено) Уважаемая администрация, планируются ли веб сервисы: онлайн игроков, цены на товары, хотелось бы иметь возможность получать данные по конкретному клану, чтобы отображать на сайте, форматы XML или JSON. Изменено 15 марта, 2010 пользователем andrewk 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
GM-Himba Опубликовано 15 марта, 2010 Поделиться Опубликовано 15 марта, 2010 Уважаемая администрация, планируются ли веб сервисы: онлайн игроков, цены на товары, хотелось бы иметь возможность получать данные по конкретному клану, чтобы отображать на сайте, форматы XML или JSON. вы с какой целью интересоваться будете? 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
andrewk Опубликовано 15 марта, 2010 Автор Поделиться Опубликовано 15 марта, 2010 вывод онлайна клана на клановом форуме, чтобы люди не заходя в игру знали кто играет 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
GM-Himba Опубликовано 16 марта, 2010 Поделиться Опубликовано 16 марта, 2010 хотя бы ту статистику наладили, что сейчас на сайте есть, а то бывает что отстает от нескольких часов до нескольких дней 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Sunny Опубликовано 18 марта, 2010 Поделиться Опубликовано 18 марта, 2010 Оооо друг какую ты интересную тему поднимаешь. Помнится когда я делал анализатор об API даже мечтать не приходилось, все парсил с сайта статистики, ничего удачно получалось до того момента пока админы тупо не запароли эту статистику. И до сих пор вроде бы нормально не сделали. По теме - не мечтай, админы тут не идут на контакт когда что-то кому то надо, даже если этих людей сотни, они считают что знают лучше. По крайней мере так было 3-6 месяцев назад, сейчас не знаю, перестал читать темы. 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
andrewk Опубликовано 19 марта, 2010 Автор Поделиться Опубликовано 19 марта, 2010 Скажем так, дожидаться ответов администрации я не стал..., уже написан код которые берет статистику с сайта, парсит ее, разработка приостановлена в связи с сами знаете чем, если есть идеи по тому, что можно собрать из существующей статистики, пишите тут, в разработке численность кланов(альянсов, в которых они состоят), захвативших форты/замки 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ястреб Опубликовано 19 марта, 2010 Поделиться Опубликовано 19 марта, 2010 Тема, как бы классно не была реализована на уровне прикладных макросов, скриптом и программ, сфейлится из-за нежелания о дминов поддерживать Статистику в надлежащем виде. Я видел статистику от Sunny, довольно удобный был инструмент, на заовнился как только о дмины забили на Статистику) 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Devzirom Опубликовано 15 апреля, 2010 Поделиться Опубликовано 15 апреля, 2010 php, dom, brain... cit2 is stopped project... @ November, 2009 creator by Devzirom function clan($clan_aid, $server_aid) { $data = array(); $doc = new DOMDocument(); @$doc->loadHTMLFile("http://asterios.tm/index.php?wnd=min&cmd=clan&serv=".$server_aid."&id=".$clan_aid); $tables = $doc->getElementsByTagName("table"); if($tables->length != 3) { return false; } $info = $tables->item(0); $h3 = $info->getElementsByTagName("h3"); if($h3->length != 3) { return false; } $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); } sleep(1); $data["clan"]["crest"] = @file_get_contents("http://asterios.tm/crest_img.php?serv=".$server_aid."&t=c&id=".$clan_aid); if(mb_strpos($data["clan"]["crest"], "PNG") === false) { 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]; $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] 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Sunny Опубликовано 16 апреля, 2010 Поделиться Опубликовано 16 апреля, 2010 Devzirom, красиво, работа мастера! 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ястреб Опубликовано 16 апреля, 2010 Поделиться Опубликовано 16 апреля, 2010 Инструкцию можно? 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Devzirom Опубликовано 17 апреля, 2010 Поделиться Опубликовано 17 апреля, 2010 Инструкцию можно? Небольшую... можно. Получение данных: <?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: Если вы ламер/блондинка или просто задрот, не пытайтесь разобраться в этом... 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Admin Опубликовано 25 апреля, 2010 Поделиться Опубликовано 25 апреля, 2010 Статистика на сайте может отставать по той причине, что данные берутся не с игровой базы, а с ее копии, расположенной вообще на отдельной машине. Может это и неудобно для людей желающих собрать статистику, но таких меньшинство. А большинству будет очень неприятно, если игровая база будет тормозить из за каких-либо проблем на сайте. 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Sunny Опубликовано 27 апреля, 2010 Поделиться Опубликовано 27 апреля, 2010 Если данные для статистики берутся с реплики, возможно открыть к ней доступ для ограниченного числа лиц? Например для сайта asterios.spix.ru (бывшего) или на реплике тоже хранятся какие-то сверх секретные данные? Если не напрямую, то хотя-бы через API какой-нибудь? 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.