Windows Azure Marketplace DataMarket

Présentation de DataMarket

Elisa Flasko

Windows Azure Marketplace DataMarket qui, lors de l’édition 2009 de la conférence annuelle pour les développeurs de Microsoft (PDC), a été annoncé comme un projet répondant au nom de code « Dallas », modifie les échanges d’informations en proposant, sur une place de marché unique, un vaste ensemble de contenus issus de sources commerciales et publiques faisant autorité. Cette solution facilite la recherche et l’achat des données dont vous avez besoin pour alimenter vos applications et vos analyses.

Si je développais une application pour identifier et prévoir les escales d’un voyage, j’aurais besoin de nombreuses données, provenant de sources très différentes. Cette application pourrait tout d’abord demander à l’utilisateur de saisir un point d’arrivée, ainsi que toutes les escales qu’il souhaite effectuer sur son trajet. Elle pourrait extraire l’emplacement GPS actuel ou demander à l’utilisateur de saisir un point de départ et utiliser ces informations pour tracer le meilleur itinéraire de voyage. Après avoir cartographié le voyage, l’application pourrait accéder à Facebook et identifier sur le trajet les amis auxquels vous souhaitez peut-être rendre visite. Elle pourrait extraire les bulletins météo des villes dans lesquelles vous voulez vous arrêter, ainsi qu’identifier les centres d’intérêt, les stations service et les restaurants comme points de halte éventuels.

Avant DataMarket, j’aurais dû tout d’abord rechercher les sources de tous les types de données dont j’ai besoin pour mon application. J’aurais ainsi dû visiter les sites Web de nombreuses sociétés pour déterminer si je dispose ou non des données voulues et rechercher si ces sociétés les proposent à la vente dans une offre groupée ou à un prix que je peux accepter. J’aurais ensuite dû acheter ces données directement auprès de chaque société. Par exemple, je me serais adressée directement à une société telle qu’Infogroup pour acheter des données me permettant d’identifier les centres d’intérêt, les stations service et les restaurants le long du trajet, à une société du type NavTeq pour les rapports de trafic et à une autre telle que Weather Central pour les bulletins météo. Il y a fort à parier que ces sociétés proposent des données dans des formats différents. Certaines m’auraient par exemple envoyé un DVD, d’autres m’auraient proposé ces informations via Internet, dans une feuille de calcul Excel, etc.

De nos jours, avec DataMarket, créer ce type d’application devient un jeu d’enfant. DataMarket propose un emplacement unique (une place de marché réservée aux données) sur lequel je peux rechercher, explorer, tester et acheter les données dont j’ai besoin pour développer mon application. DataMarket me propose également ces données via une interface uniforme, au format standard (OData, voir le site OData.org pour plus d’informations). En affichant les données au format OData, DataMarket veille à ce que je puisse y accéder sur n’importe quelle plateforme (sachant que j’ai au moins besoin d’une pile HTTP) et à partir de toutes les applications prenant en charge OData, notamment Microsoft PowerPivot pour Excel 2010 qui supporte OData en natif.

DataMarket fournit une place de marché unique et permet aux fournisseurs de contenu de rendre leurs données accessibles à la vente via des offres différentes (chaque offre peut proposer un sous-ensemble ou une vue différente des données disponibles ou rendre les données disponibles en faisant varier les conditions d’utilisation). Les fournisseurs de contenu indiquent les détails de leurs offres, notamment les conditions d’utilisation régissant un achat, le modèle tarifaire (dans la version 1, les offres sont proposées via un abonnement mensuel) et les prix.

Prise en main de DataMarket

Pour commencer, je m’inscris sur DataMarket au moyen de mon identifiant Windows Live ID, puis je me connecte au site. À partir de là, j’effectue une recherche parmi les jeux de données actuellement proposés sur le site et j’en affiche les détails (description, tarifs, visualisation, conditions d’utilisation, etc.) pour déterminer les éditeurs capables de me proposer le type de données que je recherche, ainsi que les offres qui correspondent le mieux à mes besoins.

