Windows Phone–Tutorial XVII – Usando datos en Windows Phone 7–Servicios OData

Pensaba que habia publicado ya el acceso a OData pero parece que entre los borradores que tenia me lo salte a la hora de publicar. Si queréis saber de Odata que es os recomiendo leer el post de Marc Rubiño , su web oficial http://www.odata.org/ y el White Paper de Jose Miguel Torres donde se muestra que es y como crear nuestros propios servicios OData,  podría resumirse (muy brevemente) en

OData (Open Data Protocol) es un protocolo para compartir datos diseñado para funcionar sobre la Web, utilizando URLs para
identificar cada pieza de información en un servicio, HTTP para transportar requerimientos y respuestas, y AtomPub y JSON para manejar colecciones y
para representaciones de datos.

En este post no voy a indicar como crear nuestros servicios OData sino como consumir este tipo de servicios en Windows Phone 7, para ello voy a utilizar ya servicios oData expuesto ya en la red, para ello disponemos de una lista en la pagina http://www.odata.org/producers, actualmente la lista es la siguiente

 

clip_image001 Live OData Services

Facebook Insights

An OData Service for consuming Facebook Insights data.

browse…

ebay

ebay now exposes its catalog via OData

browse…

Netflix

The complete netflix catalog title via OData.  See the Netflix developer OData documentation for more information

browse…

twitpic

twitpic now exposes its Images, Users, Comments etc via OData

browse…

Windows Live

You can now use an OData client to talk to your Windows Live resources (Photos, Contacts, Status, etc) whose REST endpoints are now OData endpoints.

Microsoft PDC 2010

Information about all the sessions / speakers etc for Microsoft PDC 2010 exposed via OData

browse…

Pluralsight

Pluralsight courses are now available via an OData feed

browse…

DevExpress Channel

DevExpress has lots of training videos, now available via an OData feed.

browse…

vanGuide

A social map of Vancouver Open Data. A collection of data services showing everything from parking lots to drinking fountains.

browse…

Vancouver Street Parking

This feed exposes Vancouver street parking information.

browse…

Open Government Data Initiative

Open Government Data Initiative (OGDI) is an open source data publishing solution for government agencies.

browse…

Open Science Data Initiative

OSDI is based on OGDI which in turn uses the Azure Services Platform to make it easier to publish and use a wide variety of scientific data from government agencies.

Lots of feeds but no service document. You can however use theircustom browser.

The City of Edmonton Open Data Catalogue

Public data from the city of Edmonton.

browse…

Windows Azure Marketplace DataMarket

Windows Azure Marketplace DataMarket allows producers to sell premier data to consumers, using OData.

TechEd 2010

Microsoft TechEd 2010 conference session data.

browse…

MIX10

Microsoft MIX 2010 session data.

browse…

Nerd Dinner

Nerd Dinner is a website that helps nerds to meet and talk, not surprisingly it has adopted OData

browse…

DBpedia

A community effort to extract structured information from Wikipedia and to make this information available on the Web, with full support for OData interactions on the live query services. (Powered by OpenLink Virtuoso.)

browse or query

Linked Open Data Cloud Cache

Mirrors and interlinks dozens of data sets including all of data.gov, with full support for OData interactions. (Powered by OpenLink Virtuoso.)

browse or query

OData Test Service (Read-Only)

This service is specially designed to introduce OData, it has a simple model and only a small number of resources.

browse…

OData Test Service (Read-Write)

As above, but this time read-write (with some restrictions).

browse…

Northwind

The famous Northwind Database exposed as an OData Service.

browse…

OData Website Data

Data, like producers and consumers, from the OData Website exposed as OData.

browse…

Stack Overflow

Q&A for programmers

browse…

Super User

Q&A for computer enthusiasts and power users

browse…

Server Fault

Q&A for system administrators and IT professionals

browse…

Meta Stack Overflow

Q&A about Stack Overflow, Server Fault and Super User

browse…

Telerik TV

Telerik’s catalog of libraries, videos, Tags and Series

Browse …

Public Transit Data Community

Collection of mass transit data from a variety of transportation agencies across the United States. See developer documentationfor more details.

Browse …

LogMyTime

Project time tracking software for freelancers and small to medium teams.

browse…

INETA Live

INETA Live has an OData feed providing access to their vast library of User Group Presentations.

browse…

Microsoft Pinpoint

Microsoft Pinpoint marketplace now exposes its data using OData – more details coming soon

Proagora

Proagora is a site that allows you to search for jobs, companies, and experts.

browse inEnglish orFrench

 

Como podéis ver cada vez existen mas servicios que estan exponiendo sus API a través de este protocolo, yo voy a utilizar TwitPic para desarrollar una pequeña aplicación tonta para que veáis los pasos a seguir a la hora de consumir estos servicios.

