Подписка

Проекты

Сборник идей для разработок в Delphi и использования их в Интернет. Участвуй в работе коллективного разума!

Google API в Delphi - проект с открытым исходным кодом.


А тут я коплю на лицензию Delphi 2011. Сумма пожертвования не фиксирована.

Друзья блога

Блоги и сообщества

DelphiFeeds.ru - Все Delphi-блоги Рунета О раскрутке блога по программированию Сообщество умных людей VR-Online.RU Бесплатный журнал для программистов и всех, кто интересуется IT Статьи и уроки по Delphi Статьи по Delphi

Счётчики


Анализ веб сайтов

Рейтинг блогов




Система Orphus

  • 27Sep

    Как известно, одной из составных частей аудита любого сайта является сбор сведений о нахождении сайта в базе поисковых систем.  При этом необходимо ответить на два простых вопроса: “Есть ли сайт в индексе поисковой системы?” и, если сайт находится в индексе, то “Какое количество страниц сайта находится в индексе?”. На сегодняшний день можно выделить несколько поисковых систем, пользующихся большим спросом у пользователей (по данным 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% будет работать с любой поисковой системой нельзя, НО при желании и необходимости можно дополнить компонент новыми методами и свойствами. Все, что для этого требуется – сказать об этом разработчику, т.е. мне и я постараюсь дополнить компонент необходимыми функциями.

    Для примера, можете посмотреть небольшой ролик, демонстрирующий работу компонента SearchStats. В представленном приложении были задействованы все события компонента:


    Как видите, для сбора все статистики с семи URL требуется не более 25 секунд.

    Скачать компонент и пример можно здесь:
    Компонент SearchStats(417.05 KB)

    Мой блог находят по следующим фразам

    Мой блог находят по следующим фразам

    ----------------------
    Если не знаете, где Вам разместить свой сервер и дополнительное оборудование, то воспользуйтесь услугами colocation от компании msm.ru
    ----------------------

    Related posts:

    1. Определение тИЦ Яндекс. Компонент Delphi 2010.
    2. Новые возможности RAD Studio 2010 (Delphi 2010)
    3. 5 мелочей из-за которых я использую Delphi 2010

    Автор Vlad в 1:13 pm

    Метки: , , , , ,

3 Comments

WP_Cloudy
  • Алексей пишет:

    Хороший компонент. Парсер рамблера  немного надо подправить (тэг изменился).
    я так сделал:
    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
    Delete(str, 1, pos(‘:’, str) + 1);
    if pos(‘тыс’, str) > 0 then
    k := 1000
    else if pos(‘млн’, str) > 0 then
    k := 1000000
    else if pos(‘млрд’, str) > 0 then
    k := 1000000000;
    try
    str := StripNonConforming(str, ['0'..'9']);
    Result := StrToInt(str) * k;
    except
    Result := -1;
    end;
    end
    else
    Result := -1;
    end
    else
    Result := -1;
    end;

  • Инал пишет:

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

  • Vlad пишет:

    Пример кода в студию. В каком месте исключение возникает?

Ваш ответ

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

Пожалуйста, заключайте исходный код в тэги [code][/code].