(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Использование Microsoft Bing API в Delphi

Источник: delphi2010
Александр Божко

Автор: Александр Божко

Bruno Fierens из бельгийской компании TMS Software рассказал о Bing API - интересном сервисе от Microsoft, попутно прорекламировав пару TMS'овских компонентов для работы с Web. Я попытался это перевести.

С помощью Bing API, Microsoft предоставляет набор простых в использовании служб, которые могут быть полезны как для разработки Delphi веб-приложений, так и для Win32 приложений.  Стартовой точкой для того, что бы увидеть возможности Bing API, является http://www.bing.com/developers. Первая вещь, которую необходимо сделать для начала работы с Bing API - получить Bing AppID. Для этого воспользуйтесь URL: http://www.bing.com/developers/createapp.aspx.

В основном применять Bing API можно бесплатно, при условии соблюдения правил его использования, выдвигаемых Microsoft, каковые, к счастью, довольно гибкие.

По получении Bing AppID, вы можете приступить к работе. Простейшим способом использования Bing API является применение запроса HTTP GET, возвращающего в качестве результата XML файл. Bing API предоставляет доступ к нескольким поисковым типам, которые обозначаются как SourceType. В v2.0 API доступны следующие поисковые типы:

  • Ad SourceType: получить содержимое рекламы;
  • Image SourceType: поиск изображений;
  • InstantAnswer SourceType: получить ответ на вопросы типа, "какой город является столицей Германии?";
  • MobileWeb SourceType:
  • News SourceType: получить информацию из новостных заголовков;
  • Phonebook SourceType: получить информацию об адресе и телефонном номере;
  • RelatedSearch SourceType: получить смежные поисковые запросы;
  • Spell SourceType: выполнить проверку орфографии;
  • Translation SourceType: выполнить перевод;
  • Video SourceType: поиск  видео;
  • Web SourceType: выполнить обычный веб-поиск.

Использовать Bing API в Delphi можно отсылая серверу api.bing.net  HTTP GET запрос  следующей структуры:

http://api.bing.net/xml.aspx?Appid=YourAppID

&Query=YourQueryString

&Sources=YourSourceType(s) + more options

Этот HTTP GET запрос  возвратит XML файл, содержащий результат. Delphi 2009 предоставляет все необходимые компоненты для того, что бы начать использовать API. Вы можете использовать Indy TidHTTP компонент для выполнения HTTP GET запроса и TXMLDocument для парсинга результирующего XML файла. Что бы облегчить себе жизнь, мы используем компонент TWebCopy для получения результирующего XML файла и TXMLDocument для парсинга результата.

Пример 1. Web поиск.

Web поиск производится с использованием 'web' SourceType. Типовой запрос выглядит так:

http://api.bing.net/xml.aspx?Appid=YourAppID

&Query=Delphi&Sources=web

Опционально мы можем установить запрашиваемое число результатов и смещение, т.е.

http://api.bing.net/xml.aspx?Appid=YourAppID

&Query=Delphi&Sources=web&web.count=20&web.offset=40

Для того, что бы быстро получить результирующий XML файл, мы используем TWebCopy следующим образом:

with webcopy.Items.Add do

begin

  // AppID is a string constant containing our AppID, searchstr is our search query. 

  url := 'http://api.search.live.net/xml.aspx?Appid=' + AppID + '&query='+HTTPEncode(searchstr)+'&sources=web&web.count='+inttostr(count)+'&web.offset='+inttostr(offset);

  TargetFilename := 'response.xml';

  Protocol := wpHttp;

end;

webcopy.ShowDialog := false;

webcopy.Execute;

В этом фрагменте кода,  мы просто получили текст с описанием найденных Bing"ом URL. Мы так же можем  извлечь сами URL, заголовки страниц, время их создания…

Пример 2. Перевод теста с английского на немецкий.

Bing API также предоставляет сервис перевода текста с одного языка на другой. HTTP запрос очень похож на запрос Web поиска. Нам только потребуется указать Translation в качестве SourceType и задать опции исходного языка и языка перевода. Мы включили все это в простую для использования функцию.

function HTTPEncode(const AStr: string): string;

const

NoConversion = ['A'..'Z', 'a'..'z', '*', '@', '.', '_', '-'];

var

i: integer;

begin

Result := '';

for i := 1 to Length(AStr) do

begin

if CharInSet(AStr[i],NoConversion) then

Result := Result + AStr[i]

else

Result := Result + Format('%%%.2x',[ord(AStr[i])]);

end;

end;

function GetTranslation(text, fromLang, toLang: string): string;

var

xmldoc: TXMLDocument;

inode,mnode,rnode,irnode: IXMLNode;

j: integer;

uri: string;

webcopy: TWebCopy;

begin

Result := '';

webcopy := TWebCopy.Create(application);

try

webcopy.Items.Clear;

with webcopy.Items.Add do

begin

url := 'http://api.search.live.net/xml.aspx?Appid=' + AppID + '&query='+HTTPEncode(text)+

'&sources=translation'+

'&Translation.SourceLanguage=' + fromLang +

'&Translation.TargetLanguage=' + toLang;

TargetFilename := 'response.xml';

Protocol := wpHttp;

end;

webcopy.ShowDialog := false;

webcopy.Execute;

finally

webcopy.Free;

end;

xmldoc := TXMLDocument.Create(application);

try

xmldoc.LoadFromFile('response.xml');

inode := xmldoc.ChildNodes.FindNode('SearchResponse');

if Assigned(inode) then

begin

uri := 'http://schemas.microsoft.com/LiveSearch/2008/04/XML/translation';

mnode := inode.ChildNodes.FindNode('Translation',uri);

if Assigned(mnode) then

begin

rnode := mnode.ChildNodes.FindNode('Results',uri);

if Assigned(rnode) then

begin

irnode := rnode.ChildNodes.FindNode('TranslationResult',uri);

if Assigned(irnode) then

Result := irnode.ChildNodes.FindNode('TranslatedTerm',uri).NodeValue;

end;

end;

end;

finally

xmldoc.Free;

end;

end;

begin

// sample call: 

ShowMessage(GetTranslation('Hello world','En','De'));

end;

Этот пример кода переведет "Hello world" с английского на немецкий ("hallo Welt" ).

Пример 3. Исправление орфографических ошибок.

Bing API может, кроме всего прочего, предложить нам проверку английской орфографии. Опять же, интерфейс очень прост, т.е. обычный HTTP GET запрос с SourceType Spell. Мы также включили этот API в Delphi функцию для простоты использования.

function DoSpellCheck(text: string): string;

var

xmldoc: TXMLDocument;

inode,mnode,rnode,irnode: IXMLNode;

j: integer;

uri: string;

webcopy: TWebCopy;

begin

Result := '';

webcopy := TWebCopy.Create(application);

try

with webcopy.Items.Add do

begin

url := 'http://api.bing.net/xml.aspx?Appid=' + AppID + '&query='+HTTPEncode(text)+

'&Sources=Spell&Version=2.0&Market=en-us&Options=EnableHighlighting';

TargetFilename := 'response.xml';

Protocol := wpHttp;

end;

webcopy.ShowDialog := false;

webcopy.Execute;

finally

webcopy.Free;

end;

xmldoc := TXMLDocument.Create(application);

try

xmldoc.LoadFromFile('response.xml');

inode := xmldoc.ChildNodes.FindNode('SearchResponse');

if Assigned(inode) then

begin

uri := 'http://schemas.microsoft.com/LiveSearch/2008/04/XML/spell';

mnode := inode.ChildNodes.FindNode('Spell',uri);

if Assigned(mnode) then

begin

rnode := mnode.ChildNodes.FindNode('Results',uri);

if Assigned(rnode) then

begin

irnode := rnode.ChildNodes.FindNode('SpellResult',uri);

if Assigned(irnode) then

Result := irnode.ChildNodes.FindNode('Value',uri).NodeValue;

end;

end;

end;

finally

xmldoc.Free;

end;

end;

begin

// sample call with a forced spelling error 

ShowMessage( DoSpellCheck('Mispeling words is a common ocurrence') );

end;

Пример 4. Получения изображения из web.

Для нескольких существующих более интересных SourceType"ов, таких как News, InstantAnswer, Video, концепция остается идентичной. В последнем примере мы используем Bing API для получения первого соответствующего нашему запросу  изображения из web  и отображения его в приложении. Мы упростим эту операцию используя TMS TWebImage , который выполнит всю работу по загрузке и отображению результирующего изображения. Полученный код приведен ниже:

function GetImageLink(searchstr: string): string;

var

xmldoc: TXMLDocument;

inode,mnode,rnode,irnode: IXMLNode;

j: integer;

uri: string;

webcopy: TWebCopy;

begin

Result := '';

webcopy := TWebCopy.Create(application);

try

with webcopy.Items.Add do

begin

url := 'http://api.bing.net/xml.aspx?Appid=' + AppID + '&query='+HTTPEncode(searchstr)+'&sources=image&image.count=1';

TargetFilename := 'response.xml';

Protocol := wpHttp;

end;

webcopy.ShowDialog := false;

webcopy.Execute;

finally

webcopy.Free;

end;

xmldoc := TXMLDocument.Create(application);

try

xmldoc.LoadFromFile('response.xml');

inode := xmldoc.ChildNodes.FindNode('SearchResponse');

if Assigned(inode) then

begin

uri := 'http://schemas.microsoft.com/LiveSearch/2008/04/XML/multimedia';

mnode := inode.ChildNodes.FindNode('Image',uri);

if Assigned(mnode) then

begin

rnode := mnode.ChildNodes.FindNode('Results',uri);

if Assigned(rnode) then

begin

irnode := rnode.ChildNodes.Nodes[0];

if Assigned(irnode) then

Result := irnode.ChildNodes.FindNode('MediaUrl',uri).NodeValue;

end;

end;

end;

finally

xmldoc.Free;

end;

end;

begin

// sample retrieving an image hyperlink and show it on the form using a TWebImage component 

imageurl := GetImageLink('mercedes SL gullwing');

caption := imageurl;

Screen.Cursor := crHourGlass;

WebImage1.URL := imageurl;

Screen.Cursor := crDefault;

end;

Приведенный фрагмент кода отображает прекрасный Mercedes SL gullwing (с открывающимися наверх дверьми) в компоненте TWebImage, размещенном на форме. Мы надеемся, что эти примеры вдохновят вас на создание ряда интересных функции в Delphi Win32 или IntraWeb приложениях.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 19.08.2009 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Delphi Professional Named User
Enterprise Connectors (1 Year term)
Bamboo
ABBYY Lingvo x6 Европейская Профессиональная версия, электронный ключ
Купить, скачать Dr.Web Security Space, 1 год, 1 ПК
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
СУБД Oracle "с нуля"
Новости мира 3D-ускорителей
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100