Skip to content

Latest commit

 

History

History
329 lines (291 loc) · 16.4 KB

work.md

File metadata and controls

329 lines (291 loc) · 16.4 KB

Произведение

Основная информация

GET /work/{id}

Пример:

/work/1 - Дэн Симменс "Гиперион"

Ответ:

{
    work_id: Int,                     # id произведения
    last_modified: DateTime,          # время последнего изменения данных
    last_modified_iso: DateTime,      # время последнего изменения данных в ISO 8601
    work_name: String,                # название произведения
    work_name_orig: String,           # оригинальное название (анг или родной)
    work_name_alts: [                 # массив альтернативных названий произведения
        ...: String?,
        ...
    ],
    work_name_bonus: String,          # дополнение к названию
    authors: [
        {
            type: String,                     # тип персоны (autor, art)
            id: Int,                          # id типа персоны ( по формату /{type}/{id} однозначно укажет на нужную персону )
            name: String,                     # имя фамилия
            name_orig: String,                # имя фамилия (анг или родной)
            is_opened: Int,                   # открыта ли страница автора (1 - да, 0 - нет)
        },
        ...
    ],
    work_year: Int,                   # год публикации произведения
    work_year_of_write: Int,          # год написания произведения (если указан)
    work_description: String,         # аннотация
    work_description_author: String,  # автор анотации (может содержать bb-тэги)
    work_notes: String,               # примечание
    lang: String,                     # язык написания
    lang_code: String,                # код языка написания
    
    title: String,                    # автор(ы)+название в формате "Дэн Симмонс «Гиперион»"
    image: String,                    # ссылка на картинку произведения (обложку по умолчанию)
    image_preview: String,            # ссылка на превью картинки произведения

    publish_statuses: [               # для неопубликованных о статусе проивзедения ("не закончено", "в планах", ...)
        ...: String,
        ...
    ],

    work_published: Int,               # вышло ли произведени (0 - не опубликовано, 1 - опубликовано)
    work_preparing: Int,               # запланированное произведени (1 - "в планах автора")
    work_notfinished: Int,             # не законченое произведение (1 - "не окончено")
    work_lp:  Int,                     # доступен линговоанаолиз произведения (0 - "нет" / 1 - "есть")
    public_download_file: Int,         # есть файл для скачивания/чтения (1 - "доступно для свободного чтения")

    rating: {
        rating: Float,                 # рейтинг (до сотых, пр.: "8.91")
        voters: Int,                   # кол-во оценок
    },
    val_midmark_by_weight: Float,      # рейтинг (дубль)
    val_voters: Int,                   # кол-во оценок (дубль)
    val_responsecount: Int,            # кол-во отзывов на произведение

    work_type_id: Int,                 # id типа произведения 
    work_type: String,                 # тип провездения (роман, повесть, рассказ & etc)
    work_type_name: String,            # тип произведения на английском

    work_parent: Int,                  # >0 для неактивных частей - если является частью другого произведение, то тут его id
}

Расширенная информация

GET /work/{id}/extended

в расширенной информации о произведении добавляются поля:
awards - премии автора
editions_info - статистика изданий
editions_blocks - издания ворка. разбиты по блокам типов
translations - переводчики
classificatory - классификация
children - дерево вложенных ворков, обычно для ворка-цикла
parents - входит в
films - экранизации и новеллизации
la_resume - линговопрофиль произведения

Пример:

/work/1/extended - Дэн Симменс "Гиперион"

Ответ:

