API для околоигровых ресурсов
Находится по адресу: http://haddan.ru/inner/api.php
Для начала хотелось бы попросить скриптеров клан-сайтов записывать полученную информацию себе на сайт статично, а не производить при каждом открытии вашей странички получение информации с API: это замедлит скорость загрузки вашего сайта и увеличит нагрузку на нашу базу данных. Прошу отнестись с пониманием. Введен таймаут на одинаковые запросы 25 секунд! Т.е. 2 раза информацию об одном игроке можно запросить только раз в 25 секунд. Теперь о самом простом способе получения информации (в виде небольшого мануальчика :)). 1. При получении информации с АПИ лучше всего пользоваться соединением через socket, но если вы не умеете, то можно воспользоваться какой-нибудь простой функцией file_get_contents(). 2. Для обработки XML вам будет достаточно SimpleXML (PHP5). В остальных случаях ваши проблемы решит эта библиотека: http://www.phppal.com/xml/doc.php. (в случае, если у вас PHP4, и вы не хотите пользоваться простой библиотекой, то также есть возможности для обработки XML, почитайте http://www.php.net/manual/ru/function.xml-parse.php, а именно http://www.php.net/manual/ru/functio...arse.php#35708), т.о. после получения инфы пользуетесь simplexml_load_string(). Если вы не знаете структуру полученного функцией объекта, воспользуйтесь print_r. Вот как раз пример: [php]<?php $file = file_get_contents("http://haddan.ru/inner/api.php?op=user&name=test13&fields=lastlogin,onlin e,roomname"); $xml = simplexml_load_string($file); print_r($xml); ?>[/php] Если у вас нет PHP5, то есть много других способов обработки XML. Еще для тех, у кого нет PHP5 или нужно обработать BonReq's, которые SimpleXML не берет. Структура получается сложнее SimpleXML, однако полнее: [php]<?php function readXml($domnode, &$array) { $array_ptr = &$array; $domnode = $domnode->firstChild; while (!is_null($domnode)) { switch ($domnode->nodeType) { case XML_TEXT_NODE: if(!(trim($domnode->nodeValue) == "")) $array_ptr['cdata'] = $domnode->nodeValue; break; case XML_ELEMENT_NODE: $array_ptr = &$array[$domnode->nodeName][]; if ($domnode->hasAttributes() ) { $attributes = $domnode->attributes; foreach ($attributes as $index => $domobj) { $array_ptr[$domobj->name] = $domobj->value; } } break; } if ( $domnode->hasChildNodes() ) { readXml($domnode, $array_ptr); } $domnode = $domnode->nextSibling; } } $ar = array(); $api = @file_get_contents("http://haddan.ru/inner/api.php?op=thing&fields=all&ttid=1"); $d = new DOMDocument(); $d->LoadXML($api); readXml($d, $ar); print_r($ar); ?>[/php] 3. В случае ошибки будет возвращен текст ошибки в тэге <error />. Подробнее о возможностях будет сказано ниже. Тип получаемых данных передается по параметру "op". Возможные варианты использования (будут пополняться). 1. Информация о персонаже (op=user). Необходимо для получения различной конкретной информации об 1 персонаже. Обязательный параметр id (ID получаемого персонажа) или name (имя персонажа). Далее в параметре fields через запятую передаются поля, которые вы хотите получить. Доступные элементы параметра fields (аналогично будут называться тэги XML, все даты в формате unixtime): userid (ID персонажа), username (Имя персонажа),registered (дата регистрации), lastlogin (последний заход в игру), race (раса в виде elf|human|orc... и т.п.), clan (ID клана),sex (пол в формате 0|1, где 0 - женский, 1 - мужской), wins (количество побед), loses (количество поражений), draws (количество ничей), battleid (ID боя персонажа, если 0 - не в бою), deaths (количество смертей), killedpc (убито PC), killednpc (убито NPC), hitpc (нанесено урона PC), hitnpc (нанесено урона NPC), slogan (Девиз), about (Поле "О себе"),level (уровень),clanname (название клана), online (В игре ли персонаж или нет, 0 - нет, 1 - да), roomname (Название комнаты, в которой находится персонаж), racename (Название расы в виде Человек|Орк и т.п.), realname (Реальное имя), city (Город), country (Страна), icq (ICQ), aligImage (изображение склонности, относительно относительно http://haddan.ru/images/align/, однако не советую вам пользоваться картинками с сервера Хаддана: на случай, если сервер будет недоступен) ,aligTitle (название склонности), родные статы персонажа: str (сила персонажа),dex (ловкость), inu (интуиция),rag (злость), con (выносливость),int (интеллект), wis (мудрость) и eng (энергетика), а также hpc (текущий уровень жизни персонажа),profession (профессия), prof_rank (уровень профессии численно, таблицу соответствия можно составить самому ;) ) Пример запроса. Результатом http://localhost/inner/api.php?op=user&id=7231&fields=username,level,race ,racename будет: Код:
UPDATE: Добавлена возможность просмотра одежды на персонаже. Добавлена возможность опции wear в операции user (op=user). Выводит список одежды на персонаже на данный момент. Пояснения по структуре: <wear> - все понятно <place id="XXX"> - тип вещи (здесь - это первое кольцо), для тех, кто знает английский проблем не возникнет, кто не знает - в словари :-) <thingid>Integer</thingid> - ID вещи <name>String</name> - название вещи <image>http://haddan.ru/images/t/???</image> - абсолютная ссылка на вещь <BonusReqs> - бонусы и требования <Requirments> - требования <Req name="XXX">Value</Req> - название требования со значением ... </Requirments> <Bonus> - бонусы <Bon name="XXX">Value</Bon> - название бонуса со значением ... </Bonus> </BonusReqs> <dur>Int</dur> - максимальный износ <durc>Int</durc> - текущий износ <weight>Int</weight> - Вес <price>Int</price> - цена <ro>Boolean</ro> - подходит или нет вещь </place> ... </wear> Думаю, что там будет все достаточно понятно. Если будут вопросы задавайте. UPDATE: добавлена возможность просмотра эффектов на персонаже. Добавлена возможность опции effects в операции user (op=user). Выводит список эффектов на персонаже на данный момент. Пояснения по структуре: <effects> - все понятно <effect id="XXX"> - тип эффекта <name>String</name> - название эффекта <inbattle>Boolean</inbattle> наложено ли в бою <BonusReqs> - бонусы и требования <Requirments> - требования <Req name="XXX">Value</Req> - название требования со значением ... </Requirments> <Bonus> - бонусы <Bon name="XXX">Value</Bon> - название бонуса со значением ... </Bonus> </BonusReqs> <image>http://haddan.ru/images/x/???</image> - абсолютная ссылка на картинку эффекта <till>Int</till> Время, которое еще будет держаться бонус(если inbattle не 0 то в количестве ходов, если не зависит от времени то равно 0) <ro>Boolean</ro> - аналогично вещи: действует ли эффект (если <ro> определна, можно игнорировать) </effect> ... </effects> 2. Информация о пользователях в клане (op=clan). Необходимо для получения информации о пользователях в конкретном клане. Параметр для передачи: clanid (id клана) или clanname (название клана). Возвращает список персонажей с определенными параметрами, значения которых по вышенаписанному, думаю, будут понятны. Пример: http://haddan.ru/inner/api.php?op=clan&clanid=minister вернет: Код:
<?xml version="1.0" encoding="utf-8" ?> 3. Информация о всех клана (op=allclans). Выдает информацию о всех существующих кланах. Структура предельно понятна и не требует объяснений, я думаю. 4. Информация о вещи (op = thing) Выдает достаточно полную информацию о запрашиваемой вещи. Переменные запроса: 1. tid или ttid (thingID или thingtypeID - запрашивается конкретная вещь или целый тип) 2. fields: 'thingid'*, 'thingtypeid', 'name', 'image', 'imagebig', 'dur', 'durc'*, 'weight', 'price', 'br' (бонусы и требования),'typefull' (полный тип вещи, думаю человек, разбирающийся в английском хоть немного сразу поймет),'resInfo' (информация по производимым ресурсам в виде id => кол-во),'description','valid'(срок действия с момента изготовления), 'alchresInfo' (аналогично resInfo, но для алхимика) И отдельно: 'all' - выводит все доступные поля * - эти поля доступны только при запросе tid 5. Информация о ценах на ресурсы в государственных магазинах (op - governprice) Выводит цены для ресурсов в государственных магазинах. Структура, думаю, понятна. Не связанное напрямую с api.php: 1. Describer.php. Для создания анализатора логов боев наш Describer.php. В нем содержатся весь инстурментарий для описания лога боя у нас. Я думаю за полчасика можно его понять и на основе его создать анализатор лога. |
Добавлена возможность опции wear в операции user (op=user). Выводит список одежды на персонаже на данный момент.
Пояснения по структуре: <wear> - все понятно <place id="XXX"> - тип вещи (здесь - это первое кольцо), для тех, кто знает английский проблем не возникнет, кто не знает - в словари :-) <thingid>Integer</thingid> - ID вещи <name>String</name> - название вещи <image>http://haddan.ru/images/t/???</image> - абсолютная ссылка на вещь <BonusReqs> - бонусы и требования <Requirments> - требования <Req name="XXX">Value</Req> - название требования со значением ... </Requirments> <Bonus> - бонусы <Bon name="XXX">Value</Bon> - название бонуса со значением ... </Bonus> </BonusReqs> <dur>Int</dur> - максимальный износ <durc>Int</durc> - текущий износ <weight>Int</weight> - Вес <price>Int</price> - цена <ro>Boolean</ro> - подходит или нет вещь </ring1> ... </wear> Думаю, что там будет все достаточно понятно. Если будут вопросы задавайте. |
Модификаторы, действующие только при воздействии с этой вещью выделены тэгами <i>.
|
Добавлена возможность опции effects в операции user (op=user). Выводит список эффектов на персонаже на данный момент.
Пояснения по структуре: <effects> - все понятно <effect id="XXX"> - тип эффекта <name>String</name> - название эффекта <inbattle>Boolean</inbattle> наложено ли в бою <BonusReqs> - бонусы и требования <Requirments> - требования <Req name="XXX">Value</Req> - название требования со значением ... </Requirments> <Bonus> - бонусы <Bon name="XXX">Value</Bon> - название бонуса со значением ... </Bonus> </BonusReqs> <image>http://haddan.ru/images/x/???</image> - абсолютная ссылка на картинку эффекта <till>Int</till> Время, которое еще будет держаться бонус(если inbattle не 0 то в количестве ходов, если не зависит от времени то равно 0) <ro>Boolean</ro> - аналогично вещи: действует ли эффект (если <ro> определна, можно игнорировать) </effect> ... </effects> |
3. Информация о всех клана (op=allclans).
Выдает информацию о всех существующих кланах. Структура предельно понятна и не требует объяснений, я думаю. |
4. Информация о вещи (op = thing)
Выдает достаточно полную информацию о запрашиваемой вещи. Переменные запроса: 1. tid или ttid (thingID или thingtypeID - запрашивается конкретная вещь или целый тип) 2. fields: 'thingid'*, 'thingtypeid', 'name', 'image', 'imagebig', 'dur', 'durc'*, 'weight', 'price', 'br' (бонусы и требования),'typefull' (полный тип вещи, думаю человек, разбирающийся в английском хоть немного сразу поймет),'resInfo' (информация по производимым ресурсам в виде id => кол-во),'description','valid'(срок действия с момента изготовления) И отдельно: 'all' - выводит все доступные поля * - эти поля доступны только при запросе tid |
Еще для тех, у кого нет PHP5 или нужно обработать BonReq's, которые SimpleXML не берет. Структура получается сложнее SimpleXML, однако полнее:
[php]<?php function readXml($domnode, &$array) { $array_ptr = &$array; $domnode = $domnode->firstChild; while (!is_null($domnode)) { switch ($domnode->nodeType) { case XML_TEXT_NODE: if(!(trim($domnode->nodeValue) == "")) $array_ptr['cdata'] = $domnode->nodeValue; break; case XML_ELEMENT_NODE: $array_ptr = &$array[$domnode->nodeName][]; if ($domnode->hasAttributes() ) { $attributes = $domnode->attributes; foreach ($attributes as $index => $domobj) { $array_ptr[$domobj->name] = $domobj->value; } } break; } if ( $domnode->hasChildNodes() ) { readXml($domnode, $array_ptr); } $domnode = $domnode->nextSibling; } } $ar = array(); $api = @file_get_contents("http://haddan.ru/inner/api.php?op=thing&fields=all&ttid=1"); $d = new DOMDocument(); $d->LoadXML($api); readXml($d, $ar); print_r($ar); ?>[/php] |
Добавлены поля в op = userid и clan: profession (профессия), prof_rank (уровень профессии численно, таблицу соответствия можно составить самому ;) )
|
Изменена работа roomname в op=user: теперь она выводит "Астрал", если персонаж оффлайн, если же в сети, то выводит полное его местонахождение.
Также добавлен параметр roomname в op=clan, просьба всем, кто использовал вместо с op=clan op=user для определения местонахождения (напр. Пегасам) переделать так, чтобы бралась инфа только из clan: это ускорит и вас и нас. |
Введен таймаут на одинаковые запросы 10 секунд! Т.е. 2 раза информацию об одном игроке можно запросить только раз в 10 секунд.
|
Программистам сайтов: в течение недели увеличьте кэширование запросов до 25 секунд.
Чтобы потом не было проблем. |
Как и предупреждалось - таймаут увеличен.
Для тех, кто делает не кэш запросов, а просмотр раз в Х секунд - извините, но это глупо. Просто сохраняйте инфу со временем себе в БД и проверяйте - прошло время - тягайте с апи, нет - тягайте с БД. |
2 изменения\дополнения:
1. В некоторых вещах (op=thing) появился параметр alchresInfo, аналогичный resInfo, только для алхимика :-) 2. Добавлена op=governprice, отображающая цену на ресурсы в государственном магазине |
Не связанное напрямую с api.php:
1. Describer.php. Для создания анализатора логов боев наш Describer.php. В нем содержатся весь инстурментарий для описания лога боя у нас. Я думаю за полчасика можно его понять и на основе его создать анализатор лога. |
При выполнении какого либо запроса на станицу API русские буквы выводят крякозябры в какой кодировке они написаны что б можно было преобразовать их в Windows 1251 ?
|
Цитата:
UTF-8 |
Что-то этот api о вещах почти никакой инфы не даёт. По typeid вещи только его и получаю, по id ещё тип и прочность. Почему так?
|
1. при запросе клана имя комнаты у персонажей клана больше не отображается. вместо этого видно либо "Астрал", либо "Хаддан". Сделано, чтобы не могли определять местоположение невидимых.
2. у персонжа при запросе поля roomid всегда возвращается 0. |
Появилось API для сканирования магазинов на базаре.
Расположение: haddan.ru/inner/api_shop.php Обновляется раз в час. Сканирует только открытые магазины. Структура: Код:
<haddan> lastupdatetime - содержит в себе unixtime последнего обновления. аттрибут txt содержит это время в текстовом виде далее идут теги shop - каждому тегу соответствует один магазин. Аттрибуты: id - id магазина name - название description - описание ownerid - id хозяина opentill - если магазин открыт за СМС, то в этом поле unixtime значение того момента, до которого открыт магазин money - количество денег в магазине. Возможные значения 0: 0-99 мн, 100: 100-999 мн 1000: 1000+ мн внутри этого тега содержатся от 0 и больше тегов good - товар, внутри которых могут содержаться какие-то или все теги: ttid - артикул вещи sell - цена продажи buy - цена скупки count - количество thingname - название flags - содержит одно из следующих значений 'nobuy','nosell','nobuy,nosell' флаги товара - не продавать, не скупать. С сего момента рекомендуем всем переехать на этот сервис, всякие боты будут забанены через месяц, 24.12.08. P.S. учтите что время в lastupdatetime - это время начала исполнения скрипта. Исполняться он может несколько секунд. Так что советуем при проверке кэширования добавлять какое-то время к этому. |
Апи для сканирования заявок на бирже: http://haddan.ru/inner/api_ext.php?op=exchange
Обновляется раз в полчаса. Теги lastupdatetime - тоже что и у магазинов exchange - заявка, в атрибутах, думаю разберетесь agregate - статистические данные, в атрибутах разберетесь |
АПИ для сканирования лотов аукциона: http://haddan.ru/inner/api_ext.php?op=auction
Обновляется раз в три минуты. выдает например: Код:
<haddan> где: lotid - номер лота userid - id владельца thingid - S\N выставленной вещи price - текущая цена вещи (начальная, или сколько поставили) blicprice - блиц-цена step - шаг торгов finishtime - время окончания торгов за эту вещь (unixtime) thingname - название вещи thingtypeid - артикул вещи dur - максимальная прочность вещи durc - градация текущей прочности вещи (от 0 до 7) Внимание! dur и durc вещей, поставленных на аукцион до 17:30 сегодня отображается как 0 и 0 (так уж получилось), так что будьте аккуратны, если запустите сервис с использованием этого в ближайшие 7 суток. Потом уже у всех будет все нормально со значениями. Тег lastupdatetime также присутствует. |
Цитата:
Если можно тоже бы хотелось узнать причину ентова. :confused: http://haddan.ru/inner/api.php?op=th...112&fields=all http://haddan.ru/thing.php?type=7112 Напишите пожалуйста что неправильно, или хотя бы напишите что так и должно быть. |
разберемся.
|
а можно попросить проверить opentill, по моему там какой то косяк, даты не особо верные выходят..
по тому что я понял, если человек когда то посылал смс то она так и записалась, а потом не стирается и в опентиле выводится страое смс..как то так |
так и есть, но вы же сравнивайте текущее время и присланное. И поймете актуальность :)
|
ага..просто думал что это баг маленький, тогда буду сравнивать)
|
Появился магазин без названия, похоже, из-за того, что у владельца сейчас невидимость
<shop id="2155" name="" description="" ownerid="580420" opentill="0" money="100"> |
У этого магазина действительно нет названия. Просто нет.
|
забавно получается))) Выходит что в этот магазин теперь просто нельзя попасть...
поставте там хоть пробелл что ле... что б там появилась ну хотябы черточка на которую мона кликнуть... а лучше вообще поставить скрипт проверки на правильность названия магазина что б поле в названии магазина не оставалось пустым. |
исправьте плиз инфу о вещах
|
Многие пользователи поисковика, просят чтоб отображались те товары которые они хотят купить. Исправьте пожалуйста формирование xml - файла, чтоб там появились такие строчки как <count></count> или <count>0</count> для тех товаров что нет в наличии в магазине
|
Посмотрите пожайлуста на правильность формирования информации о вещах, к примеру http://haddan.ru/inner/api.php?op=th...214&fields=all
выдает <description /> <valid /> <thingid /> <thingtypeid>1214</thingtypeid> <durc /> при указании конкретных полей тоже пустые теги xml |
не подскажите, в связи с чем может возникать ошибка 104 (Неправильное имя персонажа или пароль) при запросе к API с кириллическими никами?
+ в связи с нововведениями хотелось бы попросить сделать API для клановых ЧС... |
Цитата:
используй не id=... а name=.. |
http://haddan.ru/inner/api_clans.php?op=blacklist
Черный список всех кланов |
спасибо
<lastupdatetime txt="30-01-09 17:52:46">1233327166</lastupdatetime> ток не обновляется кажись( |
Цитата:
в случае если пользователь запрашивает информацию и вводит ID я его и использую ID, а если пользователь вводит ник, то работаю с name... и вот тут то и возникает проблема с кириллическими никами... |
Цитата:
Скорее всего так: ник с Хаддана приходит в УТФ, база в Чарсет. Надо сделать следующее: $nik = "Какойто кирилический ник или вообще любой"; $nik = iconv("UTF-8", "cp1251", $nik); Где мы меняем кодировку с утф на нам нужную ) |
API вещей отремонтировано.
|
спаааасиба
а можно добавит поле ресурсы, а то оно пропало ( |
Часовой пояс GMT +4, время: 00:12. |
Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Адаптация Архивариус & dukei