Перейти к содержимому

Обсуждение практических вопросов использования Public API


Рекомендованные публикации

Игроки
1 160 публикаций
69 896 боёв

Конечно. (тьфу-тьфу)

url_WOT_AccountRating = 'http://worldoftanks.ru/clanwars/eventmap/alley/find_user/?user=%ACCOUNT_NAME%';
Подсказка:

X-Requested-With: XMLHttpRequest
Результат:

http://cdn-frm-eu.wargaming.net/wot/ru/uploads/monthly_11_2013/post-4357430-0-66815600-1385086266_thumb.png

@4354591-el.png
tankomatic.ru - подробная статистика игроков и кланов, рейтинги, генератор юзербаров

Ссылка на комментарий
Игроки
1 224 публикации
15 809 боёв
Да, спасибо, я тормозил, у меня ж до сих пор поиск на этом принципе. Привык уже API запрашивать...
Ссылка на комментарий
Игроки
4 публикации
6 142 боя

Что означает параметр language в запросе?

https://api.worldoft...e=en&search=red

Интересует как привязать поиск по серверам: Америка, Европа, Азия, Россия?

Изменено пользователем Гость
Ссылка на комментарий
Игроки
569 публикаций
20 955 боёв
24 Ноя 2013 - 22:37 пользователь daimonkor сказал:

Что означает параметр language в запросе?

https://api.worldoft...e=en&search=red

Интересует как привязать поиск по серверам: Америка, Европа, Азия, Россия?

Параметр language показывает, на каком языке будут выводится локализованные поля (%fieldname%_i18n).

Пример для танка КВ-5:

Локализованное поле – название танка (name_i18n).

https://api.worldoft...e&tank_id=53249

Spoiler

{

"status": "ok",

"count": 1,

"data": {

"53249": {

"name_i18n": "КВ-5",

"name": "#ussr_vehicles:KV-5"

}

}

 

}

 

https://api.worldoft...e&tank_id=53249

Spoiler

{

"status": "ok",

"count": 1,

"data": {

"53249": {

"name_i18n": "KV-5",

"name": "#ussr_vehicles:KV-5"

}

}

}

 

Для поиска по конкретному кластеру Вам необходим application_id того кластера, на котором производится поиск. Осуществить поиск, к примеру, на EU кластере с помощью application_id с RU кластера невозможно. Во время закрытого бета теста возможно использование только application_id только русского региона. После его окончания будут доступны остальные регионы мира.
Ссылка на комментарий
Игроки
37 публикаций
12 879 боёв

Всем привет. Я или просто туплю по зимнему, никак не соображу.

Прошу подмочь мне в таких вопросах:

1. Какая все таки авторизация в API 2.0 - OpenID или OAuth (и какой 1 или 2) ?

2. Если кто-то сталкивался с библиотекой hybridauth - пытаюсь написать под нее провайдера для WG. В простейшем случае через обычную OpenID срабатывает, а вот как правильно написать для API 2.0, никак не пойму. Может кто натолкнуть на нужно направление, например, по аналогии с чьей API работает API WG ? Если у аналогии есть готовый провайдер для hybridauth, то можно будет по подобию сделать свое... Если кто подскажет, выскажу спасибо.

Ссылка на комментарий
Игроки
283 публикации
2 868 боёв
01 Дек 2013 - 15:38 пользователь SamurayDjek сказал:

Всем привет. Я или просто туплю по зимнему, никак не соображу.

Прошу подмочь мне в таких вопросах:

1. Какая все таки авторизация в API 2.0 - OpenID или OAuth (и какой 1 или 2) ?

2. Если кто-то сталкивался с библиотекой hybridauth - пытаюсь написать под нее провайдера для WG. В простейшем случае через обычную OpenID срабатывает, а вот как правильно написать для API 2.0, никак не пойму. Может кто натолкнуть на нужно направление, например, по аналогии с чьей API работает API WG ? Если у аналогии есть готовый провайдер для hybridauth, то можно будет по подобию сделать свое... Если кто подскажет, выскажу спасибо.

