четверг, 5 декабря 2013 г.

Пишем простейший сборщик, использующий Google API на PHP. (Запрос и Сохранение)

В этом посте я опишу, как написать простейший сборщик Поисковых Результатов Google, используя API Google для поисковых результатов.

запрос Google API

Для простоты будем использовать язык PHP.  Выбор PHP для сбора хорош тем, что в дальнейшем написанные сборщики можно использовать практически на всех системах. Написанные на PHP сборщики - простые, легко модифицируемые и самое главное масштабируемые:  написав и запустив сбор с одной машины, легко перенести код на другую машину или образовать сетку из нескольких машин, которая будет выполнять те же задачи в несколько потоков.
Условно разделим это на несколько частей  :
  1. Запрос Google API и получение с него данных
  2. Сохранение результатов
  3. Запуск сборщика на выполнение
1.  Запрос Google API.
Для этого читаем документацию и находим что нужно запрашивать данные по адресу http://ajax.googleapis.com/ajax/services/search/web со следующими основными параметрами :
  • v=1.0 - версия API
  • q=запрос - запрос по которому надо получить данные
На сайте гугла  приведен ПХП пример. Я слегка модифицировал его для того чтобы использовать массово и получилось следующее :  т.е запрашиваем через CURL страницу с заданным ответом, проверяем правильность результата и если все сходится возвращаем это в ответе функции. Если же в процессе получения произошли ошибки, то ждем заданное время и повторяем снова. Хочу обратить сразу внимание на два важных момента : логи и паузы.
Паузы:  Так как мы работаем массово, то многие бесплатные API ограничивают нас по скорости, и если слишком часто идут запросы с одной машины, то сервис выдает бан на некоторое время. В дальнейшем я опишу как обходить это ограничение используя различные анонимайзеры. А пока просто скажу что грамотно подобранные паузы, позволяют использовать API с максимальной эффективностью. И нужно делать их всегда настраиваемыми, чтобы с минимальными усилиями реагировать на дальнейшие изменения в политике сервиса. Кстати к слову в платных API этих ограничений нет, но за каждый запрос в таком случаем будет нужно уплатить определенную сумму денег.
Логи:  В процессе работы бывает что иногда происходит все не так как вы запланировали. И чтобы разобраться в этом нужно чтобы сборщик описывал где у него возникла проблема и также где все прошло так как надо. Т.е все данные получаемые извне надо проверять и записывать в лог файлы (одновременно можно и выдавать в окно отладки). В дальнейшем если по какой-то причине сборщик прекратит собирать так как вы запланировали, вам будет проще найти и быстро подправить это место.  Ну а также время когда прошла или не прошла нужная нам операция тоже хорошо логировать.
2. Сохранение Поисковых результатов в Файл
После получения результатов следует определится в каком формате вам лучше всего записать разобранные данные. В этом примере для простоты я буду записывать ее в текстовый файл, один поисковый результат будет представлен одной строкой файла в следующем формате :
Запрос | Номер Результата | Видимый Урл | Заголовок | Содержимое 
И функция примет следующий вид : т.е принятые результаты мы формируем в строку. Затем убираем лишние символы перевода строк и добавляем построчно в файл. Кроме того возвращаем сколько запросов нами было добавлено в файл. Обращу внимание что текстовый формат наиболее удобен для дальнейшей с ним работы, если вы пока точно не знаете как вам удобнее потом будет эти данные использовать.

результаты запроса Google API

Теперь, основа для нашего сборщика готова.  Следующий код выполнит сбор одного запроса и запишет результаты его работы в текстовый файл в заданном нам формате. После выполнения этого кода мы получим текстовый файл и лог.

Выводы : 
Подставляя каждый раз новый запрос, мы будем обновлять наш файл новыми поисковыми результатами. Как видим работа с Web API на основе API Google для поисковых результатов не представляет сложности. На других языках это сделать также просто, прочитав документацию и используя приведенный в ней пример. В следующем посте я расскажу как это поставить на поток, чтобы сформировав один раз список поисковых запросов, результат которых нам надо получить и запустив скрипт на выполнение, делать другие задачи.
Материалы : 
Весь исходный код по этой статье можно скачать здесь. Руководство "Как запустить этот и другие PHP скрипты с этого сайта" всегда можно найти здесь.

Комментариев нет:

Отправить комментарий