-
Notifications
You must be signed in to change notification settings - Fork 27
TutorialXML
Если провайдер, баланс которого вы хотите получить, поддерживает XML - это удивительное везение. И грех его не использовать. Потому что обработка XML в AnyBalance приносит только удовольствие, ибо может быть произведена с использованием JQuery.
Рассмотрим получение значений счетчиков из XML на примере получения баланса игровой валюты в игре Повелители. Эта игра имеет API, при запросе которого возвращается XML, содержащий в том числе и значения счетчиков игровой валюты.
Полный исходный код провайдера находится в репозитории. Здесь я приведу только код получения счетчиков (полная версия в main.js).
Во-первых, в манифесте надо подключить JQuery. Можно, конечно, просто включить её в список файлов провайдера наравне с main.js
. Но в данном случае это не требуется, потому что JQuery используется для внутренних нужд AnyBalance и поэтому уже доступна вашему провайдеру.
Для использования JQuery в манифесте необходимо написать:
<js>api:jquery.min.js</js> <!-- Используем библиотеку, которая и так входит в AnyBalance -->
Префикс api:
указывает, что этот файл уже находится в AnyBalance и не поставляется вместе с провайдером.
После этого к моменту вызова функции main()
JQuery
уже будет загружена и её можно будет использовать. С помощью JQuery
можно получать значения провайдеров, используя механизм селекторов (аналогично XPath):
//Получаем xml
var info = AnyBalance.requestPost('http://dgame.ru/api.php', {
selfid: userid,
key: apikey,
type: 'person',
id: userid
});
var xmlDoc = $.parseXML(info),
$xml = $(xmlDoc);
var $leader = $xml.find('maoli>team>disciples>d[leader="1"]');
if(!$leader.size())
throw new AnyBalance.Error("Ошибка: не найден лидер команды!");
if(AnyBalance.isAvailable('cash')){
result.cash = parseInt($leader.find('cash').text())/10000; //Сводим к золоту
}
if(AnyBalance.isAvailable('diamond')){
result.diamond = parseInt($leader.find('diamond').text())/100; // Потому что они в сотых долях
}
Если бы все провайдеры предоставляли свои счетчики в XML, то не было бы проблем...