ZyX
#1
без гильдии
могущество: 772
длань судьбы
оркесса Невниз
123 уровня
Начал писать привязки к API на Python для своего бота. Библиотека здесь: bitbucket: ZyX_I/thetaleapi. С документацией некоторые проблемы: ReadTheDocs почему‐то не показывает документацию к членам некоторых классов, хотя сами документированные члены показывает (недокументированные, хотя и не приватные нет) (на моей машине всё нормально, в том числе с их темой), README и примеров нету и нет релиза на PyPI. Что есть: общие методы для отправки POST и GET запросов с ожиданием ответа в случае отложенных ответов (используется concurrent.futures для неблокирующего ожидания), конвертация ошибок в ответах в исключения, возможность входа как с парой логин/пароль, так и более приличным методом /accounts/third-party/tokens/api/request-authorisation (keyring, задание вопросов пользователю и т.п. не поддерживается и поддерживаться не будет: библиотека возвращает и принимает всё, что нужно, чтобы иметь эти части в самом приложении).

Также присутствуют такие интересные вещи, как список всех способностей (связанный с эффектами артефактов) и база данных со связями карт судьбы и их эффектов (модуль thetale.relations, связь способностей с бонусами артефактов будет там же).

Требования: Python-3.4 (не 3.x), никаких дополнительных библиотек. В клиенте очень много Enum’ов, из‐за которых и выставляется требование 3.4. Пример использования только модуля thetale.request:#!/usr/bin/python3.4
from thetale.request import TheTaleClient, PlayerAbilities
from time import sleep
import sys

client = TheTaleClient()
res = client.authorise(print)
res.result()
artifacts = {340, 341, 342, 343, 344}
while True:
info = client.info()
if any((val in artifacts)
for val in info.values()):
client.use_ability(PlayerAbilities.help)
sleep(60)


Сейчас можно заменить TheTaleClient на Game из thetale, а «any(((val in artifacts) for val in info.values()))» на «any(((val.special_effect == ArtifactEffects.children_present) for val in info.account.hero.bag))» (ArtifactEffects из thetale.equipment), но в общем такой примитив не является целью.



Сообщение изменено
Hamster
#2
без гильдии
могущество: 5163
длань судьбы
гоблин Джеаки
101 уровня
Точку из ссылки на библиотеку лучше убрать, а то 404.
ZyX
#3
без гильдии
могущество: 772
длань судьбы
оркесса Невниз
123 уровня
Убрал точку и обновил состояние: появились настройки для Sphinx и документация на RTD (но с проблемами): http://thetaleapi.readthedocs.org/en/latest/, ожидание отложенных ответов стало неблокирующим (ожидание первого ответа всё равно блокирующее). До сих пор нет журнала и квестов.
Hamster
#4
без гильдии
могущество: 5163
длань судьбы
гоблин Джеаки
101 уровня
Планируется ли делать что-нибудь на основе этого апи или это так, для личного пользования и использования знающими python?
P.S. в ссылку на доки затесалась запятая в конце :)
ZyX
#5
без гильдии
могущество: 772
длань судьбы
оркесса Невниз
123 уровня
Настраиваемого бота «для всех» делать не собираюсь. Но вкрутить туда как‐нибудь лингвистику (с анализом сообщений в журнале) планируется. Надеюсь, что когда до этого всё‐таки дойдёт необходимая информация появится в API. Или хотя бы будет API для лингвистики.
Hamster
#6
без гильдии
могущество: 5163
длань судьбы
гоблин Джеаки
101 уровня
ZyX
Надеюсь, что когда до этого всё‐таки дойдёт необходимая информация появится в API. Или хотя бы будет API для лингвистики.
Я тоже жду и надеюсь...
imposeren
#7
[МОЛОТ] Рекрут
могущество: 1361
длань судьбы
дварф Фрез
105 уровня
Я тоже писал модуль, правда давненько:
https://github.com/imposeren/thetaleapipy
пример использования:


from thetaleapi import TheTaleApi
import logging

logger = logging.getLogger(__name__)
api = TheTaleApi()

auth_result = api.auth(email, password).json()
if auth_result != 'ok':
logger.error(auth_result)

state = api.get_game_info()
if state == 'pve':
if state < 300:
api.use_help()
api.logout()


более детальный пример тут:
https://github.com/imposeren/thetaleapipy/blob/master/demo_bot.py

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

P.S. Используя requests вместо urllib+http.cookiejar авторизация конечно значительно проще получается (=



Сообщение изменено
ZyX
#8
без гильдии
могущество: 772
длань судьбы
оркесса Невниз
123 уровня
Ну это уж слишком тонкая обёртка. Нету ни .authorise, ни получения отложенного ответа. Мой Initial commit и то функциональнее.
имя игрока сброшено
#9
без гильдии
могущество: 0

эльф Писан
80 уровня
Как-то много ботов на питоне в последнее время
ZyX
#10
без гильдии
могущество: 772
длань судьбы
оркесса Невниз
123 уровня
Bladdon
Как-то много ботов на питоне в последнее время
Во‐первых, это не бот. Во‐вторых, большинство людей не утруждают себя не то что созданием Python классов‐обёрток, а и даже документацией. Бота на Python написать может любой человек, хоть сколько‐то знакомый с программированием. Библиотеку с документацией — нет, даже не смотря на то, что это не так уж сложно с возможностями Sphinx.
FailMan
#11
[-☀-] Боец
могущество: 1913
длань судьбы
эльф Sung-Ki
134 уровня
Начал писать привязки к API на Python для своего бота

Во‐первых, это не бот

Так что же это?
Hamster
#12
без гильдии
могущество: 5163
длань судьбы
гоблин Джеаки
101 уровня
Это обертка на Python для API.

Кстати, не очень понимаю, что сложного в написании подобной библиотеки с документацией.
ZyX
#13
без гильдии
могущество: 772
длань судьбы
оркесса Невниз
123 уровня
Начал писать привязки к API на Python для своего бота
Во‐первых, это не бот
Так что же это?
Это библиотека. В первом предложении первого сообщения написано, что это.Hamster
Это обертка на Python для API.

Кстати, не очень понимаю, что сложного в написании подобной библиотеки с документацией.
Нужно много писать. Это сложно — убедить себя, что нужно написать именно библиотеку с полноценной документацией. И где я сказал, что это сложно?
FailMan
#14
[-☀-] Боец
могущество: 1913
длань судьбы
эльф Sung-Ki
134 уровня
ZyX
То есть она используется для создания бота, правильно?
Hamster
#15
без гильдии
могущество: 5163
длань судьбы
гоблин Джеаки
101 уровня
ZyX
И где я сказал, что это сложно?
Бота на Python написать может любой человек, хоть сколько‐то знакомый с программированием. Библиотеку с документацией — нет
Ок, не так понял, значит)