Partager via


Comment gérer les entrées de flux Web (HTML)

[ Cet article est destiné aux développeurs de Windows 8.x et Windows Phone 8.x qui créent des applications Windows Runtime. Si vous développez une application pour Windows 10, voir la Documentation ]

Cette rubrique montre comment accéder à un document de service et modifier les ressources de flux qu’il contient en utilisant l’espace de noms Windows.Web.AtomPub, qui est l’implémentation Windows Runtime du protocole Atom Publishing.

Prérequis

Les exemples suivants utilisent JavaScript et reposent sur l’exemple de la fonctionnalité AtomPub. Pour obtenir une aide générale sur la création d’une application Windows Runtime en JavaScript, voir Créer votre première application Windows Runtime en JavaScript. De plus, les promesses JavaScript sont utilisées dans cette rubrique pour mener des opérations asynchrones. Pour plus d’informations sur ce modèle de programmation, voir Programmation asynchrone en JavaScript à l’aide de promesses.

Pour vous assurer que votre application Windows Runtime est prête à être utilisée en réseau, vous devez définir les fonctionnalités réseau nécessaires dans le fichier Package.appxmanifest du projet. Si votre application doit se connecter en qualité de client à des services distants sur Internet, la fonctionnalité Internet (client) est nécessaire. Si l’application doit se connecter en qualité de client à des services distants sur un réseau domestique ou professionnel, la fonctionnalité Réseau domestique/professionnel est nécessaire. Pour plus d’informations, voir Comment définir les fonctionnalités réseau.

Instructions

1. Documents de service

Avant de passer en revue l’exemple de code, il est utile de savoir comment les documents de service sont utilisés pour définir la structure du contenu de flux pour un service Web.

Le document de service intègre au moins un élément espace de travail, qui représente une ou plusieurs collections. En d’autres termes, les publications Web telles que les pages Web et les blogs personnels sont considérées comme étant des espaces de travail. Les collections contenues représentent, quant à elle, des flux individuels, chacun contenant un certain nombre d’entrées.

La syntaxe suivante est un bref exemple de document de service :

<?xml version="1.0" encoding='utf-8'?>
<service xmlns="http://www.w3.org/2007/app"
         xmlns:atom="http://www.w3.org/2005/Atom">
    <workspace>
        <atom:title>Main Site</atom:title>
        <collection
            href="http://example.org/blog/main" >
            <atom:title>My Blog Entries</atom:title>
            <categories
               href="http://example.com/cats/forMain.cats" />
        </collection>
        <collection
            href="http://example.org/blog/pic" >
            <atom:title>Pictures</atom:title>
            <accept>image/png</accept>
            <accept>image/jpeg</accept>
            <accept>image/gif</accept>
        </collection>
    </workspace>
</service>

Pour récupérer un document de service, passez l’Uri associé à la méthode retrieveServiceDocumentAsync. Pour récupérer, modifier ou supprimer des entrées de flux spécifiques, une application devra analyser un objet ServiceDocument récupéré afin d’identifier les URI absolus associés à des entrées individuelles.

2. Initialisation du client avec des informations d’authentification

Les exemples suivants utilisent des classes de l’espace de noms Windows.Web.AtomPub pour les opérations de gestion de flux, et des classes de l’espace de noms Windows.Web.Syndication pour représenter des éléments de flux individuels. Par ailleurs, la plupart des services de publication exigent une authentification, qui est fournie par l’espace de noms Windows.Security.

L’exemple suivant montre comment définir les informations d’identification et les inclure dans l’initialisation d’une instance de AtomPubClient.


//define some variables

// The default values for the site.
var baseUri = "http://<Your Wordpress Site>.wordpress.com/";
var user = "";
var password = "";

// The default Service Document and Edit 'URIs'
var editUri = "./wp-app.php/posts";
var serviceDocUri = "./wp-app.php/service";
var feedUri = "./?feed=atom";
var currentFeed = null;
var currentItemIndex = 0;
        
var client;

var item;

// Get current credentialS and create the AtomPub client
function createClient() {
    client = new Windows.Web.AtomPub.AtomPubClient();
    // Don't save the results to the client's cache
    client.bypassCacheOnRetrieve = true;

    if ((user !== "") && (password !== "")) {
        var credential = new Windows.Security.Credentials.PasswordCredential();
        credential.userName = user;
        credential.password = password;
        client.serverCredential = credential;
    }
    else {
        client.serverCredential = null;
    }
}

3. Création d’une publication dans une collection

Une nouvelle publication peut être ajoutée à une collection existante en créant un objet SyndicationItem et en le remplissant avec le contenu souhaité. Quand SyndicationItem est prêt, passez l’objet, une courte chaîne décrivant l’entrée et l’Uri du flux à la méthode createResourceAsync sur AtomPubClient.

Le constructeur Uri lève une exception si le uriString passé au constructeur n’est pas un URI valide. Ainsi, nous validons uriString à l’aide d’un bloc try/catch.

Vous devez écrire du code capable de gérer les exceptions au moment où vous appelez la plupart des méthodes réseau asynchrones. Votre gestionnaire d’exceptions peut récupérer des informations plus détaillées sur la cause de l’exception dans le but d’analyser l’échec et de prendre des décisions appropriées. Pour plus d’informations, voir Comment gérer les exceptions dans les applications réseau.

