API TopTripTip

Общее описание

Работа с API осуществляется на основе REST путем отправки HTTP запросов методом POST и получени ответов с результатом или с описанием ошибки.
Для идентификиации успешного обращения используетмя код ответа 200
Для идентификации неуспешного обращения используется код 400

Заголовки запроса, используемые для обращение к серверу

# Заголовок Значение или пример значения ОписаниеОбязательный для всех запросов к api
1 Content-Type application/x-www-form-urlencodedТредуется для идентификации запроса как POST и возможности получения параметровда
2 Ios-Bundle-Id ru.appreal.toptriptip.russia Идентификатор приложения, обращающегося у api, обязательный заголовок для всех обращений к серверу.да
3 OS-Version 4.1.1 Версия OS устройствада
4 Ios-Native-Locale ru_RU Текущая локаль устройствада
5 Ios-Device-Type iPhone или iPad Определение типа устройства, обращающегося к apiда
6 Device-Model iPhone5,4 Определение модели устройства для выдачи оптимизированных под это устройство изображенийда
7 Accept-Encoding gzip Говорит серверу что он может сжать отдаваемый контент

Некоторые заголовки ответа

Заголовок Значение или пример значения Описание
Content-Type application/json; charset=utf-8Сервер отдает json в кодировке UTF-8
Content-Encoding gzipСервер отдает сжатый контент

Запросы к серверу

URI для запроса определяется соединением основного URL запроса и его суффикса, определяющего к какой части API мы хотим обратиться
Например: api.guide.toptriptip.com - основной адрес, /update - суффикс, полный адрес: http://api.guide.toptriptip.com/update Основных URL два:
Для тестирования: api.guide.letsapp.ru
Production: api.guide.toptriptip.com

Суффикс запроса Описание параметров Описание запроса Пример ответа сервера
/dispatch/i18n Запрос на получение локализованных строк по индентификатору приложения
{
    "timestamp" : 654987321,
    "localizations": {
        "en_GB": {
            "greeting": "Hello",
            "no_connection": "No Internet connection available",
            "download_content_weight": "Ready to download %d mb."
        },
        "ru_RU": {
            "greeting": "Привет",
            "no_connection": "Нет подключения к сети Интернет",
            "download_content_weight": "Готов к загрузке %d mb"
        }
    }
}
/dispatch
UNPUBLISHED=1 Если передан параметр UNPUBLISHED - в выдачу включаются также неопубликованные гиды
PREVIEW=1 Если передан параметр PREVIEW - информация по времени сохранения версии и по весу картинок берется из базы подготовленной для публикации версии а не из базы опубликованной версии контента
Запрос на получение данных о опубликованных гидах по идентификатору приложения, с контентом, локализованным для всех языков, используемых с этим идентификатором приложения.
{
    "languages": [  //массив языков  используемых с бандлом (идентификатором приложения)
        {
            "id": "2",
            "name": "\u0420\u0443\u0441\u0441\u043a\u0438\u0439",
            "locale": "ru_RU",
            "order": "1",
            "localizations": {                              // локализация названия языка на всех используемых языках
                "en_GB": "Russian",
                "es_ES": "Ruso",
                "zh_CN": "\u4fc4\u8bed",
                "lv_LV": "Krievu"
            }
        },
        {
            "id": "4",
            "name": "English",
            "locale": "en_GB",
            "order": "2",
            "localizations": {
                "es_ES": "Ingl\u00e9s",
                "ru_RU": "\u0410\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439",
                "zh_CN": "\u82f1\u8bed",
                "lv_LV": "Ang\u013cu"
            }
        }
    ],
    "guides": [                                             //массив гидов прикрепленных к бандлу (идентификаторe приложения)
        {
            "id": "1",                                      //идентификатор
            "order": "1",                                   // порядковый номер в бандле
            "default_name": "Test Guide Application",       //нелокализованное название гида
            "md5": "c4ca4238a0b923820dcc509a6f75849b",
            "published": "1",                               // идентификатор состояния опубликованнности
            "version": "1416900291",                        // время сохранения опубликованной версии
                                                            // (или подготовленной к публикации версии если в запросе передан параметр PREVIEW=1)
            "names": {                                      //Локализованные названия гида
                "ru_RU": "\u0422\u0435\u0441\u0442 \u0433\u0438\u0434",
                "en_GB": "Test guide"
            },
            "descriptions": {                               //Локализованные описания гида
                "ru_RU": "\u0444\u044b\u0430\u0449\u043b\u043f\u043e\u0444\u0432\u0449\u043a\u043f\u044c\u0444\u0432\u0430\u043f",
                "en_GB": "Trax babax"
            },
            "sizes": {                  // размеры гида
                "banner": 829861,       // не зависимо от модели устройства размер баннеров
                "image": 3268659,       // не зависимо от модели устройства размер картинок
                "icon": "16108",        // не зависимо от модели устройства размер иконок
                "element": {            // не зависимо от модели устройства размер изображений для элементов интерфейса
                    "ru_RU": "1087407",
                    "en_GB": "0"
                },
                "counts": {             // количество сущностей
                    "objects": "15",
                    "events": "2",
                    "routes": "1",
                    "audios": "6"
                },
                "dependsOnModel": {
                    "total": 4148896   // общий вес изображений гида а зависимоати от переданной модели устройства
                }
            },
            "cover": {                                              // данные по изображению для обложки гида
                "w": "572",
                "h": "930",
                "size": "139401",
                "modified": "1417076516",
                "coverPath": "covers\/variants\/1-18-1.jpg"
            },
            "pathToResources": "http:\/\/resources.guide.letsapp.ru\/c4ca4238a0b923820dcc509a6f75849b"
        }
    ],
    "requestModel": "iPhone5,4"                                     // переданная модель устройства
}
/guide-update
*guide_id (integer) Идентификатор гида, для которого требуется получить информацию.
*timestamp (integer) (Unix Timestamp) время последнего обращения к api . Будут возвращений только те сущности время изменения которых позже timestamp. Не может быть раньше 2012г. или позже текущего момента
UNPUBLISHED (integer)
PREVIEW (integer)

