182 lines
9.7 KiB
Markdown
182 lines
9.7 KiB
Markdown
# 8th Wind Fetcher — Парсер Восьмого ветра
|
||
|
||
## Godville game profiles parser
|
||
|
||
Dependencies ruled by [dep](https://github.com/golang/dep).
|
||
|
||
This parser designed to be companion of [8th Wind](https://wind8.ru) site engine. This program parses profiles and sends them to API endpoint of wind8 site engine.
|
||
|
||
You can use this parser for your own purposes, but you will do it at your own risk. I'm not responsible for anyone who violates Godville game rules using this software.
|
||
|
||
This software created for demonstation purposes only.
|
||
|
||
## Парсер профилей игры Годвилль
|
||
|
||
Зависимости управляются при помощи [dep](https://github.com/golang/dep).
|
||
|
||
Этот парсер создан для работы с сайтом [Восьмой ветер](https://wind8.ru). Приложение ``wind8_fetcher`` парсит профили Годвилля и отдаёт данные по API движку сайта.
|
||
|
||
Вы можете использовать эту программу для своих личных задач, но делайте это на свой страх и риск. Я не несу ответственности за каждого, кто нарушит правиля Годвилля с помощью этой программы.
|
||
|
||
Данная программа создана исключительно в ознакомительных целях.
|
||
|
||
## Параметры, возвращаемые парсером
|
||
|
||
Для начала, существуют ровно два состояния ответа: на правильный и неправильный запрос. В случае неправильного запроса ответ будет примерно таким:
|
||
|
||
{
|
||
"status": "error",
|
||
"error_code": "400",
|
||
"description": "Invalid data."
|
||
}
|
||
|
||
Попали на такой ответ — смотрим, что случилось. Особенно поможет поле "description" — обычно его текста достаточно, чтобы понять, что случилось.
|
||
|
||
Формат тела правильного HTTP-запроса, ожидаемого программой, такой:
|
||
|
||
{
|
||
"god_name": "Имя бога"
|
||
}
|
||
|
||
_Дельный совет: делайте запросы не чаще одного раза в 20 секунд на один работающий инстанс программы._
|
||
|
||
Теперь поговорим об ответе на правильный запрос. В нём дофига полей, и ещё более дофига полей могут появляться от случая к случаю.
|
||
|
||
Вот так выглядит ответ на запрос о боге, у которого _есть всё_ (и то не факт):
|
||
|
||
{
|
||
"pantheons": {
|
||
"duelers": "21",
|
||
"duelery": "3",
|
||
"gladiatorship": "69",
|
||
"gratitude": "953",
|
||
"mastery": "48",
|
||
"might": "30",
|
||
"pairs": "19",
|
||
"popularity": "6",
|
||
"savings": "26",
|
||
"storytelling": "50",
|
||
"survival": "151",
|
||
"taming": "148",
|
||
"templehood": "1371",
|
||
"unity": "2",
|
||
"wood": "12"
|
||
},
|
||
"profile": {
|
||
"age": "8 лет 5 месяцев",
|
||
"arena_loss": "245",
|
||
"arena_wins": "1263",
|
||
"beasts_done": "05.03.2017",
|
||
"beasts_female": "1000",
|
||
"beasts_male": "1000",
|
||
"beasts_pairs": "1000",
|
||
"boat_done": "24.04.2014",
|
||
"body": "костюм царицы полей",
|
||
"body_stat": "+143",
|
||
"bricks": "1000",
|
||
"chronicle": "Летопись удалена за ненадобностью",
|
||
"church_done": "17.04.2011",
|
||
"coat": "протежезл",
|
||
"coat_stat": "+146",
|
||
"deaths": "120",
|
||
"god_name": "Имя бога",
|
||
"guild": "дом семи ветров",
|
||
"guild_status": "домозавр",
|
||
"hands": "культя личности",
|
||
"hands_stat": "+145",
|
||
"head": "шотландские виски",
|
||
"head_stat": "+145",
|
||
"hero_name": "Имя геройса",
|
||
"legs": "доколье",
|
||
"legs_stat": "+142",
|
||
"level": "133",
|
||
"motto": "Расщеплю на молекулы",
|
||
"pension": "30000",
|
||
"personality": "нейтральный",
|
||
"pet_level": "16",
|
||
"pet_name": "Гипноз",
|
||
"pet_type": "медуз горгоныч",
|
||
"shop": "«Гробы Напрокат»",
|
||
"shop_level": "33",
|
||
"talisman": "охранная грамота",
|
||
"talisman_stat": "+144",
|
||
"weapon": "кофемолот",
|
||
"weapon_stat": "+144",
|
||
"woods": "5121"
|
||
},
|
||
"skills": {
|
||
"0": "руки-ножницы",
|
||
"1": "залом уха",
|
||
"2": "кувырок через пупок",
|
||
"3": "любительская хирургия",
|
||
"4": "слоновий сэйлз",
|
||
"5": "крылатые качели",
|
||
"6": "удушливое объятие",
|
||
"7": "паническая атака",
|
||
"8": "принуждение к миру",
|
||
"9": "покупательная способность",
|
||
"0_level": "129",
|
||
"1_level": "127",
|
||
"2_level": "127",
|
||
"3_level": "123",
|
||
"4_level": "121",
|
||
"5_level": "118",
|
||
"6_level": "115",
|
||
"7_level": "115",
|
||
"8_level": "109",
|
||
"9_level": "108"
|
||
},
|
||
"status": "success"
|
||
}
|
||
|
||
Ответ на правильный запрос всегда будет состоять из четырёх секций — ``profile``, ``pantheons``, ``skills`` и ``status``. С последним полем всё понятно — ``success`` он и в Африке ``success``. Разберём первые три.
|
||
|
||
В секции ``profile`` нас будут ждать следующие _обязательные_ параметры:
|
||
|
||
* ``god_name`` — имя бога в игре.
|
||
* ``hero_name`` — имя героя.
|
||
* ``level`` — уровень
|
||
* ``motto`` — девиз
|
||
* ``age`` — возраст
|
||
* ``personality`` — характер героя
|
||
* ``arena_wins`` — количество побед на арене
|
||
* ``arena_loss`` — количество поражений на арене
|
||
* ``bricks`` — количество кирпичей. У храмовладельцев — 1000.
|
||
* ``church_done`` — дата постройки храма, или же пустая строка.
|
||
* ``chronicle`` — летопись. "Летопись не заполнена" — это тоже летопись! Сырой HTML.
|
||
|
||
Всё остальное может быть, а может и не быть. _Необязательные_ данные таковы:
|
||
|
||
* ``deaths`` — количество смертей
|
||
* ``guild`` — гильдия
|
||
* ``guild_status`` — статус в гильдии
|
||
* ``woods`` — количество гоферовых брёвен
|
||
* ``boat_done`` — дата постройки ковчега, ежели таковой построен, или же пустая строка, если он собирается
|
||
* ``beasts_male`` — количество самцов
|
||
* ``beasts_female`` — количество самок
|
||
* ``beasts_pairs`` — количество пар тварей
|
||
* ``beasts_done`` — дата получения 1000-й пары тварей.
|
||
* ``pension`` — количество сбережений (в тысячах). У лавочников равно 30000.
|
||
* ``shop`` — название лавки
|
||
* ``shop_level`` — уровень торговца
|
||
* ``pet_name`` — имя питомца
|
||
* ``pet_level`` — уровень питомца
|
||
* ``pet_type`` — порода питомца
|
||
|
||
Всякая экипировка тоже заносится в ``profile``, а именно:
|
||
|
||
* ``weapon`` — оружие
|
||
* ``coat`` — щит
|
||
* ``head`` — голова
|
||
* ``body`` — тело
|
||
* ``hands`` — руки
|
||
* ``legs`` — ноги
|
||
* ``talisman`` — талисман.
|
||
|
||
Для каждого типа экипировки есть ``<имя_экипировки>_stat``, где указывается сила того или иного обмундирования. Внимание: это не integer, там есть знак + или -.
|
||
|
||
Самая сложная часть позади. Дальше — блок ``pantheons``. Пантеонов у нас много, иногда они даже размножаются. Здесь всё просто: идём в Годвилль, смотрим, каким словом заканчивается URL страницы с нужным пантеоном — и вуаля. Все имена данных в этом блоке совпадают с внутренними именами пантеонов в игре.
|
||
|
||
Ну и, наконец, последний блок ``skills``. Здесь у нас полный разброд и шатание, поэтому параметры называются ``0``, ``0_level``, ``1``, ``1_level`` и так далее. Каждый параметр с именем-цифрой — название умения, а с ``_level`` на конце — его уровень.
|
||
|
||
На этом, кажется, всё. Хэппи хакинга, и да не забанят тебя демиурги! |