Використання Microsoft Bing API в Delphi, Різне, Програмування, статті

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


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 доступні наступні пошукові типи:



Використовувати 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 додатках.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*