Silverlight y Live Search API 2.0

Voy a mostrar de que manera podemos integrar los servicios de búsqueda de Live.com en una aplicación Silverlight utilizando Live Search API 2.0. Esta API nos permite realizar búsquedas de imágenes, páginas y demás tipos.

En el ejemplo vamos a ver como interactuar con la API, como obtener los resultados de búsqueda y como enlazarlos en un ListBox de Silverlight.

El primer paso es generar un API ID, para lo cual sólo necesitan ir aquí y logearse utilizando Live ID.

Luego, vamos a crear una aplicación Silverlight desde Visual Studio.

Ahora vamos a poner dentro del XAML los controles necesarios. Ya vamos a indicar en el ListBox el DataTemplate con el nombre de las Propiedades de nuestra clase.

<Grid x:Name="LayoutRoot" Background="White">
    
    <Grid.RowDefinitions>
        <RowDefinition Height="25" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    
    <StackPanel Orientation="Horizontal">
        <TextBox x:Name="txtBuscar" Width="200" />
        <Button x:Name="btnBuscar" 
                Content="Search" 
                Click="btnBuscar_Click" />
    </StackPanel>
    
    <ListBox x:Name="lstResultados" Grid.Row="1" 
             Height="257" Width="388" 
             RenderTransformOrigin="0.5,0.5">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Vertical" 
                            Margin="5,5,5,5">
                    <TextBlock Text="{Binding Path=Titulo}"/>
                    <HyperlinkButton NavigateUri="{Binding Path=Url}" 
                                     TargetName="_blank" 
                                     Content="{Binding Path=Url}" />
                    <TextBlock Text="{Binding Path=Descripcion}" 
                               TextWrapping="Wrap" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    
</Grid>

En el code-behind vamos a definir las funciones y clases necesarias para obtener y mostrar la información.

Primero vamos a definir la clase que utilizamos para enlazar los datos al ListBox

public class ResultadosBusqueda
{
    public string Url { get; set; }
    public string Titulo { get; set; }
    public string Descripcion { get; set; }
}

Agregamos las referencias a XML y LINQ ya que vamos a utilizarlas.

using System.Xml;
using System.Xml.Linq;

Definimos algunas constantes que nos van a servir para ir a buscar la información a la API.

// Acá va el API ID que has generado
const string appID = "API ID";
// Regionalizar la búsqueda 
const string marketBuscar = "es-ar";
// Tipo de búsqueda
const string sourcesBuscar = "web";
// NameSpace (usado para LINQ)
const string webNameSpace = "http://schemas.microsoft.com/LiveSearch/2008/04/XML/web";

 

Ahora definimos las funciones que llama a la API y que muestra la información

private void btnBuscar_Click(object sender, RoutedEventArgs e)
{
    WebClient wcBuscar = new WebClient();
    wcBuscar.OpenReadCompleted += 
        new OpenReadCompletedEventHandler(wcBuscar_OpenReadCompleted);
    wcBuscar.OpenReadAsync(new Uri("http://api.search.live.net/xml.aspx?AppID=" + 
                                    appID + "&Market=" + marketBuscar + 
                                    "&sources=" + sourcesBuscar + 
                                    "&query=" + 
                                    Uri.EscapeDataString(txtBuscar.Text)));
}
 
private void wcBuscar_OpenReadCompleted(Object sender, 
                                        OpenReadCompletedEventArgs e)
{
    Stream streamResult = e.Result;
 
    XDocument data = XDocument.Load(XmlReader.Create(streamResult));
 
    IEnumerable<XNode> nodes = 
        data.Descendants(XName.Get("Results", webNameSpace)).Nodes();
    if (nodes.Count() > 0)
    {
        var resultados = from uris in nodes
        select new ResultadosBusqueda
        {
        Titulo = 
            ((XElement)uris).Element(XName.Get("Title", webNameSpace)).Value,
        Descripcion = 
            ((XElement)uris).Element(XName.Get("Url", webNameSpace)).Value,
        Url = 
            ((XElement)uris).Element(XName.Get("Description", webNameSpace)).Value,
        };
 
        lstResultados.ItemsSource = resultados;            
    }                        
}

De esta manera tenemos nuestra aplicación conectada con Live Search.

Dibujo

1 Comment

Comments have been disabled for this content.