С помощью этого запроса, помимо обычного регистронезависимого поиска по жанрам и тегам, можно реализовать быстрый AJAX-поиск. Например, пользователь вписывает в строку поиска запрос «фантастика». И в процессе ввода каждого символа из поискового запроса приложение осуществляет поиск по «фан», «фант», «фанта» и т. д., быстро предлагая пользователю подходящие жанры.
ID функции
r_search_genres
Кто может вызывать
Любой пользователь.
Авторизованное приложение.
Принимаемые параметры
q* – строка с поисковым запросом. Минимальная длина поискового запроса – 3 символа;
tags – если передать в этом параметре значение «1», то поиск будет осуществлен и по жанрам, и по тегам. Если нет, поиск происходит только по жанрам;
strict – критерии поиска. Возможные значения:
- no (по умолчанию) – широкие критерии поиска, при которых в названиях жанров/тегов ищется вхождение какого-либо слова из поискового запроса. Например, по запросу «фан» будет найдена «Боевая фантастика», «Любовно-фантастические романы» и др.;
- start – поиск только по жанрам/тегам, у которых начало названия точно совпадает с поисковым запросом. Например, по запросу «ром» будет найден жанр «Романтические фантазии», а вот «Короткие любовные романы» в ответ уже не попадет;
- exact – поиск жанров/тегов, название которых полностью совпадает с поисковым запросом.
limit – ограничение на количество возвращаемых жанров/тегов. Работает аналогично инструкции limit в MySQL и в запросе представлен массивом из двух чисел N,M либо одним числом. Если limit указан, возвращается M жанров, начиная с жанра N (у первого номер 0). Если limit не задан – значение по умолчанию «0,20»;
top_n_arts – если в ответе у каждого жанра/тега необходимо вывести информацию о самых рейтинговых книгах из этого жанра/тега, то в этом параметре указывается необходимое количество книг. Например, если передать значение «3», то в ответе у каждого жанра в узле top_arts будет от 0 до 3-х книг, принадлежащих данному жанру;
atype – супертип запроса для запроса книг определенных типов. Если параметр не передан, в ответе будут выданы арты всех типов. Допустимые значения:
- 1 – электронные книги;
- 2 – аудиокниги.
Возвращаемые значения
genres* – массив, содержащий информацию о всех найденных жанрах/тегах. Содержит следующие элементы:
- id* – ID жанра/тега;
- name* – название жанра/тега;
- match_weight* – степень релевантности найденного жанра (значение от 0 до 100, где 100 – максимально релевантно; 0 – наименее релевантно). Учитывает как степень совпадения поискового термина с запросом, так и популярность целевого жанра;
- arts_n* – количество книг, имеющих привязку к найденному жанру/тегу.
- tag – это значение равно «1» для тегов (у жанров отсутствует);
- sub_genres – массив вложенных жанров (поджанров). Может отсутствовать, если поджанров нет:
- id* – ID жанра;
- name* – название жанра.
- top_arts – массив из наиболее рейтинговых книг, размещённых в текущем жанре/теге. Данный массив появляется в ответе только если в запросе был передан параметр top_n_arts. Каждая книга содержит:
- id* – ID книги;
- name* – название книги;
- cover – URL до обложки книги (может быть полным, с доменом, либо относительным);
- marks – пользовательский рейтинг книги (значение от 0 до 10, например «7.21»). Параметр будет отсутствовать, если у книги пока нет оценок.
- available – признак доступности книги. Может принимать значения:
- -1 – скрыть карточку (в обычные артовые списки не приходит, в основном в r_my_arts_all);
- 0 – книга не в продаже;
- 1 – книга доступна и в продаже;
2 – книга скоро поступит в продажу (дата неизвестна);
6 – книга поступит в продажу, дата известна.
- can_preorder – признак, указывающий на возможность оформить предварительную покупку на книгу, которая должна поступить в продажу и уже имеет известную цену:
- 0 – книга недоступна для предоплаты;
- 1 – книга доступна для предоплаты.
- available_date – дата поступления книги в продажу. Элемент возвращается при наличии значения в базе. Обрабатывается для available=6;
preorder_subscr – если вернулось значение «1», то пользователь подписался на уведомление о старте продаж этой книги. Если такой подписки нет, элемент будет отсутствовать;
- my – признак того, что эта книга уже уже куплена/получена этим пользователем. Будет отсутствовать, если книга не куплена/получена. Может принимать значения:
- 1 – эта книга уже есть у пользователя (куплена, получена, доступна для скачивания);
- 2 – книга куплена по предварительному заказу, но недоступна для скачивания.
- draft_subscr – если вернулось значение «1», то книга является аудиочерновиком, и пользователь при этом на нее подписан. Иначе этот параметр будет отсутствовать в ответе.
Если не было найдено ни одного жанра/тега, удовлетворяющей поисковому запросу, то массив genres будет пустым.
Возможные ошибки
error_code | error_message | Описание |
|---|---|---|
101069 | Слишком короткий поисковый запрос | Не допускаются поисковые запросы (параметр q) менее одного символа при strict="exact" и менее 3-х символов при других значениях strict |
101070 | Недопустимое значение в критериях поиска | В параметре strict допустимы только следующие значения:
|
101071 | Недопустимое значение в лимите возвращаемых элементов | В параметре limit должен передаваться массив из двух целых не отрицательных чисел |
101075 | Недопустимое значение в топе по книгам | В параметре top_n_arts допустимы только целые положительные числа от 1 до 10 |
Пример запроса на сервер
{
"app" : 1,
"sid" : "5o3oda4jfhb32zc93i2zfo8593b086ex",
"sha" : "241d5c89349bd1413bba7312ec7355d794b2ec86e00ef0c9410a5ea3965646e2",
"requests" : [
{
"id" : "search_genres",
"func" : "r_search_genres",
"param" : {
"limit" : [
0,
4
],
"tags" : 1,
"q" : "учебники",
"atype" : 1,
"strict" : "start",
"top_n_arts" : 3
}
}
],
"time" : "2019-12-12T16:29:44+03:00"
}
Пример ответа сервера
{
"search_genres" : {
"genres" : [
{
"arts_n" : 138,
"id" : "5142",
"match_weight" : "100",
"name" : "учебники 1 класс",
"sub_genres" : [
{
"id" : 5405,
"name" : "изобразительное искусство (ИЗО) 1 класс"
},
{
"id" : 5410,
"name" : "иностранный язык 1 класс"
},
{
"id" : 5409,
"name" : "информатика 1 класс"
},
{
"id" : 5403,
"name" : "математика 1 класс"
},
{
"id" : 5406,
"name" : "музыка 1 класс"
},
{
"id" : 5404,
"name" : "окружающий мир 1 класс"
},
{
"id" : 5401,
"name" : "русский язык 1 класс"
},
{
"id" : 5407,
"name" : "технология 1 класс"
},
{
"id" : 5408,
"name" : "физкультура 1 класс"
},
{
"id" : 5400,
"name" : "чистописание 1 класс"
},
{
"id" : 5402,
"name" : "чтение 1 класс"
}
],
"top_arts" : [
{
"available" : 1,
"available_date" : "2017-08-24 18:18:01",
"cover" : "http://robot.litres.ru/static/bookimages/29/33/08/29330821.bin.dir/29330821.cover.jpg",
"id" : "25097125",
"marks" : "10",
"name" : "Быстро считаем цепочки примеров. 1 класс"
},
{
"available" : 1,
"available_date" : "2017-08-24 19:10:37",
"cover" : "http://robot.litres.ru/static/bookimages/29/33/06/29330693.bin.dir/29330693.cover.jpg",
"id" : "25097077",
"name" : "Летние задания по литературному чтению для повторения и закрепления учебного материала. 1 класс"
},
{
"available" : 1,
"cover" : "http://robot.litres.ru/static/bookimages/29/17/12/29171272.bin.dir/29171272.cover.jpg",
"id" : "24621421",
"name" : "Histoire de Édouard Manet et de son oeuvre"
}
]
},
{
....
},
{
"arts_n" : 78,
"id" : "5154",
"match_weight" : "100",
"name" : "учебники 10 класс",
"sub_genres" : [
{
"id" : 5516,
"name" : "алгебра 10 класс"
},
{
"id" : 5525,
"name" : "биология 10 класс"
},
{
"id" : 5522,
"name" : "география 10 класс"
},
{
"id" : 5517,
"name" : "геометрия 10 класс"
},
{
"id" : 6680,
"name" : "естествознание 10 класс"
},
{
"id" : 5532,
"name" : "иностранный язык 10 класс"
},
{
"id" : 5531,
"name" : "информатика 10 класс"
},
{
"id" : 5520,
"name" : "история 10 класс"
},
{
"id" : 5519,
"name" : "литература 10 класс"
},
{
"id" : 5534,
"name" : "мировая художественная культура (МХК) 10 класс"
},
{
"id" : 5521,
"name" : "обществознание 10 класс"
},
{
"id" : 5533,
"name" : "основы безопасности жизнедеятельности (ОБЖ) 10 класс"
},
{
"id" : 5524,
"name" : "право 10 класс"
},
{
"id" : 5518,
"name" : "русский язык 10 класс"
},
{
"id" : 5529,
"name" : "технология 10 класс"
},
{
"id" : 5526,
"name" : "физика 10 класс"
},
{
"id" : 5530,
"name" : "физкультура 10 класс"
},
{
"id" : 5527,
"name" : "химия 10 класс"
},
{
"id" : 5528,
"name" : "экология 10 класс"
},
{
"id" : 5523,
"name" : "экономика 10 класс"
}
],
"top_arts" : [
{
"available" : 1,
"available_date" : "2017-08-14 13:18:13",
"cover" : "http://robot.litres.ru/static/bookimages/29/35/19/29351965.bin.dir/29351965.cover.jpg",
"id" : "25098485",
"name" : "Грамматика французского языка. Тесты. Контрольные работы. Для учащихся 10–11 классов школ с углубленным изучением французского языка"
},
{
"available" : 1,
"available_date" : "2017-08-09 12:18:22",
"cover" : "http://robot.litres.ru/static/bookimages/29/32/01/29320108.bin.dir/29320108.cover.jpg",
"id" : "25094221",
"name" : "Атлас + контурные карты и сборник задач. 10-11 классы. Экономическая и социальная география мира"
},
{
"available" : 1,
"available_date" : "2017-07-27 18:43:09",
"cover" : "http://robot.litres.ru/static/bookimages/29/10/74/29107405.bin.dir/29107405.cover.jpg",
"id" : "24918125",
"name" : "Физика. 10 класс. Методическое пособие"
}
]
},
{
....
}
],
"success" : true
},
"success" : true,
"time" : "2019-12-12T16:29:53+03:00"
}