Использование веб-службы Google

Веб-служба Google предоставляет удобный программный доступ к поисковой машине с использованием интерфейсов SOAP и REST. В нашем примере при реализации моста будет использоваться интерфейс SOAP.

Чтобы иметь возможность пользоваться веб-службой Google, необходимо пройти регистрацию. Для отправки запроса перейдите на страницу http://www.google.com/apis/soapsearch. Google передаст вам 32байтовый ключ лицензии, который необходимо будет отправлять вместе с каждым запросом к службе.

Конечно, было бы глупо сохранять этот (секретный!) ключ лицензии в программном коде JavaScript в странице. Также не рекомендуется помещать ключ в программный код ASP.NET на стороне сервера. Однако ключ лицензии можно поместить в раздел (appSettings) файла Web.config, как демонстрируется в следующем фрагменте:
(appSettings)
(add key="GoogleLicenseKey" value="***" /)
(/appSettings)

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

Кроме того, вам следует использовать возможность шифрования записей в файле Web.config, чтобы зашифровать секретный ключ.


Обсуждение данной особенности выходит далеко за рамки нашей темы, поэтому мы не будем использовать ее в примерах из этой главы.

На веб-сайте Google API можно найти доступный для загрузки Google Web API Developer’s Kit (набор инструментальных средств разработчика Google Web API). В его состав входит WSDL-файл с именем GoogleSearch.wsdl, содержащий описание интерфейса веб-службы. Эта информация может использоваться инструментом wsdl.exe (входит в состав .NET Framework SDK) для создания класса-посредника.

Загрузите файл GoogleSearch.wsdl или извлеките его из Google API SDK. Кроме того, содержимое файла .wsdl можно просмотреть в броузере, обратившись по адресу: http://api.google.com/GoogleSearch.wsdl, а затем скопировать его и вставить в локальный файл. Откройте окно Command (Командная строка) и запустите следующую команду (используйте символ верхнего регистра при наборе слова «Google», так как оно определяет чувствительное к регистру символов название пространства имен, которое будет использовано позднее):
wsdl.exe /namespace:Google GoogleSearch.wsdl

Эта команда создаст файл GoogleSearch.cs, в котором будут находиться определения класса и методов для вызова поисковой службы Google.


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

Поместите файл GoogleSearchService.cs со сгенерированным классом в каталог App_Code приложения с поддержкой ASP.NET Futures. (Если каталог App_Code еще не существует, создайте его.) Это позволит вам использовать класс, не прибегая к ручной компиляции. Следующий шаг состоит в том, чтобы создать программную обертку вокруг класса-посредника, посредством которой будет вызываться метод поиска. Мы не будем глубоко погружаться в прикладной интерфейс веб-службы Google, а отметим лишь, что веб-служба объявляет метод doGoogleSearch(), который принимает два аргумента: ключ лицензии Google и строку поиска. Обертка просто будет вызывать этот метод и возвращать полученные результаты, как показано в примере 18.1. Создайте файл GoogleSearchServiceWrapper.cs с определением класса в каталоге App_Code, удалите весь программный код, который уже имеется в файле, и затем скопируйте в него программный код из примера 18.1.
Пример 18.1.


Класс?обертка для доступа к веб-службе Google
GoogleSearchServiceWrapper.cs
using Google;
public class GoogleSearchServiceWrapper
{
public GoogleSearchResult Search(string licenseKey, string query)
{
GoogleSearchService gss = new GoogleSearchService();
return gss.doGoogleSearch(
licenseKey,
query,
0, // смещение первого результата
10, // максимальное число результатов
false, // следует ли отбрасывать похожие результаты
"", // набор условий Google, ограничивающих поиск
false, // следует ли отбрасывать содержимое,
// предназначенное только для совершеннолетних
"", // ограничение поиска по языку
"", // игнорируется, так же как и следующий параметр
"");
}
}

Теперь можно использовать полученный мост к веб-службе. Для активации моста к веб-службе следует предоставить всю необходимую информацию о веб-службе в виде файла .asbx. Создайте в корневом каталоге вашего веб-сайта XML-файл с именем Google.asbx.