Авторизация средствами Public API (метод auth/login) необходима для запросов с предоставлением значений с приватной информацией (количество игрового золота, кредитов, опыта, информация о возможной блокировке учетной записи и сроках выхода игрового аккаунта из бана, количество фишек клана (для лидера клана) и прочая информация).

 

Происходит в несколько этапов:

1) Производим запрос (со значением nofollow=1) по безопасному протоколу (SSL) через, например, cURL (все данные скрыты, в том числе application_id).

2) В ответе получаем в значении location ссылку для пользователя.

3) Перенаправляем пользователя для авторизации на портал Wargaming.

4) Пользователь указывает на портале авторизационные данные.

5) Ожидаем статус авторизации на redirect_uri (на данный URL будет отправлен пользователь + access_token, expires_at, account_id, nickname - метод GET).

 

Пример такого приложения:

 

<?php//ID серверного приложения$appid = "9332f70c197a9407b36ef4d8d9f5b921";//Страница, на которую будет отправлен пользователь после успешно введенных данных$to = "https://ru.wargaming.net/developers/api_explorer/wot/auth/login/complete/";//Тело запроса$url = "https://api.worldoftanks.ru/wot/auth/login/?application_id=$appid&redirect_uri=$to&nofollow=1";$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);curl_setopt($curl, CURLOPT_TIMEOUT, 60);$res = json_decode(curl_exec($curl), true);//Значение location ответа$loc = $res['data']['location'];//Перенаправляем пользователя для авторизацииheader("Location:$loc");?>

Данный скрипт можно использовать и для автономных типов приложений.

Более подробная информация размещена на странице Кабинета разработчика: https://ru.wargaming...wot/auth/login/

 

Второй тип авторизации.

Используя свой Wargaming.net ID в качестве OpenID идентификатора.

В случае успешно введенного логина и пароля передается только игровое имя (ник) и ссылка на профиль – никакой существенной информации не передается.

Используется для упрощенной регистрации пользователя, допустим, на фан-сайтах.

Если необходимо, могу пояснить данный тип поподробнее.

  • Плюс 3
Ссылка на комментарий
Игроки
37 публикаций
12 879 боёв
01 Дек 2013 - 16:13 пользователь MustBeDead сказал:

Если необходимо, могу пояснить данный тип поподробнее.

Про OpenID понял, спасибо. Для этого варианта я уже сделал авторизацию пользователей через Hybridauth, работает нормально. Но там нет как раз этих самых access_token и другой инфы.А вот про Public API прошу уточнить - получается все таки не OpenID и не OAuth? Изменено пользователем SamurayDjek
Ссылка на комментарий
Игроки
283 публикации
2 868 боёв
01 Дек 2013 - 20:47 пользователь SamurayDjek сказал:

Про OpenID понял, спасибо. Для этого варианта я уже сделал авторизацию пользователей через Hybridauth, работает нормально. Но там нет как раз этих самых access_token и другой инфы.А вот про Public API прошу уточнить - получается все таки не OpenID и не OAuth?

Обратите, пожалуйста, внимание – данный тип авторизации не подразумевает передачу значительных сведений. Вашему сайту передаётся только игровое имя (никнейм) и ссылка на профиль игрока (в настоящий момент — на игровой профиль на официальном портале World of Tanks).

Для авторизации через OpenID можно использовать библиотеки (в зависимости от языка программирования): http://openid.net/de...pers/libraries/

Данный тип авторизации не предназначен для работы с Public API.

 

Для запросов приватных данных пользователя средствами API (количество игрового золота и кредитов, опыт и другая информация) необходимо использовать авторизацию WarGaming.Net ID (OpenID), вызвав метод auth/login (упрощенную версию скрипта на php я приводил ранее). Более подробную информацию по данному методу можно найти в документации Кабинета разработчика.

  • Плюс 2
Ссылка на комментарий
Игроки
37 публикаций
12 879 боёв

Спасибо за предоставленное подробное описание.

Я просил ответа гораздо меньшего, но такие подробности точно пригодятся.

Как всегда ответ в итоге удалось получить методом научного тыка, а также несколько раз перечитав документации и комментарии MustBeDead.

Делюсь результатами, используется библиотека Hybridauth.