{
    work_id: Int,                     # id произведения
    ... все поля обычной карточки произведения (см. выше) и добаляются новые: ...

    awards: {                         # объект с массивами полученных премий и номинаций
      nom: [], win [] |null           # формат массива аналогичен выдаче в карточке автора
    }

    editions_info: { ... },           # статистическая информация об изданиях обновсящихся к данному произведению
    editions_blocks: { ... },         # массив изданий, разбитый по типам изданий
                                      # соответствуют выдачи в карточке вывода всех изданий автора (см: author.md#Список-изданий )

    translations: [                   # переводчики произведения. массив объектов, разбитый по языкам перевода
       {
            lang_code: String,                # двухбуквенный код языка: ru, en и &
            lang_id: Int,                     # id кода языка
            lang: String,                     # название языка на русском
            translations: [                   # массив переводов произведения на данный язык
                {
                    titles: [                       # массив названий данного перевода 
                        {                           # (редко, но встречается что один перевод выходит под назными названиями)
                            title: String,                    # название перевода
                            count: Int,                       # кол-во издний с этим переводом
                        },
                        ...
                    ],
                    year: Int,                      # год перевода
                    translators: [                  # переводчики данного перевода
                        {
                            type: String,                     # тип персоны (тут всегда "translator")
                            id: Int,                          # id тпиа персоны (переводчика)
                            name: String,                     # имя фамилия полностью
                            short_name: String,               # И.Фамилия
                        },
                        ...
                    ],
                },
                ...
            ],
        },
        ...
    ],

    classificatory: {              # классификация произведения
        total_count: Int,              # кол-во сделаных классификаций от юзеров
        genre_group: [                 # массив свойств классификатора
            {
                genre_group_id: Int,            # id группы свойств классификатора
                label: String,                  # название группы свойств на русском
                genre: [
                    {
                        genre_id: Int,                  # id тип жанра
                        label: String,                  # название пункта классификатора на русском
                        votes: Int,                     # кол-во классификаций, где указан этот пункт
                        percent: Float,                 # процент классификаций, где указан этот пункт (от 0 до 1, с шагом 0.1)
                        genre: [ ... ] ,                # вложенные типы (если есть). рекурсивное вложение в массиве такого же вида
                     },
                     ...
                 ],
                 ...
             },
             ...
        ],
    },

    work_root_saga: [                   # название циклов, куда водит данное произвдеение
        {
            work_id: Int,                   # id цикла (ворка)
            work_name: String,              # название 
            work_type: String,              # тип произведения на русском
            work_type_id: Int,              # id типа произведния
            work_year: null                 # год публикации
        },
        ...
    ],

    parents: {                          # подробнее в какие произведения/циклы/журналы входит данный ворк
        {cycles}: [                     # массив циклов
            [                           # цепочка ворков цикла от корня (пример: цикл "Галактическая история" -> цикл "Основание"-> ...)
                {
                    work_id: Int,                   # id ворка
                    ...                             # формат выдачи объъекта аналогичен work_root_saga
                },
                ...
            ]
        ],
        {digest}: [ [...], [...] ]     # массив журналов
    },


    children: [                         # произвдения, входящик в данное произведение/цикл
        { ... }                         # формат массива аналогичен выдаче works_blocks->{type}->list в карточке автора
    ],

    la_resume: [ String, ...  ]        # лингоанализ произведения. массив строк

    films: {                           # фильмы, разбиты на блоки по типам отношения к произведению
        {screen_version}: [                # экранизации
            {
                film_id: Int,
                type: Int,                         # id типа фильм (фильм, сериал, анимация и пр)
                year: Int
                name: String,
                rusname: String,
                country: String,
                director: String,
            },
            ...
        ],
        {novelization}: [],                 # новелизации
        {screenplay}: [],                   # как сценарий для фильма
},

Похожие произведения

Запрос

GET /work/{id}/similars

Пример:

/work/1/similars - похожие проивезедения на Дэн Симменс "Гиперион"

Ответ

{   
    [
        type: String,            # сущность/раздел базы (в данном случае всегда "work")
        id: Int,                 # id произведения
        name: String,            # имя
        ...

Вывод полностью соответевует выдачи мини-карточек при запросе по id.
см. блок works в разделе Docs/search-ids.md#Получение-миникарточек-по-их-ID

Выставление/удаление оценки

Запрос

GET https://fantlab.ru/work{id_1}/ajaxsetmark{mark}towork{id_2}

Параметры

id_1 - id произведения, со страницы которого ставится оценка
mark - оценка 0-10, 0 - удаление оценки
id_2 - id произведения, которому ставится оценка
cookie - авторизационный хэдер (fl_s=*)

Пример

/GET https://fantlab.ru/work92/ajaxsetmark10towork1 - поставить оценку 10 "Гипериону" Дэна Симмонса со страницы цикла "Песни Гипериона"

Ответ

{
    markcount: Int,     # новое количество оценок
    midmark: Float      # новый рейтинг
}

Классификация

Действие доступно только для посетителей с уровнем "Философ" и выше.

Запрос

GET /genrevote{work_id}?wg{id_1}=on&wg{id_2}=on&wg{id_3}=on&wg{id_4}=on...

Параметры

work_id - id произведения
id_1, id_2, ... - индексы характеристик (обязательно должен быть выбран хотя бы один пункт в следующих разделах: Жанры/поджанры, Место действия, Время действия, Возраст читателя)
cookie - авторизационный хэдер (fl_s=*)

Ответ

HTML-страница

Добавление похожего произведения

Запрос

GET https://fantlab.ru/work{work_id}/analog{analog_work_id}/add

Параметры

work_id - id произведения
analog_work_id - id произведения, которое хотим добавить в качестве похожего
cookie - авторизационный хэдер (fl_s=*)

Пример

GET https://fantlab.ru/work1/analog4325/add - добавить "Дюну" Фрэнка Герберта в качесте похожего на "Гиперион" произведения

Ответ

{
    info: {
        marks_count: Int,            # количество оценок у похожего произведения
        marks_sum: Int,              # сумма оценок (чтобы можно было посчитать среднюю оценку)
        responses_count: Int,        # количество отзывов у похожего произведения
        user_mark: Int|null,         # оценка пользователя (null, если нет)
        user_response: Int|null      # id отзыва (null, если нет)
    },
    pair_id: Int,                    # id пары
    status: String                   # статус добавления (ok)
}

Удаление похожего произведения

Запрос

GET https://fantlab.ru/work{work_id}/analog{analog_work_id}/remove

Параметры

work_id - id произведения
analog_work_id - id похожего произведения
X-Session - авторизационный сессрил\онный хэдер (или cookie fl_s=*)

Пример

GET https://fantlab.ru/work1/analog4325/remove - удалить "Дюну" Фрэнка Герберта из списка похожих на "Гиперион" произведений

Ответ

{
    remove_status: Boolean,          # ?
    status: String                   # статус удаления (ok)
}