Добавьте в файл .asbx пространство имен, где будет размещаться мост к веб-службе (атрибут namespace) и имя класса реализации моста (атрибут className).


В элементе должно быть указано имя класса?обертки и каталог, где его можно будет найти:


Затем необходимо перечислить все методы веб-службы, включая имена аргументов. Все аргументы, перечисленные здесь, позднее смогут использоваться в сценариях JavaScript. Не забудьте, что ключ лицензии хранится в файле Web.config. Из этого следует, что значение аргумента, в котором передается ключ лицензии, не может быть установлено из JavaScript. Вместо этого мы можем загружать ключ из раздела (appSettings) во время исполнения, используя следующий синтаксис:
serverOnly="true" />

Атрибут serverOnly="true" обеспечивает недоступность аргумента licenseKey для программного кода JavaScript, поэтому значение ключа всегда будет извлекаться из файла Web.config.
На этом все. Полный программный код из файла моста приводится в примере 18.2.
Пример 18.2. Реализация моста к веб-службе Google
Google.asbx




value="% appsettings : GoogleLicenseKey %"
serverOnly="true" />





Теперь все, что осталось сделать, это написать страницу .aspx, использующую мощь платформы ASP.NET AJAX. На странице нам потребуются текстовое поле, куда будет вводиться поисковый запрос, кнопка, запускающая поиск, и некоторые заполнители, где будут отображаться результаты поиска.

Разметка может выглядеть примерно так:





Approx. 0 results.





Безусловно, страница должна также содержать элемент управления ScriptManager. В его подэлементе следует указать ссылку на веб?службу – файл .asbx. Кроме того, нужно загрузить библиотеку сценариев PreviewScript.js, поскольку она будет использоваться
программным кодом JavaScript.
(asp:ScriptManager ID="ScriptManager1" runat="server")

(asp:ServiceReference Path="~/Google.asbx" /)


(asp:ScriptReference Assembly="Microsoft.Web.Preview"
Name="PreviewScript.js" /)

(/asp:ScriptManager)

Этот фрагмент загрузит реализацию моста и сделает доступным в JavaScript наше пространство имен OReilly.AspNetAJAX. После этого можно вызвать метод обертки Search(), как если бы это была обычная локальная веб?служба. Обратите внимание на то, как передаются параметры, – в виде массива, в котором имена параметров служат индексами:
OReilly.AspNetAJAX.Google.Search(
{ "query": query },
callComplete, callError
);

Данные, получаемые от веб-службы, – это JavaScript-представление объектов SOAP, возвращаемых сервером. В случае поиска в Google в возвращаемых данных имеется свойство (или подэлемент) с именем resultElements, которое содержит массив отдельных URL, удовлетворяющих условию поиска. Каждый URL, кроме всего прочего, имеет свойства title и URL, которые мы будем отображать на странице.

Полный код страницы в примере 18.3 содержит некоторые другие интересные эффекты на JavaScript. Например, при получении от веб-службы результаты динамически добавляются в список (HTML-элемент
    ). При запуске нового запроса этот список очищается вспомогательной функцией clearList(). Результаты поиска в Google благодаря мосту ASP.NET AJAX к веб-службе видны на локальной странице.
    Пример 18.3. Вызов веб?службы Google
    Google.aspx
    <%@ Page Language="C#" %>
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1?transitional.dtd"> ASP.NET AJAX


    (body)
    (asp:ScriptManager ID="ScriptManager1" runat="server")

    (asp:ServiceReference Path="~/Google.asbx" /)


    (asp:ScriptReference Assembly="Microsoft.Web.Preview"
    Name="PreviewScript.js" /)

    (/asp:ScriptManager)





    Approx. 0 results.





    (/body)


    Оцените статью: (0 голосов)
    0 5 0

    Статьи из раздела ASP.NET AJAX на эту тему:
    Использование веб-службы Amazon
    Использование веб-службы Yahoo! (а также REST и XPath)
    Преобразование результатов веб-службы с помощью XSLT