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

  • no;
  • start;
  • exact;

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