Провайдер для OpenID строится на основе уже готового класса Hybrid_Provider_Model_OpenID и занимает всего несколько строк. Выглядит он так

<?phpclass Hybrid_Providers_WarGaming extends Hybrid_Provider_Model_OpenID{var $openidIdentifier = "http://ru.wargaming.net/id/";/*** finish login step*/function loginFinish(){parent::loginFinish();$this->user->profile->profileURL = $this->user->profile->identifier;// Отделяем из url ID пользователя, пригодится$this->user->profile->identifier = preg_replace( '/^[^0-9]+([0-9]+)-.+$/', '$1', $this->user->profile->identifier );Hybrid_Auth::storage()->set( "hauth_session.{$this->providerId}.user", $this->user );}}
Этот код позволяет авторизоваться через Wargaming.Net OpenID и получить ссылку на профиль игрока, его ник и ID.

В случае же авторизации через Public API пришлось описывать свой класс, на основе встроенного Hybrid_Provider_Model, так как это не OAuth (в случае OAuth код бы на порядок упростился и был бы чуть больше, чем в случае OpenID). Сам код провайдера я пока не готов предоставить, его еще надо вылизать и привести в полное соответствие с требования Public API (выход и продление токена). Пример такого класса можно увидеть в провайдере Facebook, который входит в состав Hybridauth "из коробки". После личного удовлетворения своим кодом, постараюсь выложить его здесь и наверное, отдам Hybridauth, когда можно будет.

P.S. а почему бы не использовать стандартизированный OAuth2 ? Стандартный функционал OpenID вполне справляется с задачей, я думаю и стандартный OAuth2 тоже сможет сделать все, что хотите от авторизации, причем в более лучшей и наверняка удобной форме.

P.S.S. перечитал описание OAuth - алгоритм очень схож с тем, что предоставляет Public API. Если я ошибаюсь, и это на самом деле все таки OAuth - приношу извенения, слишком мало опыта работы с таким функционалом.

Изменено пользователем SamurayDjek
  • Плюс 1
Ссылка на комментарий
Игроки
569 публикаций
20 955 боёв
03 Дек 2013 - 00:22 пользователь SamurayDjek сказал:

...

P.S. а почему бы не использовать стандартизированный OAuth2 ? Стандартный функционал OpenID вполне справляется с задачей, я думаю и стандартный OAuth2 тоже сможет сделать все, что хотите от авторизации, причем в более лучшей и наверняка удобной форме.

P.S.S. перечитал описание OAuth - алгоритм очень схож с тем, что предоставляет Public API. Если я ошибаюсь, и это на самом деле все таки OAuth - приношу извенения, слишком мало опыта работы с таким функционалом.

Авторизация посредством Public API не является OAuth авторизацией. Она разработана на основе общей авторизации на ресурсах Wargaming (Wargaming OpenID) для того, чтобы была возможность получать больше информации через Public API, чем позволяет обычная авторизация посредством OpenID.

Идеи о переработке авторизации под аналог OAuth 2.0 есть, однако пока это находится на стадии обсуждения, так как особой необходимости в этом нет.

Ссылка на комментарий
Игроки
37 публикаций
12 879 боёв
03 Дек 2013 - 12:44 пользователь Hedeon сказал:

Авторизация посредством Public API не является OAuth авторизацией. Она разработана на основе общей авторизации на ресурсах Wargaming (Wargaming OpenID) для того, чтобы была возможность получать больше информации через Public API, чем позволяет обычная авторизация посредством OpenID.

Идеи о переработки авторизации под аналог OAuth 2.0 есть, однако пока это находится на стадии обсуждения, так как особой необходимости в этом нет.

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

Например, у нас в Drupal для этого можно было использовать 1-2 модуля, которые настроились бы в админке и я бы смог использовать авторизацию практически без дополнительной разработки, если бы это был OAuth.

Ссылка на комментарий
Игроки
569 публикаций
20 955 боёв
03 Дек 2013 - 12:49 пользователь SamurayDjek сказал:

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

Например, у нас в Drupal для этого можно было использовать 1-2 модуля, которые настроились бы в админке и я бы смог использовать авторизацию практически без дополнительной разработки, если бы это был OAuth.

Мы понимаем, что использование стандартизированных механизмов было бы удобнее для некоторых пользователей, но, к сожалению, в данный момент есть возможность использовать только предложенный нами механизм авторизации посредством Public API.

Ваши коментарии будут учтены при дальнейших обсуждениях развития метода auth/login.

Ссылка на комментарий
Игроки
42 публикации
8 262 боя

А почему методы, которые возвращают некие массивы данных, различаются по структуре ответов?

Например, ответ от метода account/list - data это array объектов типа  в представлении json.

Однако, если сделать запрос clan/list, то data - это уже object, где данные - это members. И собственно, поле 1 (например) - это содержимое ClanDetails, но в виде membera, а не элемента массива.

Собственно, если я нигде не просчитался, то в чем разница и зачем так было делать? И если я прав, то почему-бы в одну из следующих версий апи не добавить это маленькой замечательное исправление?

В целом, мне как бы все равно, но не очень понятен такой ход. Да и при десериализации вместо List нужно использовать Dictionary (это я про шарп)

Ссылка на комментарий
Игроки
42 публикации
8 262 боя

где найти значения, которые передаются в member.role в http://wiki.worldoft...ution_of_Rights (табличка снизу)

 

я примерно подобрал значения -   

private

commander

diplomat

recruit

vice_leader

leader

recruiter

treasurer

 

Вроде правильно. Неплохо бы было эту (и, возможно подобные этому) данные писать в API в качестве допустимых значений. Как, например, это сделано с языками во входящем параметре.

Ссылка на комментарий
Игроки
86 публикаций
23 055 боёв
04 Дек 2013 - 16:17 пользователь bondarenkod сказал:

А почему методы, которые возвращают некие массивы данных, различаются по структуре ответов?

Например, ответ от метода account/list - data это array объектов типа  в представлении json.

Однако, если сделать запрос clan/list, то data - это уже object, где данные - это members. И собственно, поле 1 (например) - это содержимое ClanDetails, но в виде membera, а не элемента массива.

Собственно, если я нигде не просчитался, то в чем разница и зачем так было делать? И если я прав, то почему-бы в одну из следующих версий апи не добавить это маленькой замечательное исправление?

В целом, мне как бы все равно, но не очень понятен такой ход. Да и при десериализации вместо List нужно использовать Dictionary (это я про шарп)

Методы account/list и clan/list одинаковы по структуре и в data возвращают массив элементов, удовлетворяющих условиям поиска.
05 Дек 2013 - 00:48 пользователь bondarenkod сказал:

где найти значения, которые передаются в member.role в http://wiki.worldoft...ution_of_Rights (табличка снизу)

я примерно подобрал значения -   

private

commander

diplomat

recruit

vice_leader

leader

recruiter

treasurer

Вроде правильно. Неплохо бы было эту (и, возможно подобные этому) данные писать в API в качестве допустимых значений. Как, например, это сделано с языками во входящем параметре.

А в чем проблема добавить эти значения как константу в свое приложение? Эти данные статичны, а если принять во внимание квоту на количество запросов, то смысл запрашивать статичные данные как-то сам по себе отпадает.
Ссылка на комментарий
Игроки
427 публикаций
46 364 боя
05 Дек 2013 - 08:41 пользователь Terradine сказал:

А в чем проблема добавить эти значения как константу в свое приложение? Эти данные статичны, а если принять во внимание квоту на количество запросов, то смысл запрашивать статичные данные как-то сам по себе отпадает.

Проблемы то нет,  хорошо бы в документации прописать, те значения, которые могут принимать такие поля. Чтобы не играть в "угадайку" :)
  • Плюс 1

Сайт клана IS-23

 

Ссылка на комментарий
Игроки
86 публикаций
23 055 боёв
05 Дек 2013 - 13:25 пользователь Drahtigel сказал:

Проблемы то нет,  хорошо бы в документации прописать, те значения, которые могут принимать такие поля. Чтобы не играть в "угадайку" :)

