Сегодня решил немного по программировать всё-таки для Web. А то блог «Delphi в Internet», а основная масса статей для работы с Excel в Delphi. Непорядок.
Первое, что пришло на ум — это написать свой компонент для определения тематического индекса цитирования Яндекса (тИЦ). Все-таки тема достаточно близка к Internet, да и лишним такой компонент никогда не будет. Ну, а чтобы не писать отдельный компонент ради вывода единственного числа, решил дополнительно получать всю возможную информацию от Яндекс.Бара. И вот, что у меня получилось.Основная часть работы компонента в Интернет заключается в получении ХML-документа от Яндекс.Бара. Далее, уже по имеющемся данным можно смело вычитывать всю информацию о домене, определять тИЦ и т.д. Я не стал усложнять себе жизнь и писать собственный XML-парсер, а воспользовался уже готовым с вкладки Internet палитры компонентов (TXMLDocument). Если учесть, что в ответ на запрос приходит XML-документ размером максимум в 10 строк и 3 узла, то стандартного компонента хватит «по самое нихачу».
Далее, необходимо сформировать правильный запрос, дабы не получить исключение. В идеале URL запроса выглядит так:
http://bar-navig.yandex.ru/u?ver=2&url=ВАШ_ДОМЕН&show=0
Причем, ВАШ_ДОМЕН должен быть с http:// иначе запрос не проходит. Казалось бы нет ничего проще — записал запрос в строку, передал компоненту XMLDocument и парси себе сколько угодно. Но есть одно «но», которое следует учитывать — амперсанды (&) в строке.
Дело в том, что мудрый Windows при встрече амперсанда справедливо полагает, что следующий за ним символ надобно подчеркнуть, а сам амперсанд убрать. Попробуйте выполнить такую простую опрерацию:
ShowMessage('http://bar-navig.yandex.ru/u?ver=2&url=ВАШ_ДОМЕН&show=0')
и увидите, что оба амперсанда волшебным образом испарились из строки. Чтобы такого не случалось, следует строку запроса изменить вот так:
http://bar-navig.yandex.ru/u?ver=2&&url=ВАШ_ДОМЕН&&show=0
после этого запрос отправится без проблем. Останется только разобрать ответ. И вот, что мы можем получить от компонента:
- тИЦ домена
- Ранг по Яндексу (вроде бы это количество звездочек в баре)
- Информацию о домене: зарегистрирован или нет сайт в Яндекс.Каталог
- Если сайт находится в Каталоге, то дополнительно формируется запись, содержащая: имя раздела каталога в котором расположен сайт, URL этого раздела, регион сайта (если указан), и источник информации (Частное лицо или Организация).
То есть по сути всё, что есть в ответе на запрос к Яндекс.Бару. Может информация и излишняя, но лучше пусть её будет много, чем не будет вообще. Кстати, если Вас интересует продвижение сайтов, то можете воспользоваться услугами 10-top.ru.
Ну, а теперь непосредственно по работе с компонентом.
1. Установка компонента YaTic
Я не стал жадничать и прятать исходники, тем более, что информации по этому вопросу море, и поэтому по логике вещей компонент должен без проблем устанавливаться на любые версии Delphi. Но основная — Delphi 2010.
Установка компонента из bpl-файла.
Самый простой вариант. Делается это так:
- Запускаете Delphi 2010
- Выбираете в меню Component —> Install Packages
- В открывшемся окне нажимаете кнопку Add и указываете файл WDYandex.bpl
После этого в списке должен появиться наш файлик. А на палитре компонентов появится новая вкладка под названием «WebDelphi.ru» в которой будет содержаться Ваш компонент.
Установка компонента из pas-файла
Если по каким-то причинам Вам не удалось воспользоваться первым вариантом установки, или вы используете другую версию Delphi, то установка из pas-файла должна вам помочь. Делается это следующим образом:
- Выбираете в меню File — New — Package
- Переходите в Project Manager, выделяете папку Contains, жмете правую кнопку мыши и в меню выбираете Add…
- Указываете файл Yandex_TIC.pas
- Потом собираете пакет (Ctrl+F9)
- Delphi попросит Вас добавить в пакет ещё пару модулей. Соглашайтесь.
- Ну и наконец, выделяете в менеджере пакет, жмете правую кнопку мыши и в меню выбираете Install. Пакет будет успешно установлен и на палитре компонентов покажется новый компонент YaTic.
2. Свойства компонента
Свойств у компонента минимум, а отображаемых в Object Inspector ещё меньше — всего два. Поэтому проблем с настройкой возникнуть ни у кого не должно. Единственное, что хочется сразу сказать — не трогайте без надобности свойство Template.
Свойство Template — предназначено для хранения шаблона URL запроса к Яндекс.Бар. Видимым оно сделано исключительно для того, чтобы в случае каких-либо изменения у Яндекса не пришлось переписывать компонент. Если же Вы все-таки решили его изменить, что следует помнить два простых правила работы с этим свойством:
- В шаблоне обязательно должна быть подстрока %s, т.к. вместо неё будет подставляться домен.
- Все символы & должны быть двойными, т.е. &&. Иначе запрос не выполнится.
На всякий случай в модуле компонента есть константа Defoult, содержащая шаблон URL запроса. Так что, если его-нибудь не так измените, то не расстраивайтесь — рабочий шаблон всегда под рукой.
Свойство URL — говорит само за себя. Здесь храниться адрес домена тИЦ которого надо определить. Для облегчения работы с компонентом я предусмотрел ситуацию, когда адрес вписывается без http:// — компонент сам все подставит. Также при записи URL из строки вырезается всё, что стоит за именем домена, т.к. тИЦ определяется не для отдельных страниц, а для домена в целом. Поэтому пишите в URL какие угодно строки — компонент сам все обработает и всё что нужно подставит.
Это что касается видимых в Object Inspectore свойствах. Так же имеется ряд доступных свойств таких как:
Свойство TIC : integer — тИЦ домена
Свойство Rang : integer — ранг по Яндексу. Будет удобно использовать, если вдруг решите обозначать популярность домена звездочками или ещё какими-нибудь фигурками.
Свойство InYaCa : boolean — True если домен зарегистрирован в Яндекс.Каталоге.
Свойство: YacaInfo : TYaCaInfo — запись, содержащая текстовую информацию о домене.
В свою очередь тип TYaCaInfo выглядит следующим образом:
type TYaCaInfo = record Topic: string; // раздел каталога CatURL: string; // урл раздела каталога Source: string; // источник Region: string; //регион end;
Вот и все свойства компонента. Работать с компонентом тоже довольно просто.
3. Пример работы с компонентом
Рассмотрим простой пример работы с YaTic. Создаем новый проект и располагаем на форме компоненты, как показано на рисунке.
В Edit1 будем вписывать адрес сайта и в label‘ы выводить всё, что нам предоставит компонент. Обработчик события onClick у единственной на форме кнопки выглядит вот так:
procedure TForm2.Button1Click(Sender: TObject); var CatInfo: TYaCaInfo; begin YaTic1.URL := Edit1.Text; Label1.Caption := IntToStr(YaTic1.TIC); if YaTic1.inyaca then Label2.Caption := 'в каталоге' else Label2.Caption := 'Не в каталоге'; Label7.Caption := IntToStr(YaTic1.Rang); CatInfo := YaTic1.YacaInfo; Label9.Caption := CatInfo.Topic; Label11.Caption := CatInfo.CatURL; Label13.Caption := CatInfo.Source; Label15.Caption := CatInfo.Region end;
Как видите, чтобы не обращаться лишний раз к свойству YacaInfo я ввел всего одну переменную типа TYaCaInfo. В дальнейшем, изменяя только URL — получаем всю информацию. Если какая-то информация по домену отсутствует, например не указан регион сайта, то в соответствующее поле записи TYaCaInfo будет пустым.
У меня делфи 2005, bpl пакет не ставится т.к. нет одной из библиотек дельфи 2010, а установка из pas файла недоступна т.к. его нет в архиве с bpl, засада
Упс, прошу прощения, видимо забыл в архив положить файлик. Архив компонента перезалил — теперь там есть и pas-файл
Добрый день, хороший комнонент, а не могли бы вы написать компонент для определения Google PR? У меня считать контрольную сумму не выходит. Может у вас выйдет? Наше два компонента для PR, но один с parsers.info уже не рабочий, другой мне не выдает в числовом виде, только в виде картинки…
Пробовал PR читать с помощью того, что предоставляет панель Google (аналогично как и тИЦ), но компонент получился довольно странный — до PR=3 все работает нормально, а для всех остальных выдает PR=10. Надо исходники поискать, может и смогу доработать компонент
Странно. Да и работающих, нормальных PHP скриптов, которые нормально считают сумму мало. Если сделаете буду очень благодарен
что не выходит поставить не тем не другим способом
ругается что неможет найти .dcu
Путь к файлам компонена в настройках IDE надо показать
разобрался теперь ,задача как в поток все это завернуть или в несколько
[…] и при разработке предыдущего компонента для Delphi 2010, я не стал ограничивать установку компонента только […]
Скажите пожалуйста существует ли ограничение на количество запросов к ресурсу bar-navig.yandex.ru