Même si je dois trouver un jeu de données qui réponde aux exigences techniques de mon application, il est également important pour moi de vérifier les conditions d’utilisation énoncées par l’éditeur pour m’assurer que je peux utiliser les données de la façon souhaitée. Les conditions d’utilisation peuvent considérablement varier d’un jeu de données et d’un éditeur à un autre. Je peux afficher les conditions d’utilisation d’un jeu de données spécifique dans les détails de l’offre.

Après quelques recherches, je découvre que le service Infogroup Business Database pourrait être intéressant pour mon application de voyage. Après avoir passé en revue les possibles affichages des données (un échantillon de données dans un tableau ou dans certains cas, un affichage des données sur une carte ou dans un graphique), il semble que cette base de données puisse proposer des centres d’intérêt le long du trajet, notamment des hôtels, restaurants et stations service, ainsi que répondre à mes exigences. Après avoir déterminé les jeux de données dont j’aurais besoin, je peux choisir de m’abonner mensuellement à ce service, ce qui me permettrait d’effectuer un nombre illimité de requêtes tous les mois, et de m’acquitter de l’abonnement au moyen de ma carte de paiement. Une fois l’achat effectué, je peux gérer mon compte et voir tous mes abonnements actifs dans la section My Account du Marketplace. La section My Account sert également à créer et à gérer les clés de compte que j’utilise pour accéder à mes abonnements. Lorsque j’accède aux données depuis une application telle que PowerPivot, je dois fournir ma clé de compte. De même, lorsque je développe une application, je m’authentifie au moyen d’une clé de compte.

Après que j’ai acheté une offre de données, DataMarket me propose Service Explorer. Cet explorateur de services, tel que présenté dans la Figure 1, me permet d’explorer un jeu de données en créant des requêtes et en préaffichant les résultats. Il me permet aussi d’en apprendre bien plus sur les données et le schéma que chacun des jeux de données individuels.

image: DataMarket Service Explorer

Figure 1 DataMarket Service Explorer

Si j’ouvre le service Infogroup Business Database dans Service Explorer, je peux créer des requêtes pour localiser des emplacements le long de mon itinéraire et effectuer un filtrage par ville, état et code postal. Par exemple, si j’indique Seattle comme ville et WA comme état puis que je clique sur Execute query, j’accède à un aperçu qui englobe les 100 premiers résultats de ce service. Je peux voir dans l’aperçu qu’il existe un hôtel appelé Westin Hotel à Seattle et je souhaite que mon application l’intègre à sa liste d’escales. Par défaut, lorsque je clique sur Preview, les résultats s’affichent sous forme de tableau dans la partie droite de l’explorateur afin d’en faciliter la lecture. Cependant, je peux également afficher, directement depuis Service Explorer, les données au format OData Atom que je vais utiliser dans mon application ou encore afficher les données brutes, dans le format d’origine fourni par Infogroup.

Maintenant, si je ne suis pas développeur ou si mon intention n’est pas de créer une application avec ces données mais simplement d’extraire les données dans un outil existant qui comprend OData, par exemple PowerPivot pour Excel 2010, je peux également me connecter au DataMarket, ouvrir ma liste d’abonnements en cours, puis cliquer sur l’offre de données qui m’intéresse. À partir de là, je peux ouvrir l’offre de données dans l’application de mon choix. (Pour en savoir plus sur l’utilisation du DataMarket avec PowerPivot, notamment accéder à un didacticiel détaillé, consultez le blog de l’équipe DataMarket à l’adresse blogs.msdn.com/b/dallas.)

Utilisation des données OData

Avez-vous déjà créé une application qui utilise des données provenant d’un service OData ? Si la réponse est oui, vous êtes prêt à utiliser les données proposées par DataMarket dans votre application car la plupart des services DataMarket s’appuient sur le protocole OData. Je vais rapidement passer en revue les étapes essentielles à suivre pour utiliser des données OData.

