Перейти к содержанию
Asterios

web сервисы


andrewk

Рекомендуемые сообщения

Уважаемая администрация,

планируются ли веб сервисы: онлайн игроков, цены на товары, хотелось бы иметь возможность получать данные по конкретному клану, чтобы отображать на сайте, форматы XML или JSON.

Изменено пользователем andrewk
Ссылка на комментарий
Поделиться на другие сайты

Уважаемая администрация,

планируются ли веб сервисы: онлайн игроков, цены на товары, хотелось бы иметь возможность получать данные по конкретному клану, чтобы отображать на сайте, форматы XML или JSON.

вы с какой целью интересоваться будете? ^-^

Ссылка на комментарий
Поделиться на другие сайты

вывод онлайна клана на клановом форуме, чтобы люди не заходя в игру знали кто играет :)

Ссылка на комментарий
Поделиться на другие сайты

хотя бы ту статистику наладили, что сейчас на сайте есть, а то бывает что отстает от нескольких часов до нескольких дней <_<

Ссылка на комментарий
Поделиться на другие сайты

Оооо друг какую ты интересную тему поднимаешь.

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

И до сих пор вроде бы нормально не сделали.

По теме - не мечтай, админы тут не идут на контакт когда что-то кому то надо, даже если этих людей сотни, они считают что знают лучше.

По крайней мере так было 3-6 месяцев назад, сейчас не знаю, перестал читать темы.

Ссылка на комментарий
Поделиться на другие сайты

Скажем так, дожидаться ответов администрации я не стал..., уже написан код которые берет статистику с сайта, парсит ее, разработка приостановлена в связи с сами знаете чем, если есть идеи по тому, что можно собрать из существующей статистики, пишите тут, ;) в разработке численность кланов(альянсов, в которых они состоят), захвативших форты/замки

Ссылка на комментарий
Поделиться на другие сайты

Тема, как бы классно не была реализована на уровне прикладных макросов, скриптом и программ, сфейлится из-за нежелания о дминов поддерживать Статистику в надлежащем виде.

Я видел статистику от Sunny, довольно удобный был инструмент, на заовнился как только о дмины забили на Статистику)

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

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]

Ссылка на комментарий
Поделиться на другие сайты

Инструкцию можно?

Небольшую... можно.

Получение данных:

<?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: Если вы ламер/блондинка или просто задрот, не пытайтесь разобраться в этом...

Ссылка на комментарий
Поделиться на другие сайты

Статистика на сайте может отставать по той причине, что данные берутся не с игровой базы, а с ее копии, расположенной вообще на отдельной машине. Может это и неудобно для людей желающих собрать статистику, но таких меньшинство. А большинству будет очень неприятно, если игровая база будет тормозить из за каких-либо проблем на сайте.

Ссылка на комментарий
Поделиться на другие сайты

Если данные для статистики берутся с реплики, возможно открыть к ней доступ для ограниченного числа лиц?

Например для сайта asterios.spix.ru (бывшего) или на реплике тоже хранятся какие-то сверх секретные данные?

Если не напрямую, то хотя-бы через API какой-нибудь?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...