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.