С помощью этого запроса, помимо обычного регистронезависимого поиска по жанрам и тегам, можно реализовать быстрый 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" }