Самый главный запрос к API, и самый большой ответ, может достигать 5М. Поэтому лучше использовать заголовок "Accept-Encoding: gzip" для уменьшения траффика.

Для каждого гида на сервере существует три баз данных: 1 - постоянно изменяемая база в которую редактор вносит изменения; 2 - база скопированная из первой в момент сохранения версии гида для публикации; 3 - база скопированная из первой для просмотра контента преред публикацией (сохранением версии)

Сервер возвращает изменения информации по гиду с момента времени, переданного в параметре timestamp из базы №2. Если передан параметр PREVIEW=1 то данные берутся из базы №3

Если вы передаете индентификатор неопубликованного гида, требуется передать параметр UNPUBLISHED=1 для получения данных а не сообщения о ошибке

{
    "elements": { // настойки для элементов интерфейса приложения разбитые по локали, названию элемента, состонию элемента
        "ru_RU": [
            {
                "name": "app_descr_header", // идентификатор элеметна
                "states": {                 //состояния
                    "normal": {
                        "fontSize": null,
                        "title": "sertse",
                        "fontName": null,
                        "imageName": null,
                        "imageSize": null,
                        "backgroundImageName": null,
                        "backgroundImageSize": null,
                        "color": null
                    },
                    "selected": {
                        "fontSize": null,
                        "title": "rsertsert",
                        "fontName": null,
                        "imageName": null,
                        "imageSize": null,
                        "backgroundImageName": null,
                        "backgroundImageSize": null,
                        "color": null
                    },
                    "highlighted": {
                        "fontSize": null,
                        "title": "serterrrrrrt",
                        "fontName": null,
                        "imageName": null,
                        "imageSize": null,
                        "backgroundImageName": null,
                        "backgroundImageSize": null,
                        "color": null
                    }
                }
            },
            {
                "name": "test",
                "states": {
                    "normal": {
                        "fontSize": null,
                        "title": "ererer",
                        "fontName": null,
                        "imageName": "\/ios\/elements\/image_70_2_normal.jpg",
                        "imageSize": "1087407",
                        "backgroundImageName": null,
                        "backgroundImageSize": null,
                        "color": null
                    },
                    "selected": {
                        "fontSize": null,
                        "title": null,
                        "fontName": null,
                        "imageName": null,
                        "imageSize": null,
                        "backgroundImageName": null,
                        "backgroundImageSize": null,
                        "color": null
                    },
                    "highlighted": {
                        "fontSize": null,
                        "title": null,
                        "fontName": null,
                        "imageName": null,
                        "imageSize": null,
                        "backgroundImageName": null,
                        "backgroundImageSize": null,
                        "color": null
                    }
                }
            }
        ],
        "en_GB": [
            {
                "name": "app_descr_header",
                "states": {
                    "normal": {
                        "fontSize": null,
                        "title": "kjljklkjl",
                        "fontName": null,
                        "imageName": null,
                        "imageSize": null,
                        "backgroundImageName": null,
                        "backgroundImageSize": null,
                        "color": null
                    },
                    "selected": {
                        "fontSize": null,
                        "title": "kjlklklkj",
                        "fontName": null,
                        "imageName": null,
                        "imageSize": null,
                        "backgroundImageName": null,
                        "backgroundImageSize": null,
                        "color": null
                    },
                    "highlighted": {
                        "fontSize": null,
                        "title": "jkljkljl",
                        "fontName": null,
                        "imageName": null,
                        "imageSize": null,
                        "backgroundImageName": null,
                        "backgroundImageSize": null,
                        "color": null
                    }
                }
            },
            {
                "name": "test",
                "states": {
                    "normal": {
                        "fontSize": null,
                        "title": "erererer",
                        "fontName": null,
                        "imageName": null,
                        "imageSize": null,
                        "backgroundImageName": null,
                        "backgroundImageSize": null,
                        "color": null
                    },
                    "selected": {
                        "fontSize": null,
                        "title": null,
                        "fontName": null,
                        "imageName": null,
                        "imageSize": null,
                        "backgroundImageName": null,
                        "backgroundImageSize": null,
                        "color": null
                    },
                    "highlighted": {
                        "fontSize": null,
                        "title": null,
                        "fontName": null,
                        "imageName": null,
                        "imageSize": null,
                        "backgroundImageName": null,
                        "backgroundImageSize": null,
                        "color": null
                    }
                }
            }
        ]
    },

    "mapSettings": {"minLat": 56.540411, "minLng": 35.540771, "maxLat": 54.927142, "maxLng": 40.144043},
    "mapRegions": [
        {"custom": false, "code": "RU", "URLs": []},
        {                                                                       // дать определение
            "custom": true,
            "code": "Crimea",
            "URLs": [
                "http:\/\/resources.guide.toptriptip.com\/maps\/Crimea.skm",
                "http:\/\/resources.guide.toptriptip.com\/maps\/Crimea.txg",
                "http:\/\/resources.guide.toptriptip.com\/maps\/Crimea.zip"
            ]
        }
    ],
    "tag_types": [  // массив типов тегов используемых в приложении
        {
            "id": "1",
            "name": "Filters",
            "descr": "\u0424\u0438\u043b\u044c\u0442\u0440\u0443\u044e\u0449\u0438\u0435 \u0442\u0435\u0433\u0438"
        },
        {
            "id": "2",
            "name": "Sections",
            "descr": "\u0422\u0435\u0433\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432"
        }
    ],
    "frameTypes": [ //набор соотношений сторон width / height используемых для нарезки фреймов из изображений
        {"id": "28", "ratio": "0.563380", "name": "640X1136"},
        {"id": "42", "ratio": "2.206897", "name": "320X145"}
    ],
    // места для баннеров (баннер можно прикрепить к месту если его ширина совпадает с шириной мета)
    "banner_places": [{"id": "7", "name": "adv150X640", "w": "640", "h": "150"}],
    "weather": [ //yahoo woeid  - идентификаторы метеостанций для получения погоды в регионе гида
        "2076595",
        "2122265"
    ],
    //абсолютный путь до папки с ресурсами гида (картинки etc...)
    "pathToResources": "http:\/\/resources.guide.letsapp.ru\/c4ca4238a0b923820dcc509a6f75849b",
    "deleted": [ // сущности, которые были удалены из гида с момента времени,полученного в параметре timestamp
        {
            "id": "13",  // идентификатор сущности униуальный среди сущностей того же типа
            "modified": "1402910527",  // время удаления
            "entity": "Audio" // тип сущности
        },
        {"id": "4", "modified": "1403085259", "entity": "Banner"},
        {"id": "125", "modified": "1404203308", "entity": "Image"},
        {"id": "37", "modified": "1406538098", "entity": "Tag"},
        {"id": "2", "modified": "1406901624", "entity": "Object"}

    ],
    "tags": {   // теги измененные с моментв tmestamp
        "2": {
            "id": "2",
            "parent_id": null, // теги могут быть вложенными
            "name": "2-category", // имя тега по умолчанию (выводится если нет локализованного названия)
            "modified": "1413965851", // время изменения
            "adv": "0",                 // является ли тег рекламным
            "in_parent_order": "1",     // порядковый номер тега если сортировать по родительскому тегу
            "types": [ //типы тегов к которотым принадлежит этот тег
                {
                    "type_id": "1",
                    "in_type_order": "1"// порядковый номер тега при сортировке по type_id
                }
            ],
            "icons": [ // иконки для тега для всех типов иконок
                {
                    "icon_type_id": "1",
                    "icon_id": "5",
                    "pathToIcon": "http:\/\/resources.guide.letsapp.ru\/icons\/poi5.png"
                },
                {
                    "icon_type_id": "2",
                    "icon_id": "1",
                    "pathToIcon": "http:\/\/resources.guide.letsapp.ru\/icons\/poi1.png"
                }
            ],
            "localizations": { // локализованные названия тега
                "ru_RU": "\u041f\u0440\u0438\u0440\u043e\u0434\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b!",
                "en_GB": "Natural Sights?"
            }
        },
        "3": {
            "id": "3",
            "parent_id": "6",
            "name": "3-category",
            "modified": "1416468118",
            "adv": "1",
            "in_parent_order": "2",
            "types": [{"type_id": "1", "in_type_order": "25"}],
            "icons": [
                {
                    "icon_type_id": "1",
                    "icon_id": "1",
                    "pathToIcon": "http:\/\/resources.guide.letsapp.ru\/icons\/poi1.png"
                },
                {
                    "icon_type_id": "2",
                    "icon_id": "12",
                    "pathToIcon": "http:\/\/resources.guide.letsapp.ru\/icons\/poi13.png"
                }
            ],
            "localizations": {"ru_RU": "\u0414\u043e\u0441\u0443\u04334141", "en_GB": "Leisure"}
        },
        "4": {
            "id": "4",
            "parent_id": null,
            "name": "4-category",
            "modified": "1413965851",
            "adv": "0",
            "in_parent_order": "3",
            "types": [{"type_id": "1", "in_type_order": "15"}],
            "icons": [],
            "localizations": {"ru_RU": "\u041f\u0430\u0440\u043a\u0438!321", "en_GB": "Parks74"}
        }
    },
    "images": {  // картинки, измененные с момента timestamp
        "2": {
            "id": "2", //идентификатор картинки
            "filename": "cab368dfa9ef77be56d64cc746162798", // имя файла без разширения
            "owner_id": null, // идентификатор сущности - хозяина картинки
            "entity_type": null, // тип сущности хозяина картинки
            "w": "1920",        // данные неоптимизированного под устройсво оригинала
            "h": "1080",
            "size": "271858",
            "modified": "1416577026", // время последнего изменения
            "in_owner_order": "1",   //порядковый номер при сортировке по сущности, которой принадлежит эта картинка
            "owner": null,          // owner = null - кртинка является общей (тоесть может быть прикреплена  сразу к нескольким сущностям)
            "variant_width": "1137",  // данные варианта картинки, оптимизированного для типа устройства, передеданного в соответствующем хедере
            "variant_height": "640",
            "variant_size": "110999",
            "variant_path": "\/variants\/2-1.jpg", // путь к оптимизировнному варианту
            "filePath": "\/commonImages\/cab368dfa9ef77be56d64cc746162798.jpg", // путь к оригиналу
            "content": { // локализованный контент этого изображения
                "ru_RU": [
                    {
                        "copyright": "\u0444\u043e\u0440\u0434 \u043c\u043e\u0434\u0435\u043e",
                        "term_order": "1"
                    },
                    {"author": "", "term_order": "2"},
                    {"name": "", "term_order": "3"},
                    {"description": "", "term_order": "4"}
                ],
                "en_GB": [
                    {"copyright": "ford mondeo", "term_order": "1"},
                    {"author": "", "term_order": "2"},
                    {"name": "", "term_order": "3"},
                    {"description": "", "term_order": "4"}
                ]
            }
        },
        "3": {
            "id": "3",
            "filename": "07-11-2014-01-35_bbd0a9d8766f776e4011f6e4b1df446f_1415352954.5285",
            "owner_id": "32",
            "entity_type": "1",
            "w": "1920",
            "h": "1200",
            "size": "273754",
            "modified": "1416577031",
            "in_owner_order": "1",
            "owner": "Object",
            "variant_width": "1024",
            "variant_height": "640",
            "variant_size": "92302",
            "variant_path": "\/variants\/3-1.jpg",
            "filePath": "\/resized\/1\/32\/07-11-2014-01-35_bbd0a9d8766f776e4011f6e4b1df446f_1415352954.5285.jpg",
            "content": []
        }
    },
    // рассчитанные параметры для нарезки клипов из изображений по указанныим выше пропорциям frameTypes,
    // а также  порезанные по этим параметра с учетом модели устройства клипы
    "frames": [
        {
            "image_id": "2", // идентификатор картинки из котрой вырезается фрейм
            "thumb_id": "28", // идентификаторр frameTypes
            "x": "655.774800", // коодинаты левой верхней точки фрейма
            "y": "0.000000",
            "w": "608.450400",  // ширина вырезаемого фрейма
            "h": "1080.000000", // высота вырезаемого фрейма
            "modified": "1415346046",
            "defaultClipPath": "\/clips\/2-28-0.jpg", // вырезанный из оригинала картинки (не оптимизированный под модель устройства) фрейм
            "clipPath": null  // путь до оптимизированного под модель устройства фрейма
                                // (если null - значит вырезать нет смысла так как defaultClipPath уже достаточно мал и нужно использовать его)
        },
        {
            "image_id": "2",
            "thumb_id": "42",
            "x": "0.000000",
            "y": "105.000088",
            "w": "1920.000000",
            "h": "869.999823",
            "modified": "1415346046",
            "defaultClipPath": "\/clips\/2-42-0.jpg",
            "clipPath": "\/clips\/2-42-1.jpg"
        }
    ],
    "audio": { // аудио файлы
        "14": {
            "id": "14",
            "filePath": "\/audio\/68550a52f5d4c1e406a23719cc6a4b08.mp3",
            "default_name": "audio-1",
            "size": "9860631",
            "length": "243",
            "tier_id": "0",
            "lang_id": "2",
            "locale": "ru_RU",
            "modified": "1414057180",
            "content": []
        }
    },
    "banners": { // баннеры
        "9": {
            "id": "9",
            "default_name": "banner-1",
            "locale": "ru_RU",          // эта локаль ознаячает что показывать баннер надо только если
                                        // выбранная локализация гида на устройстве совпадает с указанной здесь
                                        // если ничего не указано значит ваннер можно показывать для всех локализаций
            "size": "45145",
            "inter_app_url": "",        // внутренний link ios-приложения
            "w": "640",
            "h": "153",
            "filePath": "\/banners\/4c42780472f4772471fbff61aa1c5da8.jpg",
            "modified": "1416491781",
            "content": {        // локализованный контент (http ссылка, может быть разной для разных языков)
                "ru_RU": [{"link": "http:\/\/toptriptip.com", "term_order": "1"}],
                "en_GB": [{"link": "http:\/\/toptriptip.com", "term_order": "1"}]
            },
            "places": ["7"]             // идентификаторы мест для банныров к ктороым прицеплен этот баннер
        }
    },
    "objects": { // тип сущности объект
        "34": {
            "id": "34", // идетификатор (уникальный для всех objects)
            "default_name": "19-object",
            "parent": null,             // объект может иметь родительский объект или событие или маршрут
            "parent_event": null,
            "parent_route": null,
            "adv": "1",                 // является ли объект рекламным
            "modified": "1417013643",   // время изменения объекта
            "enabled": "1",             // показывать ли объект
            "content": {
                "ru_RU": [
                    {
                        "name": "Название объекта",
                        "term_order": "1"
                    },
                    {"shortName": "Краткое название объекта", "term_order": "2"},
                    {
                        "description": "Описание объекта",
                        "term_order": "3"
                    },
                    {"description_interesting": "", "term_order": "4"},
                    {"description_advices": "", "term_order": "5"},
                    {"description_openHours": "", "term_order": "6"},
                    {
                        "address": "127206 Москва и т.д",
                        "term_order": "7"
                    },
                    {
                        "telephone": "8 888 888 88 88 ",
                        "term_order": "8"
                    },
                    {"url": "www.site.ru", "term_order": "9"},
                    {"email": "", "term_order": "10"}
                ],
                "en_GB": [
                    {"name": "Name of object", "term_order": "1"},
                    {"shortName": "Short ame", "term_order": "2"},
                    {
                        "description": "Description of object",
                        "term_order": "3"
                    },
                    {"description_interesting": "", "term_order": "4"},
                    {"description_advices": "", "term_order": "5"},
                    {"description_openHours": "", "term_order": "6"},
                    {
                        "address": "249706, Russia, Kaluga region, Kozelsky district, p \/ o Kamenka Shamordino, monastery.",
                        "term_order": "7"
                    },
                    {
                        "telephone": "8 999 999 99 99",
                        "term_order": "8"
                    },
                    {"url": "www.shamordino-m.ru", "term_order": "9"},
                    {"email": "", "term_order": "10"}
                ]
            },
            "associated_objects": [], // список прикрепленных объектов (связь многие ко многим)
            "associated_events": [], // тоже события
            "tags": [],             // идентификаторы тегов объекта
            "associated_routes": [], // тоже маршруты
            "points": [{"lat": "54.517015", "lng": "36.230598", "id": "1", "order": "1"}], // точки (у объетов обычно однв точка)
            "images": ["11"],           // идентификаторы картинок объекта в порядке сортировки по объенкту
            "commonImages": ["2"],      // иденификаторы общих картинок прицепленных к объекту в порядке сортировки по id этого объекта
            "banners": [],              // баннеры, показываемые на странице этого объекта
            "audio": []                // аудифайлы прицепленные к объекту
        }
    },
    "events": { // событие от объекта отличается типом сущности и набором полей
        "2": {
            "id": "2",
            "default_name": "2-event",
            "start_timestamp": "1415743200", // время начала мероприятия
            "stop_timestamp": "1416348000",  // время окончания мероприятия
            "parent": null,
            "parent_object": null,
            "parent_route": null,
            "adv": "1",
            "modified": "1414059462",
            "enabled": "1",
            "content": {
                "ru_RU": [
                    {
                        "name": "Название мероприятия",
                        "term_order": "1"
                    },
                    {"shortName": "Краткое название мероприятия", "term_order": "2"},
                    {
                        "description": "Описание мероприятия",
                        "term_order": "3"
                    },
                    {"description_interesting": "", "term_order": "4"},
                    {
                        "description_advices": "Совет: не курите в общественных местах",
                        "term_order": "5"
                    },
                    {"description_schedule": "", "term_order": "6"},
                    {"description_openHours": "", "term_order": "7"},
                    {"address": "", "term_order": "8"},
                    {"telephone": "", "term_order": "9"},
                    {"url": "mintmusic.ru", "term_order": "10"},
                    {"email": "pr@jgroup.ru", "term_order": "11"}
                ],
                "en_GB": [
                    {"name": "The Wild Mint music festival", "term_order": "1"},
                    {"shortName": "Wild Mint", "term_order": "2"},
                    {
                        "description": "Description of the event",
                        "term_order": "3"
                    },
                    {"description_interesting": "", "term_order": "4"},
                    {"description_advices": "Don't be afraid to bring your children with you.", "term_order": "5"},
                    {"description_schedule": "", "term_order": "6"},
                    {"description_openHours": "", "term_order": "7"},
                    {"address": "", "term_order": "8"},
                    {"telephone": "", "term_order": "9"},
                    {"url": "mintmusic.ru", "term_order": "10"},
                    {"email": "pr@jgroup.ru", "term_order": "11"}
                ]
            },
            "associated_events": [],
            "associated_objects": [],
            "associated_routes": [],
            "tags": [{"tag_id": "22", "obj_order": "0"}],
            "points": [{"lat": "55.244769", "lng": "36.427263", "id": "41", "order": "1"}],
            "images": [],
            "commonImages": [],
            "banners": ["26"],
            "audio": [
                "27",
                "15"
            ]
        }
    },
    "routes": {
        "2": {
            "id": "2",
            "default_name": "44-route",
            "length": "3000",
            "parent": null,
            "parent_object": null,
            "parent_event": null,
            "adv": "0",
            "modified": "1414057044",
            "enabled": "1",
            "content": {
                "ru_RU": [
                    {
                        "name": "Название маршрута",
                        "term_order": "1"
                    },
                    {
                        "shortName": "краткое название",
                        "term_order": "2"
                    },
                    {
                        "description": "Описание маршрута",
                        "term_order": "3"
                    },
                    {"description_interesting": "", "term_order": "4"},
                    {"description_advices": "", "term_order": "5"},
                    {"description_openHours": "", "term_order": "6"},
                    {"address": "", "term_order": "7"},
                    {"telephone": "+7-999-999-99-99", "term_order": "8"},
                    {"url": "", "term_order": "9"},
                    {"email": "", "term_order": "10"}
                ],
                "en_GB": [
                    {"name": "The cosmic route in Kaluga", "term_order": "1"},
                    {"shortName": "The cosmic route in Kaluga", "term_order": "2"},
                    {
                        "description": "",
                        "term_order": "3"
                    },
                    {"description_interesting": "", "term_order": "4"},
                    {"description_advices": "", "term_order": "5"},
                    {"description_openHours": "", "term_order": "6"},
                    {"address": "", "term_order": "7"},
                    {"telephone": "+7-999-999-99-99", "term_order": "8"},
                    {"url": "", "term_order": "9"},
                    {"email": "", "term_order": "10"}
                ]
            },
            "associated_objects": [
                "1",
                "13",
                "15",
                "18"
            ],
            "associated_events": [],
            "tags": [
                {"tag_id": "16", "obj_order": "0"},
                {"tag_id": "22", "obj_order": "0"},
                {"tag_id": "29", "obj_order": "0"},
                {"tag_id": "33", "obj_order": "0"}
            ],
            "points": [  // у маршрута несколько точек, расставленных в порядке следования маршута
                {"lat": "54.515402", "lng": "36.244106", "id": "90", "order": "1"},
                {"lat": "54.515657", "lng": "36.243183", "id": "91", "order": "2"},
                {"lat": "54.515551", "lng": "36.242904", "id": "92", "order": "3"},
                {"lat": "54.515657", "lng": "36.242604", "id": "93", "order": "4"},
                {"lat": "54.510893", "lng": "36.233699", "id": "94", "order": "5"},
                {"lat": "54.510619", "lng": "36.233119", "id": "95", "order": "6"},
                {"lat": "54.510444", "lng": "36.232645", "id": "96", "order": "7"},
                {"lat": "54.510432", "lng": "36.232350", "id": "97", "order": "8"},
                {"lat": "54.510429", "lng": "36.232103", "id": "98", "order": "9"},
                {"lat": "54.510479", "lng": "36.231593", "id": "99", "order": "10"},
                {"lat": "54.510594", "lng": "36.231025", "id": "100", "order": "11"},
                {"lat": "54.510961", "lng": "36.230212", "id": "101", "order": "12"},
                {"lat": "54.514094", "lng": "36.224386", "id": "102", "order": "13"},
                {"lat": "54.514599", "lng": "36.224858", "id": "103", "order": "14"},
                {"lat": "54.515128", "lng": "36.225116", "id": "104", "order": "15"},
                {"lat": "54.515925", "lng": "36.225480", "id": "105", "order": "16"},
                {"lat": "54.516411", "lng": "36.226178", "id": "106", "order": "17"},
                {"lat": "54.516722", "lng": "36.227948", "id": "107", "order": "18"},
                {"lat": "54.516479", "lng": "36.228431", "id": "108", "order": "19"},
                {"lat": "54.517576", "lng": "36.230502", "id": "109", "order": "20"},
                {"lat": "54.515209", "lng": "36.234396", "id": "110", "order": "21"},
                {"lat": "54.515003", "lng": "36.234857", "id": "111", "order": "22"},
                {"lat": "54.517893", "lng": "36.236858", "id": "115", "order": "23"},
                {"lat": "54.519238", "lng": "36.241493", "id": "112", "order": "24"}
            ],
            "images": [],
            "commonImages": [],
            "banners": [],
            "audio": [
                "27",
                "16"
            ]
        }
    },
    "likes": [ //информация о счетчиках лайков
        {"object_id": "26", "counter": "41", "modified": "1409231951"},
        {"object_id": "24", "counter": "41", "modified": "1409231951"},
        {"object_id": "18", "counter": "0", "modified": "1409231952"},
        {"object_id": "17", "counter": "41", "modified": "1409231953"},
        {"object_id": "15", "counter": "41", "modified": "1409231953"},
        {"event_id": "1", "counter": "10", "modified": "1409232046"}
    ],
    "responseTimestamp": 1417441803,  // отпечаток времени ответа сервера
    "versionSavedAt": "1417437283",   // время сохранениея версии контента гида
    "previewSavedAt": "1417437278"    // время сохранеиея превью (если требуется получать данные из превью-базы)
}
/like
*guide_id (integer) Идентификатор гида
likes[object_id][1]=1&likes[object_id][2]=0&likes[object_id][3]=1 Строка параметров для изменения лайков
Для увелиения или уменьшения счетчика лайков одной из сущностей надо сформировать строку: likes[(object_id|event_id|route_id|image_id)][идентификатор сущности]=(1|0) Полученнве строки соеденяются символом "&" в итоге должна получиться общая строка POST параметров, к примеру:
guide_id=10&likes[object_id][1]=1&likes[event_id][2]=0&likes[route_id][3]=1
которая означаем что мы обращаемся к гиду номер 10 и собираемся у первого объекта этого гида увеличить счетчик на одну единицу, у второго события этого гида уменьшить счетчик на единицу, и у третьего маршрута увеличить счетчик на единицу
/likes
*guide_id (integer) Идентификатор гида, для которого требуется получить информацию.
*timestamp (integer) (Unix Timestamp)
Получение текущего состояния счетчиков лайков, измененых с момента *timestamp Эти данные берутся всегда из базы №1 (постоянно изменяемой базы)
{
    "likes": [ // лайки (берутся из текущей базы данных гида и не из базы сохраненной версии)
        {"object_id": "26", "counter": "41", "modified": "1409231951"},
        {"object_id": "24", "counter": "41", "modified": "1409231951"},
        {"object_id": "18", "counter": "0", "modified": "1409231952"},
        {"object_id": "17", "counter": "41", "modified": "1409231953"},
        {"object_id": "15", "counter": "41", "modified": "1409231953"},
        {"event_id": "1", "counter": "10", "modified": "1409232046"},
        {"object_id": "1", "counter": "1", "modified": "1417515238"}
    ]
}
/guide/version
*guides_ids (string) Идентификаторы гидов через запятую, для которых требуется получить информацию.
PREVIEW=1 Опциональный пареметр
Запрос на получение времени сохранения версии гида в базе №2,если передан параметр PREVIEW=1 будет выдано время сохранения базы №3
{
    "1": {"lastSavedAt": "1417437278"},
    "10": {"lastSavedAt": "1417437289"},
    "20": {"error": "Guide is not attached to this bundle."}
}