Для получения триального ключа
заполните форму ниже
Team License (базовая версия)
Enterprise License (расширенная версия)
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
GBP
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

>
>
"Improve your... Google?"

"Improve your... Google?"

11 Фев 2010

Занимаясь разработкой анализатора кода PVS-Studio для поиска проблем в 64-битных и параллельных программах, нам понадобилось собирать свежую информацию в сети интернет по некоторым темам. Например, всегда полезно отвечать в форумах и блогах на вопросы программистов, которым может быть интересен наш инструмент. В процессе сбора выяснилось, что информации в сети немало и вручную производить поиск весьма долго и утомительно, откуда появилась задача автоматизации поиска свежих данных. В этой записи мы расскажем, как делаем это.

Правда, наверняка вы сразу же скажете: "Ха-ха! Ребята придумывают велосипед и не знают про Google Alerts". Мы знаем про Google Alerts. Это почти то, что нужно, только не то :-). За более чем полгода использования Google Alerts, нам так и не удалось добиться от него того, что нужно. А нужно вот что:

  • поиск на конкретных перечисленных сайтах;
  • поиск только за последние сутки;
  • возможность добавить стоп-слова;
  • Google Alerts как-то дополнительно фильтрует результаты. То есть обычный поиск Google дает больше, чем Google Alerts.

Поэтому и было принято решение, попробовать сделать велосипед.

В рамках этой задачи требуется искать на заданных сайтах новые материалы в количестве до 30 штук и созданные не дольше чем за 24 часа до начала работы автоматизированного поиска. То есть, грубо говоря, кто чего написал в интернете за последний день. Входные данные будут следующие:

  • Список адресов сайтов - url сайтов на которых следует произвести поиск.
  • Список поисковых фраз - фразы на русском и/или английском языках, по которых следует искать.
  • Список нежелательных слов - слова, которые должны отсутствовать в результатах поиска.

Идея

В сети существует много сервисов предлагающих услуги поиска, логично использовать их возможности для реализации задачи. Выбран был поисковик google.com как, на наш взгляд, наиболее подходящий.

Поиск в google

Принцип работы тот же, что и у любого другого поисковика: в Google посылается запрос, а он отдает ответ. При этом поисковик имеет гибкие настройки для формирования запроса, таким образом можно сформировать нужный запрос.

Параметры поиска в google

Рассмотрим наиболее интересные (в рамках задачи) параметры поиска:

http://www.google.com/search?

Собственно адрес

as_q

Поисковая фраза (именно фраза, а не набор слов)

Num

Количество результатов, которые будут показаны на странице

as_eq

Слова, которые должны отсутствовать в результатах поиска

as_sitesearch

url сайта по которому производится поиск

У поисковика имеются и другие параметры, но в рамках задачи они неинтересны. Пример запроса к Google с параметрами поиска:

http://www.google.com/search?as_q=64-bit+portability+&
hl=ru&newwindow=1&
num=30&btnG=%D0%9F%D0%BE%D0%
B8%D1%81%D0%BA+%D0%B2+Google&
as_epq=&as_oq=&
as_eq=%D0%BA%D1%83%D0%BF%D0%B8%D1%82%
D1%8C+%D1%81%D0%BA%D0%B0%D1%87%D0%
B0%D1%82%D1%8C+&
lr=lang_ru&cr=&as_ft=i&as_filetype=&
as_qdr=d&as_occt=any&
as_dt=i&as_sitesearch=http://www.codeguru.com/&
as_rights=&safe=images

Как это можно использовать

Из выше написанного следует, что есть возможность автоматизации поиска с использованием поисковой системы Google. Алгоритм будет следующий:

  • На основе исходных данных формируется запрос к Google.
  • Запрос выполняется.
  • Обработка результата (разбор html-странички).
  • Предыдущие пункты повторить для каждого сайта и каждой поисковой фразы из входных данных.

Реализация

Скрипт написан на php.

Входные данные

Входных данных имеется три типа, это список url сайтов по которым надо произвести поиск, список поисковых фраз и список слов которые должны отсутствовать в результатах поиска. Для представления этих данных используется xml файл следующего вида:

<?xml version="1.0" encoding="utf-8"?>
<search_params lang="ru">
        <sites>
                <url>http://www.dreamincode.net</url>
                <url>http://forum.vingrad.ru/</url>
                <url>http://forum.sources.ru/</url>
                <url>http://groups.google.com/</url>
        </sites>
        <words>
                <white_list>
                        <phrase>"64-bit" c++</phrase>
                        <phrase>64-bit migration</phrase>
                        <phrase>viva64</phrase>
                </white_list>
                <black_list>
                        <phrase>купить</phrase>
                        <phrase>скачать</phrase>
                </black_list>
        </words>
</search_params>

Разбор XML