Документация в кабинете разработчика будет дополняться, возможно эта информация появится в одном из ближайших обновлений.
Ссылка на комментарий
Игроки
42 публикации
8 262 боя
05 Дек 2013 - 08:41 пользователь Terradine сказал:

Методы account/list и clan/list одинаковы по структуре и в data возвращают массив элементов, удовлетворяющих условиям поиска.

Прошу прощения, я ошибся немного.

Структуру clan/list, account/list следует сравнивать с clan/info.

Зеленым помечен массив. Красным - объект с полями.

В случае clan/list и account/list мы видим в data список.

В случае деталей клана (куда можно передать несколько id клана), возвращается data как object с полями-объектами, имя которого соответсвует айдишнику клана. И, как по мне, если это было целью такого огорода, информация излишняя.

Изображение

05 Дек 2013 - 08:41 пользователь Terradine сказал:

А в чем проблема добавить эти значения как константу в свое приложение? Эти данные статичны, а если принять во внимание квоту на количество запросов, то смысл запрашивать статичные данные как-то сам по себе отпадает.

так я и добавил. Заодно важность должности соотвествует позиции в перечислении, при отображении на экране никакие сортировки производить не нужно).

	  [DataContract]		public enum EClassMemberRole		{			[DataMember(Name = "leader")]			LeaderRole,			[DataMember(Name = "vice_leader")]			ViceLeaderRole,			[DataMember(Name = "commander")]			CommanderRole,			[DataMember(Name = "recruiter")]			RecruiterRole,			[DataMember(Name = "treasurer")]			TreasurerRole,			[DataMember(Name = "diplomat")]			DiplomatRole,			[DataMember(Name = "private")]			PrivateRole,			[DataMember(Name = "recruit")]			RecruitRole		}