Lo primero que necesitamos es descargarnos OData Client Library for Windows Phone 7, yo me he bajado ODataClient_BinariesAndCodeGenToolForWinPhone.zip, en este zip se encuentran dos assembly y el ejecutable DataSvcUtil.exe una vez que tenemos estos archivos y creamos nuestro proyecto.

Si ya habéis trabajado con Odata en aplicaciones de ASP¨, WPF… tendréis la tentación de añadir un Service Reference para que os cree el proxy con las clases, pero esto no funciona.

image 

 

Los pasos que tenemos que seguir son añadir como referencia el assembly System.Data.Services.Client.dll de la libreria OData Client Library for Windows Phone 7

 y utilizaremos el ejecutable DataSvcUtil.exe para generar el fichero proxy. Para generar esta clase deberemos de lanzar el comando

datasvcutil /uri:http://odata.twitpic.com/ /DataServiceCollection /Version:2.0  /out:TwitpicOdata.cs

donde en uri ponemos la url de acceso al servicio oData que podemos sacar de la tercera columna de la tabla puesta anteriormente, en este caso http://odata.twitpic.com y en out el fichero que queremos generar. Una vez generado el fichero lo añadimos a nuestro proyecto.

Nuestro proyecto nos quedaría con los archivos

image

La aplicación que vamos a construir es una lista de las paginas devueltas por el Tag kinect junto con el mensaje de Twitter, de tal manera que nos quedaría

 

image

 

En nuestro ViewModel declararemos la propiedad que rellenara el ListBox.

1 public DataServiceCollection<Image> ImageTags 2 { 3 get 4 { 5 return imageTags; 6 } 7 private set 8 { 9 imageTags = value; 10 RaisePropertyChanged("ImageTags"); 11 12 } 13 }

 

DataServiceCollection es una clase que deriva de ObservableCollection<T> y implementa IDataServiceCollection se encuentra en el assembly System.Data.Services.Client.dll  y es la clase que nos devuelven los servicios OData al derivar de ObservableCollection<T>  podemos realizar un binding a la propiedad ItemsSource de la lista.

 

 

1 <Grid x:Name="ContentGrid" 2 Grid.Row="1"> 3 <ListBox Margin="24,18,21,0" VerticalAlignment="Top" ItemsSource="{Binding ImageTags}" ItemTemplate="{StaticResource DataTemplateImagesTags}" Height="566"/> 4 </Grid>

 

 

Ahora solo nos queda recuperar los datos para ello siempre debemos crear un contexto que en nuestro caso es la clase TwitpicData y asignarselo a la propiedad ImageTags, una vez asignado debemos de indicar la uri con los filtros que queremos realizar, para nuestro ejemplo es muy sencillo esta uri es

/Tags(‘” + tag +”‘)/Images()?

Si ejecutamos en nuestro navegador la uri http://odata.twitpic.com/Tags(‘kinect’)/Images()? obtendremos una respuesta como esta

image

Una vez tenemos la Uri, solo tenemos que llamar al método LoadAsync para que realice la búsqueda, de manera que el código seria

 

 

1 private void LoadImageTags(string tag) 2 { 3 context = new TwitpicData(new Uri("http://odata.twitpic.com")); 4 imageTags = new DataServiceCollection<Image>(context); 5 6 Uri uriQuery = new Uri(@"/Tags('" + tag +"')/Images()?", UriKind.Relative); 7 8 ImageTags.LoadAsync(uriQuery); 9 10 ImageTags.LoadCompleted += (sender, args) => 11 { 12 if (args.Error != null) 13 { 14 Debug.WriteLine("Ha fallado la consulta. " + args.Error.Message); 15 } 16 17 }; 18 } 19

 

 

Ya tenemos nuestro acceso a OData y nuestra aplicación realizada

 

6 comentarios en “Windows Phone–Tutorial XVII – Usando datos en Windows Phone 7–Servicios OData”

  1. Muy buenos tus artículos sobre WP7. Estoy intentando encontrar respuesta a un problema. ¿Me podrías ayudar? El problema es simple:
    Al coger el foco un textbox editable y desplegarse el SIP, se produce un scroll generalizado de toda la página, para colocer el textbox que tiene el foco justo encima del SIP, pero ésto hace que el título de la aplicación desaparezca con el scroll. ¿Sabes si existe solución a ese efecto?¿Conoces el motivo de que se produzca este efecto en toda la página?

  2. Muchas gracias por responder. Imaginaba esa respuesta, pero la duda la tenía porque viendo un dispositivo con Windows Phone 7, he observado que por ejemplo en Contactos, al Editar un Contacto y Editar la Dirección, tenían controlado ese efecto.
    En fin, probaré en los foros de WP7.
    Gracias de nuevo.

  3. Se me ha ocurrido que lo podrías controlar, podrías hacer la pregunta en los forros de windows phone y así queda registrada y te contesto allí?

  4. Ya he publicado la duda en los foros de Windows Phone, la podrás encontrar con el título
    “SIP con textbox producen mal scroll” a nombre de Alberto Parrilla.
    Gracias de nuevo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *