уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Как известно, одной из составных частей аудита любого сайта является сбор сведений о нахождении сайта в базе поисковых систем.  При этом необходимо ответить на два простых вопроса: «Есть ли сайт в индексе поисковой системы?» и, если сайт находится в индексе, то «Какое количество страниц сайта находится в индексе?». На сегодняшний день можно выделить несколько поисковых систем, пользующихся большим спросом у пользователей (по данным SpyLog):

  1. Yandex (49,50%)
  2. Google (33,93%)
  3. Mail.ru (9,61%)
  4. Rambler (3,38%)
  5. Bing (1,99%)
  6. Nigma (0,53%)
  7. Conduit (0,31%)
  8. ICQ dot com (0,30%)
  9. Yahoo (0,22%)

Причем, довольно молодая поисковая система Bing.com за август набрала 0,12% в популярности, что говорит о том, что при оптимизации сайтов желательно уделять внимание работе с этой ПС (на сколько это в принципе возможно, т.к. оптимизировать сайт сразу для всех поисковиков сразу вряд ли кому-то удастся).

Вот я и решил немного поработать с поисковыми системами и написать небольшой компонент для Delphi 2010, который будет выполнять часть работ по аудиту сайта, а именно — получать информацию о нахождении сайта в индексе поисковых систем. На данный момент компонент SearchStat работает со следующими поисковыми системами и рейтингами:

  1. Yandex — определение количества страниц в индексе;
  2. Google — определение количества страниц в индексе;
  3. Yahoo — определение количества страниц в индексе и подсчёт ссылок на страницы сайта;
  4. Bing — определение количества страниц в индексе;
  5. Rambler — определение количества страниц в индексе;
  6. Alexa  — определение места в Российском рейтинге.

Вполне вероятно, что количество поисковых систем и рейтингов будет увеличено — все зависит от потребностей пользователей компонента и, соответственно, пожеланий в развитии компонента. Но, обо все по порядку.

1. Принцип работы компонента SearchStat

Компонент_SearchStats_Delphi2010На рисунке представлена упрощенная схема работы компонента. То есть при активации компонента запускается до семи параллельных потоков, каждый из которых отвечает за ту или иную операцию компонента. Например поток для Яндекса отвечает за скачивание страницы на которой имеется информация о количестве страниц сайта в индексе, поток YahooLinks — собирает данные по ссылкам на страницы сайта и т.д. При этом Вы можете заранее определять какое количество потоков Вам необходимо. В ходе выполнения операций инициируются определенные события, каждое из которых предоставляет в Ваше распоряжение информацию о работе.

По сути, все, что требуется от программиста при работе с компонентом — это определить количество потоков и отловить нужное событие.  А семь параллельно работающих потоков избавят Вас от долгого ожидания ответа на интересующие вопросы.

2. Установка компонента SearchStats.

Как и при разработке предыдущего компонента для Delphi 2010, я не стал ограничивать установку компонента только последней версией Delphi.  Поэтому компонент можно опять же установить и как с помощью bpl-файла, так и используя исходники компонента в pas-файлах.

При установке компонента с помощью pas-файлов Вам необходимо добавить в новый пакет два файла:

  1. SearchStat.pas
  2. InetThread.pas

После установки в палитре компонентов на странице WebDelphi.ru появится компонент TSearchStats.

3. Свойства и события компонента SearchStats

SearcStats_options

Свойства компонента

Свойств у компонента не так много, что, в принципе облегчает его настройку.

Свойство Active: booleantrue, если хотя бы один из семи потоков выполняет свою работу. Активировать компонент можно, выполнив метод Activate.

Свойство URL: string — содержит адрес анализируемого домена. Запись свойства свободная, т.е. вы можете не указывать подстроку http:// — при необходимости она будет автоматически подставлена в адрес.

Вкладка свойств Options — здесь содержится настройка потоков для работы. Устанавливая свойство в значение true Вы тем самым указываете компоненту, что поток будет запущен при активации.

При запуске каждый из потоков получает свой уникальный номер (от 1 до 7) по которому вы можете отслеживать ход выполнения операций. Константы для потоков определены следующим образом:

  1. Yandex = 1
  2. Google = 2
  3. YahooLink = 3 (подсчёт ссылок)
  4. Yahoo = 4 (определение страниц в индексе)
  5. Bing = 5
  6. Rambler = 6;
  7. Alexa  = 7.