Просто я хочу узнать о новых значениях не методом тыка или поиска по сопутсвующим вики, а знать наверняка, что я могу там получить. В данном случае мне пришлось обойти примерно 5 кланов, пока я попал на новые значения (рекрутер и бухгалтер). Обычно, такую информацию пишут уже конкретно в документации.
Ссылка на комментарий
Игроки
86 публикаций
23 055 боёв
05 Дек 2013 - 17:19 пользователь bondarenkod сказал:

Структуру clan/list, account/list следует сравнивать с clan/info.

Некорректно сравнивать эти запросы, т.к. методы clan/list, account/list возвращают список кланов или игроков, которые подпадают под фильтр запроса, а метод clan/info возвращает данные по конкретному одному клану. Поэтому в первом случае мы и имеем массив.

 

05 Дек 2013 - 17:19 пользователь bondarenkod сказал:

Просто я хочу узнать о новых значениях не методом тыка или поиска по сопутсвующим вики, а знать наверняка, что я могу там получить

Информация в кабинете разработчика будет дополняться, спасибо  за предложение

Ссылка на комментарий
Игроки
42 публикации
8 262 боя
05 Дек 2013 - 17:35 пользователь Terradine сказал:

Некорректно сравнивать эти запросы, т.к. методы clan/list, account/list возвращают список кланов или игроков, которые подпадают под фильтр запроса, а метод clan/info возвращает данные по конкретному одному клану. Поэтому в первом случае мы и имеем массив.

В любом случае там не json array как случае clan/list и account/list.

 

Такая же ситуация и с внутренним полем members, где таким же способом описан список членов клана.

 

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

 

Спецификации по структуре http://json.org/ , http://www.json.org/json-ru.html. Конкретно - справа структура. Чуть ниже объясненени что такое object, а что такое array.

 

>>данные по конкретному одному клану

Нет, он возвращает столько данных, сколько ему передали в запросе (до лимита). Т.е. (как по мне) что у поиска, что тут в ответе должен быть массив найденных кланов\игроков\детальной инфы по кланам. Аналогично и для поля members. Там список игроков.

 

Можете сами проверить https://api.worldoft...o&clan_id=1,2,3

Ссылка на комментарий

В целях безопасности не указывайте здесь личную информацию о себе или о ком-либо другом, так как мы не сможем защитить её в соответствии с Политикой конфиденциальности Леста Игры.

Пожалуйста, войдите для комментирования

Вы сможете оставить комментарий после входа



Войти сейчас
  • Сейчас на странице   0 пользователей

    • Эту страницу никто не просматривает.
×
×
  • Создать...