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)
}