События компонента

OnAcceptSingleThread(const EngineConst: Byte; Value: Int64)

Возникает, когда один из потоков заканчивает свою работу. При этом Вам передаются следующие данные:

EngineConst: Byte — константа потока

Value: Int64 — значение, которое было получено.

Например для Яндекс параметры события могут быть такими:

EngineConst = 1

Value = 144

т.е. в индексе Яндекс обнаружено 144 страницы сайта.

Событие OnAcceptSingleThread удобно использовать, когда требуется выводить информацию по работе компонента, не дожидаясь окончания работы всех потоков.

OnAcceptSingleThreadEx(const Statistic: TSingleStat)

Так же как и OnAcceptSingleThread инициируется при выполнении работы одним из потоков. При этом в переменной Statistic будет содержаться запись со следующим содержанием:

type
  TSingleStat = record
    EngineConst:byte; //константа потока
    Name: string; //имя поисковой системы с которой работал поток
    Operation: string; //выполненная операция
    Value: int64; //значение, полученное в ходе работы потока
  end;

OnAcceptSingleThreadEx можно, например, использовать если Вам необходимо вести лог действий компонента

OnActivate(const ActiveThreads: Integer)

Инициируется при установке свойства Active компонента в значение true. ActiveThreads — содержит количество активных потоков.

OnAllAcceptThreads

Инициируется в случае, если все запущенные потоки закончили свою работу.

OnError(const ErrThreadNum, AllErrThreads: Integer; Error: string);

Инициируется при возникновении исключительной ситуации при работе потока.

ErrThreadNum — содержит уникальный номер потока в котором произошла ошибка

AllErrThreads — содержит общее количество потоков в которых произошли ошибки за текущий запуск компонента.

Error — текстовое описание ошибки.

OnStopThreads

Инициируется при прерывании работы всех потоков методом Stop;

4. Методы компонента SearchStats

Для управления компонентом Вам достаточно использовать всего два метода:

Activate — запуск компонента

Stop — прерывание работы компонента.

Все остальные действия по сбору статистики из поисковых систем целиком выполняются внутренними методами компонента.

5.  Немного про технику работы компонента с поисковыми системами.

Ну, и в конце, хотелось бы немного сказать о том, каким образом получается та или иная информация от поисковика. Всё дело в том, что для получения казалось бы однотипной информации — количества проиндексированных страниц — необходимо использовать различные методы в плане парсинга полученного документа.

Например количество страниц в индексе Яндекса можно посмотреть прямо в title документа, а Yahoo выводит эту же информацию в тегах td, span. Соответственно и «просматривается» документ по-разному и с учётом текущего положения информации на странице.  При этом говорить о том, что компонент SearchStats 100% будет работать с любой поисковой системой нельзя, НО при желании и необходимости можно дополнить компонент новыми методами и свойствами. Все, что для этого требуется — сказать об этом разработчику, т.е. мне и я постараюсь дополнить компонент необходимыми функциями.

0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
3 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Алексей
Алексей
15/02/2010 21:16

Хороший компонент. Парсер рамблера  немного надо подправить (тэг изменился). я так сделал: function TSearchStats.RamblerParser: int64; var Charset: TCharsets; Doc: IHTMLDocument2; Cache: TStringList; Element: IHTMLElement; Tags: IHTMLElementCollection; i, k: integer; str, attr: string; begin k := 1; Cache := TStringList.Create; Cache.LoadFromStream(FPageStreams[Rambler]); Charset := PageCharset(Cache.Text); Doc := coHTMLDocument.Create as IHTMLDocument2; Doc := DecodeStream(FPageStreams[Rambler], Charset); Tags := Doc.all.tags(‘div’) as IHTMLElementCollection; str := »; for i := 0 to Tags.Length — 1 do begin Element := Tags.item(i, 0) as IHTMLElement; try if (Element.className = ‘report’)then str := Element.innerText; except end; end; if Length(str) > 0 then begin if Pos(‘:’, str) > 0 then begin… Подробнее »

Инал
30/07/2010 01:28

При простой активации подсчета в Google программа нормально запускается, но через несколько секунд вышибает со словами «Econvert error».