XML файл имеет простую структуру и маленький размер, поэтому можно использовать скрипт PHP Simple HTML DOM Parser.

Применение скрипта описано в документации, но стоит заметить, что приемы использования с DOM очень похожи на то, как это делает JQuery, известная javascript библиотека. Например, следующий код получает все ссылки с html страницы по адресу google.com и выводит их на экран:

include('../simple_html_dom.php');
// get DOM from URL or file
$html = file_get_html('http://www.google.com/');
// find all link
foreach($html->find('a') as $e)
    echo $e->href . '<br>';

Однако есть небольшая проблема с памятью при работе Simple HTML DOM Parser. Заключается она в следующем: функция file_get_html при каждом вызове создает новый объект класса simple_html_dom и если эту функцию вызывать в цикле, то память заканчивается. Освободить принудительно почему-то не получается. Решение - просто не использовать эту функцию в цикле, а вызвать один раз и работать только с одним объектом класса simple_html_dom.

Создание скрипта

Собственно ничего интересного, обычный скрипт на php,написанный с применением паттерна MVC. Исходный код также несложен.

Интерфейс пользователя весьма аскетичен - при обращении к странице появляется одна кнопка "Отправить запрос" (в окне браузера) а после ее нажатия, через некоторое время отображается результат.

Итог

После внедрения этого скрипта, теперь мы всегда узнаем, что в мире произошло в нашей предметной области (64-битное и параллельное программирование) за последние сутки.

Популярные статьи по теме
Бесплатный PVS-Studio для тех, кто развивает открытые проекты

Дата: 22 Дек 2018

Автор: Андрей Карпов

В канун празднования нового 2019 года команда PVS-Studio решила сделать приятный подарок всем контрибьюторам open-source проектов, хостящихся на GitHub, GitLab или Bitbucket. Им предоставляется возмо…
Статический анализ как часть процесса разработки Unreal Engine

Дата: 27 Июн 2017

Автор: Андрей Карпов

Проект Unreal Engine развивается - добавляется новый код и изменятся уже написанный. Неизбежное следствие развития проекта - появление в коде новых ошибок, которые желательно выявлять как можно раньш…
Любите статический анализ кода!

Дата: 16 Окт 2017

Автор: Андрей Карпов

Я в шоке от возможностей статического анализа кода, хотя сам участвую в разработке инструмента PVS-Studio. На днях я был искренне удивлён тому, что анализатор оказался умнее и внимательнее меня.
Характеристики анализатора PVS-Studio на примере EFL Core Libraries, 10-15% ложных срабатываний

Дата: 31 Июл 2017

Автор: Андрей Карпов

После большой статьи про проверку операционной системы Tizen мне было задано много вопросов о проценте ложных срабатываний и о плотности ошибок (сколько ошибок PVS-Studio выявляет на 1000 строк кода)…
PVS-Studio для Java

Дата: 17 Янв 2019

Автор: Андрей Карпов

В седьмой версии статического анализатора PVS-Studio мы добавили поддержку языка Java. Пришло время немного рассказать, как мы начинали делать поддержку языка Java, что у нас получилось и какие дальн…
Как и почему статические анализаторы борются с ложными срабатываниями

Дата: 20 Мар 2017

Автор: Андрей Карпов

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

Дата: 14 Апр 2016

Автор: Андрей Карпов

Вы угадали, ответ - "42". Здесь приводится 42 рекомендации по программированию, которые помогут избежать множества ошибок, сэкономить время и нервы. Автором рекомендаций выступает Андрей Карпов - тех…
Зло живёт в функциях сравнения

Дата: 19 Май 2017

Автор: Андрей Карпов

Возможно, читатели помнят мою статью под названием "Эффект последней строки". В ней идёт речь о замеченной мной закономерности: ошибка чаще всего допускается в последней строке однотипных блоков текс…
PVS-Studio ROI

Дата: 30 Янв 2019

Автор: Андрей Карпов

Время от времени нам задают вопрос, какую пользу в денежном эквиваленте получит компания от использования анализатора PVS-Studio. Мы решили оформить ответ в виде статьи и привести таблицы, которые по…
Эффект последней строки

Дата: 31 Май 2014

Автор: Андрей Карпов

Я изучил множество ошибок, возникающих в результате копирования кода. И утверждаю, что чаще всего ошибки допускают в последнем фрагменте однотипного кода. Ранее я не встречал в книгах описания этого …

Комментарии (0)

Следующие комментарии

На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Этот сайт использует куки и другие технологии, чтобы предоставить вам более персонализированный опыт. Продолжая просмотр страниц нашего веб-сайта, вы принимаете условия использования этих файлов. Если вы не хотите, чтобы ваши данные обрабатывались, пожалуйста, покиньте данный сайт. Подробнее →
Принять