ASP .NET - Pesquisando livros usando a API Google Search


Neste artigo vamos mostrar como criar uma pequena aplicação ASP .NET para localizar livros usando Google Search API.

Para poder usar este recurso vamos ter que baixar a API Google Search : GoogleSearchAPI.dll

Você pode usar este link para obter essa API: http://google-api-for-dotnet.googlecode.com/files/GoogleSearchAPI_0.3.1.zip

Requisitos:

Objetivos

Localizar e exibir livros, revistas e artigos em uma página ASP .NET usando a API Google Search.

Criando o projeto no Visual Studio 2012 Express for web

Abra o Visual Studio 2012 Express for web e clique em New WebSite;

A seguir selecione o template Visual C# -> Web -> ASP .NET Empty Web Site, informe o nome ProcurandoLIvrosGoogle e clique em OK;

A seguir copie o arquivo GoogleSearchAPI.dll para a basta bin do web site.

Após isso no menu WEBSITE clique em Add New Item e selecione o template Web Form informando o nome LocalizarLivros.aspx;

Selecione o web form criado e no modo Design inclua a partir da ToolBox os seguintes controles na página:

O leiaute da página visto a seguir:

O código da página LocalizarLivros.aspx no modo Source é visto abaixo:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="LocalizarLivros.aspx.cs" Inherits="BookSearch" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:HyperLink ID="hplnkmacoratti" runat="server" Font-Size="Large" NavigateUrl="http://www.macoratti.net">Macoratti.net</asp:HyperLink>
        <br />
        <asp:TextBox ID="txtLivro" runat="server" Width="300px"></asp:TextBox>
        <asp:Button ID="btnLocalizar" runat="server" Text="Procurar Livros no Google" OnClick="btnLocalizar_Click" /><br />
        <asp:DataList ID="dlLocalizar" runat="server" RepeatColumns="6" CellSpacing="5">
            <ItemTemplate>
                <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%#Eval("Url") %>'><img src='<%#Eval("Image") %>' width="120px" height="170px"/></asp:HyperLink><br />
                <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl='<%#Eval("Url") %>'><%#Eval("Title")+"("+Eval("Year")+")" %></asp:HyperLink>
                <asp:Label ID="Label1" runat="server" Text='<%#Eval("Author")+"(Pags:"+Eval("Page")+")" %>'></asp:Label>
            </ItemTemplate>
            <ItemStyle Width="250px" />
        </asp:DataList>
    </div>
    </form>
</body>
</html>

Agora abra o arquivo code-behind LocalizarLivros.aspx.cs e defina os seguintes namespaces :

using System;
using System.Collections.Generic;
using Google.API.Search;
using System.Data;

Agora abra o arquivo code-behind LocalizarLivros.aspx.cs e defina o código abaixo no evento Load da página:

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            dlLocalizar.DataSource = null;
            dlLocalizar.DataBind();
            txtLivro.Text = "";
        }
    }

Digite o código abaixo no evento Click do botão de comando btnLocalizar:

    protected void btnLocalizar_Click(object sender, EventArgs e)
    {
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        dt.Columns.Add(new DataColumn("Title", typeof(string)));
        dt.Columns.Add(new DataColumn("Author", typeof(string)));
        dt.Columns.Add(new DataColumn("Url", typeof(string)));
        dt.Columns.Add(new DataColumn("Image", typeof(string)));
        dt.Columns.Add(new DataColumn("Year", typeof(string)));
        dt.Columns.Add(new DataColumn("Page", typeof(string)));

        GbookSearchClient cliente = new GbookSearchClient("www.macoratti.net");
        IList<IBookResult> resultados = cliente.Search(txtLivro.Text, 30);
        
        foreach (IBookResult resultado in resultados)
        {
            DataRow dr = dt.NewRow();
            dr["Title"] = resultado.Title.ToString();
            dr["Author"] = resultado.Authors.ToString();
            dr["Image"] = resultado.TbImage;
            dr["Url"] = resultado.Url.ToString();
            dr["Year"] = resultado.PublishedYear.ToString();
            dr["Page"] = resultado.PageCount.ToString();
            dt.Rows.Add(dr);
        }

        dlLocalizar.DataSource = dt;
        dlLocalizar.DataBind();
    }
}

O código acima define um dataset e um datatable com uma estrutura para receber informações sobre : titulo, autor, url, imagem ano e página de um livro.

Após usar a API Google Search para realizar a busca guardamos o resultado em um

Observe que na pesquisa eu estou definido "www.macoratti.net" como o cliente, pois foi necessário um website hospedado para fins de segurança.

GbookSearchClient cliente = new GbookSearchClient("www.macoratti.net");

Se você informar algo aqui irá ocorrer uma exceção.

Na outra linha de código : IList<IBookResult> resultados = cliente.Search(txtLivro.Text, 30);

Eu estou passando o parâmetro 30 e o texto informado no TextBox. O valor 30 indica que quero obter até 30 resultados na pesquisa.

O resultado esta sendo armazenado em um IList<> que representa uma coleção de objetos não genéricos que podem ser acessados individualmente pelo índice.

Concluindo estamos usando um laço foreach para percorre a coleção e popular o DataTable atribuindo o resultado ao controle DataList - dlLocalizar.

Executando o web site e digitando Visual Basic na caixa de texto da página, ao clicar no botão - Procurar Livros no Google - teremos o seguinte resultado:

Pegue o projeto completo aqui: ProcurandoLivrosGoogle.zip

João 14:21 Aquele que tem os meus mandamentos e os guarda, esse é o que me ama; e aquele que me ama será amado de meu Pai, e eu o amarei, e me manifestarei a ele.

Referências:


José Carlos Macoratti