La méthode createResourceAsync lève une exception si aucune connexion n’a pu être établie avec le serveur HTTP ou si l’Uri ne pointe pas vers un flux AtomPub ou RSS valide. L’exemple de code utilise une fonction onError pour intercepter les exceptions, et affiche des informations plus détaillées sur l’exception si une erreur se produit.

// Called when an async function generates an error.
function onError(err) {
    displayError(err);

    // Match error number with a WebErrorStatus value, in order to deal
    // with a specific error.
    var errorStatus = Windows.Web.WebError.getStatus(err.number);
    if (errorStatus === Windows.Web.WebErrorStatus.unauthorized) {
        displayLog("Wrong username or password!");
    }
}

function createPost (uriString, postTitle, postContent, postSummary, postAuthor) {

    var resourceUri;
    try {
        resourceUri = new Windows.Foundation.Uri(uriString);
    } catch (error) {
        displayLog("Error: Invalid URI");
    return;

    var syndicationItem;

    item = new Windows.Web.Syndication.SyndicationItem();
    item.title = new Windows.Web.Syndication.SyndicationText(postTitle);
    item.summary = new Windows.Web.Syndication.SyndicationText(postSummary);
    item.content = new Windows.Web.Syndication.SyndicationContent(postContent, Windows.Web.Syndication.SyndicationTextType.Text);
    item.authors[0] = new Windows.Web.Syndication.SyndicationPerson(postAuthor);
    // Note: Also other item fields can be set such as 'syndicationItem.Categories[0]'

    return client.createResourceAsync(resourceUri, item.title.text, item);
}).done(function (result) {
    if (result) {
        displayLog("Posted at " + result.editUri.displayUri);
        displayLog("New post created.");
    }
 }, onError);

4. Modification d’une publication dans une collection

Pour modifier une entrée existante dans une collection, passez l’Uri associé à la méthode retrieveFeedAsync sur SyndicationClient. Préparez SyndicationItem avec de nouvelles valeurs et passez l’objet à la méthode updateResourceAsync sur AtomPubClient avec l’Uri utilisé pour récupérer l’entrée.

function editPost (uriString, postTitle, postContent, postSummary, postAuthor) {

    var resourceUri;
    try {
        resourceUri = new Windows.Foundation.Uri(uriString);
    } catch (error) {
        displayLog("Error: Invalid URI");
    return;

    var updatedItem = new Windows.Web.Syndication.SyndicationItem();
    updatedItem.title = new Windows.Web.Syndication.SyndicationText(postTitle);
    updatedItem.summary = new Windows.Web.Syndication.SyndicationText(postSummary);
    updatedItem.content = new Windows.Web.Syndication.SyndicationContent(postContent, Windows.Web.Syndication.SyndicationTextType.Text);
    updatedItem.authors[0] = new Windows.Web.Syndication.SyndicationPerson(postAuthor);
    // Note: Also other item fields can be set such as 'syndicationItem.Categories[0]'

    client.updateResourceAsync(resourceUri, updatedItem).done(function () {
        displayLog("Updating item completed.");
    }
 }, onError);
}

5. Suppression d’une publication dans une collection

Pour supprimer une entrée d’une collection, passez la propriété editUri de l’instance de SyndicationItem à la méthode deleteResourceItemAsync de l’instance de AtomPubClient.

function deletePost(uriString, currentFeed) {

    var resourceUri;
    try {
        resourceUri = new Windows.Foundation.Uri(uriString);
    } catch (error) {
        displayLog("Error: Invalid URI");
    return;

   // If we retrieve the feed via the resourceUri then we will be logged in and will be
   // able to modify/delete the resource.

   client.retrieveFeedAsync(resourceUri).done(function (feed) {
       currentFeed = feed;
       currentItemIndex = 0;

       displayLog("Got feed");
       var title = "(no title)";
       if (currentFeed.title) {
           title = currentFeed.title.text;
       }
       displayLog("Title: " + title);

       var currentItem = getCurrentItem();
       if (currentItem) {
           displayLog("EditUri: " + currentItem.editUri);
       }

       displayStatus("Fetching feed completed.");
   }, onError);
    
   client.deleteResourceItemAsync(currentItem).done(function() {
       displayLog("Deleting item completed.");
    
       // Our feed is now out of date.  Re-fetch the feed before deleting something else.
       currentFeed = null;
    }, onError);
    }

Récapitulatif et étapes suivantes

Dans cette rubrique, nous avons récupéré un document de service, ajouté de nouvelles entrées de collection, modifié des entrées de collection existantes et supprimé les entrées de collection du document en question. Si vous souhaitez une brève démonstration de la procédure de base de récupération de flux, voir Comment accéder à un flux Web.

Rubriques associées

Autre

Programmation asynchrone en JavaScript à l’aide de promesses

Comment définir les fonctionnalités réseau

Comment gérer les exceptions dans les applications réseau

Comment accéder à un flux Web

Feuille de route pour les applications Windows Runtime en JavaScript

Référence

AtomPubClient

SyndicationItem

Windows.Web.AtomPub

Windows.Web.Syndication

Exemples

Exemple de la fonctionnalité AtomPub

Exemple de syndication