Que je parte d’une application existante et que j’ajoute simplement de nouvelles fonctionnalités qui utilisent des données provenant de DataMarket ou que je crée de toutes pièces une application, la première étape pour extraire les données d’un service DataMarket consiste à définir les classes que je vais utiliser pour représenter les données dans mon application. Je peux procéder en codant mes propres classes POCO (Plain Old C# Object) ou en utilisant l’Assistant Ajouter une référence de service dans Visual Studio pour générer les classes nécessaires.

Tout comme nous l’avons décrit précédemment, l’éditeur (le propriétaire des données) spécifie la façon dont les données de chaque jeu vont s’afficher, ainsi que les conditions d’utilisation de ces données après leur achat. Il s’agit pour lui d’indiquer si un utilisateur peut créer des requêtes ad hoc pour interroger un jeu de données ou la façon dont il peut y parvenir, mais aussi de préciser les champs sur lesquels une requête peut porter, ainsi que les champs de résultats. Dans certains cas, un éditeur peut décider que les utilisateurs ne sont pas autorisés à créer des requêtes ad hoc et doivent alors utiliser des méthodes Web fixes pour demander les données au service. En tant que développeur, avant de commencer à écrire une application, je dois consulter le document de service Atom d’une offre en particulier pour déterminer si l’offre qui m’intéresse permet d’effectuer des requêtes sur chacun des jeux d’entités. Pour cela, il me suffit de faire pointer le navigateur vers l’URI racine d’une offre. Si le document de service ne contient aucune collection, l’offre ne permet pas d’effectuer des requêtes sur les jeux d’entités et je vais devoir accéder au jeu de données en utilisant des méthodes Web fixes. Par exemple, consultons les documents de service Atom concernant deux jeux de données séparés. L’un permet d’effectuer des requêtes sur un jeu d’entités (données Data.Gov portant sur la criminalité) tandis que l’autre ne le permet pas (données AP). Vous remarquerez dans les exemples de code suivants que l’offre AP ne possède aucun nœud <collection> (représentant les jeux d’entités affichés) dans le document de service.

Voici un document de service Atom pour l’offre de données Data.gov en matière de criminalité qui permet d’effectuer des requêtes sur les jeux d’entités. Cette offre particulière affiche un jeu d’entités unique, CityCrime :

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<service xml:base=
  "https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes"  
  xmlns:atom=
  "http://www.w3.org/2005/Atom" 
  xmlns:app="http://www.w3.org/2007/app" 
  xmlns="http://www.w3.org/2007/app">
 <workspace>
   <atom:title>Default</atom:title> 
   <collection href="CityCrime">
     <atom:title>CityCrime</atom:title> 
   </collection>
 </workspace>
</service>

Voici un document de service Atom pour l’offre AP qui ne permet pas d’effectuer de requêtes ad hoc :

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<service xml:base=
  "https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes" 
  xmlns:atom="http://www.w3.org/2005/Atom" 
  xmlns:app="http://www.w3.org/2007/app" 
  xmlns="http://www.w3.org/2007/app">
 <workspace>
   <atom:title>Default</atom:title> 
 </workspace>
</service>

Si le jeu de données que j’utilise affiche des jeux d’entités sur lesquels effectuer une requête, je peux utiliser Ajouter une référence de service dans Visual Studio, tout comme je le ferai pour un service Windows Communication Foundation (WCF). Je clique alors simplement sur le projet avec le bouton droit de la souris, puis je sélectionne Ajouter une référence de service. Dans la boîte de dialogue Ajouter une référence de service, je saisis l’URI du point d’entrée du service (que j’obtiens à partir de la page Service Explorer dans DataMarket) en tant qu’adresse, puis je clique sur OK.

Toutefois, si le jeu de données que j’utilise ne permet pas d’effectuer des requêtes ad hoc, je ne peux pas me servir de l’Assistant Ajouter une référence de service. Dans ce cas, je peux coder mes propres classes POCO représentant les entités (ou les objets) renvoyées à partir des méthodes Web fixes que j’appelle. DataMarket utilise l’authentification de base et mentionne l’identifiant Windows Live ID en tant que nom d’utilisateur et une clé de compte DataMarket dans le champ réservé au mot de passe. Pour les besoins de l’application de console dans notre exemple, (voir la Figure 2), j’ai utilisé Ajouter une référence de service dans Visual Studio pour générer les classes. Visual Studio accédera au service et générera les classes associées d’après la définition du service de données, puis les ajoutera au projet. Après avoir généré mes classes, je continue à développer mon application tout comme je le ferais pour une application utilisant un service OData. Je peux utiliser aussi bien l’authentification de base que les services ACS (Audit Collection Services) pour m’authentifier auprès du service. La Figure 2 fournit un exemple de configuration d’une application de console simple au moyen de l’authentification de base.

Figure 2 Application de console simple accédant à un service de données et imprimant les résultats

public class Program
  {
       
    static void Main(string[] args)
    {
        GetCityCrime X = new GetCityCrime();

        IList<CityCrime> stats = X.getStats();

        foreach (CityCrime c in stats)
        {
            Console.WriteLine(c.City + " : " + c.AggravatedAssault);
        }
        Console.ReadLine();
    }               
  }

  public class GetCityCrime
  {
    Uri serviceUri;
    datagovCrimesContainer context;

    public GetCityCrime()
    {
      serviceUri = 
        new Uri("https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes");
      context = new datagovCrimesContainer(serviceUri);
      context.Credentials = new NetworkCredential(" ", "
        <my account key as copied from DataMarket>");
    }

    public IList<CityCrime> getStats()
    {
      IEnumerable<CityCrime> query; 

       query = from c in context.CityCrime
             where c.State == "Alaska"
             select c;

       return query.ToList();
    }
  }

Remarque : pour exécuter l’exemple de code dans laFigure 2*, vous devrez vous enregistrer en tant que client DataMarket, puis vous abonnez à l’offre de statistiques Data.Gov en matière de criminalité. Notez également que l’URI utilisé dans cet exemple fait référence à une version préliminaire de la version finale du service. Pour accéder à l’URI correct, connectez-vous au DataMarket, allez dans My Datasets, puis accédez à votre abonnement Data.gov portant sur les statistiques en matière de criminalité.*

Pour en savoir plus sur l’écriture d’applications utilisant des services de données, consultez les articles « Entity Framework 4.0 et WCF Data Services 4.0 dans Visual Studio 2010 » (msdn.microsoft.com/magazine/ee336128) et « Exposition et utilisation de données dans le monde des services Web » (msdn.microsoft.com/magazine/cc748663).

Vendre des données sur DataMarket

De nombreuses applications et sites Web très prisés génèrent, stockent et consomment d’importants volumes de données jugées précieuses. Toutefois, la plupart du temps, ces données ne sont exploitées qu’au sein de l’application pour laquelle elles ont été créées. Depuis l’avènement de WCF Data Services et du protocole OData, les développeurs disposent d’un moyen simple leur permettant d’afficher leurs données pour une utilisation plus étendue. Il s’agit de proposer une plateforme de services de données et de faciliter l’utilisation de ces données, non seulement au sein de l’application pour laquelle elles ont été prévues au départ, mais aussi au sein d’applications tierces. Désormais, avec DataMarket, les développeurs peuvent non seulement afficher les données dans les applications qu’ils conçoivent, mais aussi générer des bénéfices en vendant des données qu’ils doivent déjà stocker et mettre à jour.

DataMarket repose sur Windows Azure et SQL Azure et permet aux éditeurs de créer des jeux de données pour les données qu’ils hébergent dans SQL Azure. Si mes données sont déjà stockées dans SQL Azure, il y a de fortes chances que je puisse les proposer à la vente dans DataMarket. Pour en savoir plus sur la possibilité de devenir éditeur DataMarket, consultez blogs.msdn.com/b/dallas.

Elisa Flasko* officie dans l’équipe Windows Azure Marketplace DataMarket de Microsoft en tant que gestionnaire de programme. Vous pouvez la joindre sur blogs.msdn.com/elisaj.*

Merci aux experts techniques suivants d’avoir relu cet article : Rene Bouw, Moe Khosravy et Adam Wilson