Расширенный поиск Яндекса (и Гугла) с помощью установленного скрипта или в интерфейсе

в 10:36, , рубрики: Google, Google API, javascript, userscript, userscripts, интерфейсы, Расширения для браузеров, расширенный поиск, юзерскрипт, яндекс, Яндекс API

Расширенный поиск Яндекса (и Гугла) с помощью установленного скрипта или в интерфейсе - 1В яндекс-поисковике, как и в Гугле, есть настройки расширенного поиска (по датам, документам, сайтам, стране, языку, ...) и специальные страницы для расширенного поиска. То и другое бывает неудобно из-за интерфейса — большого количества нажимаемых кнопок, кликов и движений. Для некоторых (частоиспользуемых) режимов поиска сделаны юзерскрипты с выбором одной из десятков кнопок в один клик. На экране видны лишь несколько стартовых кнопок, работающих как спадающие списки по наведению мыши.

Такой скрипт, когда-то бывший без спадающих списков, давно работал на страницах Гугла, и, судя по количеству скачиваний, приобрёл популярность среди англоязычных пользователей (есть выбор 5 языков интерфейса). Однажды подумалось, что его несложно будет перенести на Яндекс, и на выходных за пару дней адаптация и перекраска под цвета Яндекса была сделана, и теперь он представляется «целевой аудитории» — людям из IT, которым иногда приходится много искать и которым привычно устанавливать дополнительные скрипты и ходить по гитхабам.

Кроме утилитарной пользы, скрипт может быть интересен как полигон для отработки интерфейсных решений. Связка 2-3 скриптов в перспективе может начать работать как мета-поисковик, всё для этого уже есть, кроме последних штрихов — поставить связующие кнопки, портировать на mаilru и другие поисковики.

Сейчас же — рассмотрим, какие особенности Яндекса добавились в ранее существовавшее решение для Гугл.

Первое и единственное ограничение у Яндекса, которое бросается в глаза — это отсутствие поиска за последние часы. Скорее всего, у Яндекса ещё нет такой функциональности, вопрос на toster.ru ответа не принёс, но сейчас, может быть, что-то напишут разработчики из Яндекса в комментариях.

Появилось и расширение функций в поиске по документам — интерфейс запросов к Яндексу позволяет искать по группе типов документов (мультиселект в настройках), а Гугл каждый раз — только по одному типу документов (PDF, DOC, SWF, ...).

В остальном — режим специальных настроек настолько хорошо пересекается, что позволил сделать похожим не только интерфейс, но и хранение параметров настроек. Это — поиск по сайту (домену) и поиск за последний интервал времени (более дня).

Подробности хранения настроек — решение с внешним localStorage

Ранее для Гугла аналогичное расширение приобрело сохранение настроек поиска. Просто потому что список своих доменов или язык интерфейса иногда желательно менять, а изменения прямо в скрипте — мало, что привычно лишь программистам-фронтендщикам, ещё и при довольно частых обновлениях нет возможности сохранить код части исправленного пользователем скрипта от общего обновления. Если появляются хранимые (в localStorage) настройки, то вопрос снимается.

Но тут у Гугла обнаружилась привычка стирать локальную память! С этим сталкивались ранее и пользователи Фейсбука, и для решения этой проблемы была статья на Хабре и скрипт по другому поводу (букмарклет закладок с прокруткой скролла окна). Здесь — аналогично, требовалось бежать с домена Гугла куда-нибудь на другой домен, куда скрипты-чистильщики не дотянутся. Организовано общение с тихой скромной страницей на github.io, где всё надёжно хранилось, почти как в банке. (Ссылка эта пригодится после установки скрипта, чтобы увидеть, куда настройки сохранились.)

Для Яндекса это вылилось в то, что хранение его настроек тоже было сделано на том же домене (github.io). Это немедленно привело к тому, что 2 разных скрипта, разных домена и разные поисковики приобрели общие настройки. Нет, их крайне несложно разделить, но зачем? Список любимых сайтов для поиска, язык интерфейса, и впоследствии — хранение последних интервалов дат — всё это стало появляться одинаково как в Гугле, так и в Яндексе, при условии пользования одним и тем же браузером.

Именно этот механизм сейчас даёт возможность очень просто сделать метапоиск — добавить в сохраняемые настройки поле для команд — просто команду «искать» или «искать с настройками», или «искать в выбранных поисковиках»). В дальнейшем, можно пофантазировать, что появится и синхронное управление картами, и просмотр в разделах, например, новостей, картинок. Согласитесь, удобно ведь ходить по карте в одном окне, а в соседнем — иметь синхронную копию в картах Гугл, чтобы переключаться на то окно, где более полная информация. И выдача картинок будет заметно разная и дополняющая.

Расширенный поиск Яндекса (и Гугла) с помощью установленного скрипта или в интерфейсе - 2

Справочник вариантов расширенного поиска в Яндексе и Гугле

Этот список, возможно, дополнят специалисты-пользователи и разработчики компаний (дополню по комментариям или ЛС).
Все способы и виды сведены в список в целях организации небольшого справочника.
Многое в интерфейсе юзерскрипта не реализовано. Что реализовано — указано.

В Яндексе:

  • по региону
    в интерфейсе — поле с подсказками, где выбирается «регион» — страна, область или город;
    в запросе&rstr= c магическим многозначным числом со знаком, совпадающим с другим недокументируемым параметром lr для своего региона; не всё работает — например, поиск по Маниле (rstr=-10629, это же Филиппины) не сильно отличается от общего;
  • по сайту или домену
    в интерфейсе — вводим в поле название домена (2 или 3 уровня, без продолжения)
    в строке поиска — пишем (без кавычек) " site:3dnews.ru" или подобное;
    Yandex Extra Buttons — спадающий список заранее прописанных доменов под кнопкой «site». Состав списка можно менять в настройках, через кнопку site--Настройки--форма настроек--перезагрузка страницы. Сохраняется во внешнем localStorage. Свой список доменов полезно скопировать для хранения, переноса на другой браузер и для восстановления.
  • по стране
    в интерфейсе — переключается кнопка со смыслом «своя страна», т.е. на домене .by это — выбор «by» и не более;
    в запросе&country=by, при этом можно указать и некоторые другие страны, по которым работает Яндекс, но что из них реально работает — не документировано. Например, &country=tr или com.tr не работает, как и множество «не близких» стран, не обязательно мелких;
  • точный запрос
    в интерфейсе — отдельная кнопка в подзаголовке или на специальной странице;
    в строке поиска — обрамить все слова или часть из них (составляющие точную часть запроса) кавычками;
    в запросе&wordforms=exact
  • по языку страницы
    выбор языков небольшой, но он покрывает все страны, где Яндекс присутствует как отдельный конкурирующий поисковик, плюс английский, немецкий, французский; (этот список может быть кандидатом на ещё одну кнопку в юзерскрипте, но многие ли пользуются этой настройкой? Скорее всего, нет);
  • по типам (множественное число) документов
    в интерфейсе — выбрать из мультиселектового списка; при каждом клике сменяется выдача по аяксу (без перезагрузки); на странице advanced — выбрать типы из 14 (сейчас) чекбоксов;
    в строке поиска — дописывают (без кавычек) " mime: pdf" или подобное, поддерживается много типов, но один на запрос; что интересно, такой выбор типов НЕ поддерживается скриптами подзаголовка — очевидно, это — более старый способ выбора параметра;
    Yandex Extra Buttons — спадающий список заранее прописанных типов документа под кнопкой «PDF», которая сама по себе тоже выбирает указанный тип; по кликам страница подхватывает результаты и изменяет список выбранных типов в подзаголовке; скрипт устраняет баг отображения — подкрашивает кнопку типов, если хотя бы один тип был выбран; таким образом, кнопки юзерскрипта, по сути, инициируют «клики» по типам в подзаголовке, сами не отображают результаты мультивыбора, но работают и без подзаголовка (он появляется сам после первого клика);
    в запросе &mime=rtf или &mime=rtf%2Cdoc, указывая все выбранные типы; работает и &mime=rtf&mime=doc и далее; запросы идут по AJAX, но с главной таким же способом можно отправить и не аяксовый запрос;
  • по последнему интервалу дат
    в интерфейсе — 3 отдельных кнопки в подзаголовке или 5 — на спецстранице;
    в запросе — магический параметр &within=число для некоторых интервалов; например, &within=1 — за 2 недели; 77 — за сутки, 2 — за месяц; 3 — за 3 месяца; 4 — за полгода, 5 — за год, 6 — за 2 года и т.д., 7 — за текущий день, 8 — за 3 суток или 4 дня (неизвестно точно, не проверялось), 9 — за 8 дней; можно попроверять, на результирующей странице интервал указывается с точностью до дня, а результаты — с точностью от часа до дня;
    Yandex Extra Buttons — 4 спадающих списка в виде изначально небольших 4 кнопок — выбор за последние несколько: дней, недель, месяцев, лет. Выбранное значение сохраняется в настройках и перемещается в начало списка, чтобы при повторном таком же выборе было достаточно только нажать кнопку. Технически реализуется через запрос по произвольному интервалу дат (раздел ниже), страница запрос выполняет по AJAX, но с главной работает как обычная перезагрузка страницы;
  • по интервалу дат
    в интерфейсе — 2 поля с дейт-пикерами (табличками для выбора дат из календаря);
    в запросе&from_date_full=11.01.2016&to_date_full=19.01.2016

Есть ряд других более специфических параметров, язык запросов (например, минус-слова и упомянутые кавычки), которые не будем рассматривать, но часть их могут оказаться в интерфейсе юзерскрипта расширенного поиска. Кроме того, у Яндекса есть ряд типов страниц (картинки, видео, новости, Маркет, и т.д.), где запросы могут иметь особенности (например, есть поиск по изображениям, поиск географического места на карте). Скрипт же сейчас покрывает основное поле — текстовый поиск.

В Гугле:

Что интересно, разные параметры запроса дают те же результаты, но в 2 дизайнах страницы — с чёрным заголовком (более старый) и с белым. Качество выдачи при этом, скорее всего, одно и то же. Страница расширенного поиска выдаёт сейчас ответ с чёрным заголовком, и это не обязательно верно для разных стран. (Извстно также, что дудлы выдаются в разные часы для разных часовых поясов.)

  • по типу (единственное число) документа
    в интерфейсеadvanced_search — file type:
    — один из 10 форматов; текстовым запросом могут искаться и другие типы, кроме названных в списке;
    в строке поиска — дописывают (без кавычек) " filetype: pdf" или подобное;
    Google Search Extra Buttons — пока что сделано как 2 отдельных кнопки (без списков) для PDF и DOC (прочие типы в Гугле достаточно удобно задавать в строке поиска, поэтому много типов документов было введено, только начиная со скрипта для Яндекса);
    в запросе&as_filetype=xls
  • по последнему интервалу дат
    в интерфейсеSearch Tools — (Any Time | Past <период>), далее — 5 вариантов выбора, или есть вариант задания любого интервала дат здесь же или на спецстранице;
    в запросе — 2 вида запросов с теми же результатами, но с разным дизайном страницы выдачи
    &as_qdr=m2 — вид с чёрным заголовком;
    &tbs=qdr:h1 — более новый вид; вместо «h» ставится h, d, w, m, или y; число — количество размерных единиц или пусто, что будет равносильно 1;
    Google Search Extra Buttons — 5 спадающих списков в виде изначально небольших 5 кнопок — выбор за последние несколько: дней, недель, месяцев, лет, часов (в дополнение к тому же в Яндексе). Выбранное значение сохраняется в настройках и перемещается в начало списка, чтобы при повторном таком же выборе было достаточно нажать кнопку;
  • по интервалу дат
    в интерфейсеSearch Tools — (Any Time | Past <период>) — Custom Range...; на спецстранице — выбор только по нескольким последним интервалам дат (раздел выше);
    в запросе&tbs=cdr%3A1%2Ccd_min%3A12%2F29%2F2015%2Ccd_max%3A1%2F5%2F2016;
    Google Search Extra Buttons — отдельная кнопка, сразу вызывающая форму интерфейса; на главной — нет её поддержки, поэтому кнопка скриптом не отображается;
  • по сайту или домену, в том числе верхнего уровня (.com, .cc, ...)
    в интерфейсе — на странице расширенного поиска (значок зубчатки — Advanced Search);
    в строке поиска — дописывают (без кавычек) " site: anysite.com" или подобное, в том числе домен верхнего уровня без точки;
    в запросе&as_sitesearch=anysite.com;
    Google Search Extra Buttons — отдельная кнопка со спадающим списком с заранее прописанными доменами, список которых можно менять в настройках. При клике по начальной кнопке она не инициирует поиск, а только выводит текст в строку поиска, что удобно для поправки домена. Поэтому первый домен можно вообще задавать пустой строкой;

Расширенный поиск Яндекса (и Гугла) с помощью установленного скрипта или в интерфейсе - 3

Другие параметры — у Гугла есть ряд других параметров для текстового поиска и язык запросов, подробное рассмотрение которых выходит за рамки цели статьи, но они могут оказаться в будущем в интерфейсе юзерскрипта.

  • точное слово или группа
  • любое из слов
  • исключая слова
  • интервал размерностей (кг, денежные единицы, годы)
  • по языку страницы
  • в регионе (государства)
  • по месту на странице
  • семейный фильтр
  • по наличию лицензий
  • интерфейсе
  • интерфейсе

В выдаче возможна сортировка по релевантности или по дате.
Имеется ряд типов поиска (картинки, видео, новости, карты, ...), где параметры поиска будут другие или со спецификой. Скрипт Google Search Extra Buttons сохраняет тип страницы поиска, с которой он был начат.

По теме организации метапоиска по обычным запросам

(Дальше пойдут планы и фантазии, интересные разработчикам интерфейсов.)

В самом простом виде метапоиск — это просмотр результатов в 2 соседних окнах одного браузера. Дополнительно можно поисключать одинаковые ответы из второго окна. Если задаться целью получить выдачу в одно окно, нужно решать, в каком месте списка внедрять элементы списка из второго окна. Скорее всего, удобно внедрять на примерно ту же позицию, которую занимал элемент во 2-м окне. И, конечно, указывать, от какого поисковика пришли ответы, чтобы у пользователя накапливалась в памяти статистика, по каким запросам от какого поисковика он получил себе полезный ответ.

Замечание по политике поисковиков. Делать метапоиск в одном окне технически невозможно, потому что современные крупные поисковики строго следят, чтобы запрос выполнялся не в фрейме, чтобы ответ приходил в настоящую страницу, а не в XMLHTTP-объект. Это связано с доходами от сопутствующей рекламы, составляющих ныне основной хлеб любого поисковика. Для пользователя, наоборот, важен результат и максимум — тот движок, который его даёт.

Метапоиск на скриптах — это вероятность близкого будущего. Для реализации — коды скриптов имеются на Гитхабе (Yandex, Google), приветствуются новые решения.

UPD: Кто поможет сделать белорусскую, казахскую и турецкую локализации?

Автор: spmbt

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js