So wird’s gemacht: Verwalten von Webfeedeinträgen (HTML)

[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation]

In diesem Thema erfahren Sie, wie Sie auf ein Dienstdokument zugreifen und die enthaltenen Feedressourcen mit dem Windows.Web.AtomPub-Namespace ändern. Dabei handelt es sich um die Windows-Runtime-Implementierung des Atom Publishing Protocol.

Voraussetzungen

In den folgenden Beispielen wird JavaScript verwendet. Diese Beispiele basieren auf dem AtomPub-Beispiel. Allgemeine Informationen zum Erstellen einer Windows-Runtime-App mit JavaScript finden Sie unter Erstellen Ihrer ersten Windows-Runtime-App mit JavaScript. Darüber hinaus werden in diesem Thema JavaScript-Zusagen zum Ausführen asynchroner Vorgänge verwendet. Weitere Informationen zu diesem Programmierungsmuster finden Sie unter Asynchrone Programmierung in JavaScript mit Zusagen.

Damit die Windows-Runtime-App im Netzwerk verwendet werden kann, müssen Sie alle erforderlichen Netzwerkfunktionen in der Projektdatei Package.appxmanifest festlegen. Wenn Ihre App als Client eine Verbindung mit Remotediensten im Internet herstellen muss, ist die Funktion Internet (Client) erforderlich. Wenn die App als Client eine Verbindung mit Remotediensten in einem Heim- oder Arbeitsplatznetzwerk herstellen muss, ist die Funktion Heim- oder Arbeitsplatznetzwerke erforderlich. Weitere Informationen finden Sie unter So wird's gemacht: Festlegen von Netzwerkfunktionen.

Anweisungen

1. Dienstdokumente

Bevor wir uns den Beispielcode ansehen, sollten Sie sich einen Überblick darüber verschaffen, wie Dienstdokumente zum Definieren der Struktur von Feedinhalten für einen Webdienst verwendet werden.

Das Dienstdokument kapselt mindestens ein Arbeitsbereichselement, das eine oder mehrere Sammlungen darstellt. Webpublikationen wie persönliche Blogs und Webseiten gelten also als Arbeitsbereiche, und die darin enthaltenen Sammlungen stellen einzelne Feeds dar (die jeweils eine Reihe von Einträgen enthalten).

Die folgende Syntax stellt ein kurzes Beispiel eines Dienstdokuments dar:

<?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>

Zum Abrufen eines Dienstdokuments übergeben Sie Uri an retrieveServiceDocumentAsync. Zum Abrufen, Bearbeiten oder Löschen einzelner Feedeinträge muss die App das abgerufene ServiceDocument auf die absoluten URIs der einzelnen Einträge hin analysieren.

2. Initialisieren des Clients mit Anmeldeinformationen für die Authentifizierung

In den folgenden Beispielen werden Klassen im Windows.Web.AtomPub-Namespace für Feedverwaltungsvorgänge und Klassen im Windows.Web.Syndication-Namespace zum Darstellen einzelner Feedelemente verwendet. Darüber hinaus verlangen die meisten Webdienste eine Authentifizierung. Die zugehörigen Features werden vom Windows.Security-Namespace bereitgestellt.

Das folgende Beispiel veranschaulicht das Festlegen der Anmeldeinformationen und die Einbindung dieser Daten bei der Initialisierung einer AtomPubClient-Instanz.


//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. Erstellen eines neuen Eintrags in einer Auflistung

Ein neuer Beitrag kann einer vorhandenen Auflistung durch das Erstellen eines neuen SyndicationItem-Objekts hinzugefügt werden. Dieses Objekt muss dann mit dem gewünschten Inhalt gefüllt werden. Wenn das SyndicationItem-Objekt fertig ist, übergeben Sie das Objekt, eine Kurzbeschreibung des Eintrags und den Feed-Uri an die createResourceAsync-Methode des AtomPubClient-Elements.

Der Uri-Konstruktor löst eine Ausnahme aus, wenn das an den Konstruktor übergebene uriString-Element kein gültiger URI ist. Daher überprüfen wir das uriString-Element mithilfe eines try/catch-Blocks.

Beim Aufrufen der meisten asynchronen Netzwerkmethoden müssen Sie Code zum Behandeln von Ausnahmen schreiben. Ihr Ausnahmehandler kann detailliertere Informationen zur Ursache abrufen, um die Ausnahme besser verstehen und entsprechende Entscheidungen treffen zu können. Weitere Informationen finden Sie unter So wird's gemacht: Behandeln von Ausnahmen in Netzwerk-Apps.

Die createResourceAsync-Methode löst eine Ausnahme aus, wenn keine Verbindung mit dem HTTP-Server hergestellt werden kann oder wenn das Uri-Objekt nicht auf einen gültigen AtomPub- oder RSS-Feed verweist. Im Beispielcode wird eine onError-Funktion verwendet, um etwaige Ausnahmen abzufangen und ausführlichere Informationen zur Ausnahme auszugeben, wenn ein Fehler auftritt.

// 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. Bearbeiten eines Eintrags in einer Auflistung

Zum Bearbeiten eines Eintrags in einer Auflistung übergeben Sie den zugehörigen Uri an die retrieveFeedAsync-Methode des SyndicationClient-Elements. Bereiten Sie ein SyndicationItem-Element mit den neuen Werten vor, und übergeben Sie das Objekt zusammen mit dem für das Abrufen des Eintrags verwendeten Uri an das updateResourceAsync-Element des AtomPubClient-Elements.

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. Löschen eines Eintrags aus einer Auflistung

Zum Löschen eines Eintrags aus einer Auflistung übergeben Sie die editUri-Eigenschaft aus der SyndicationItem-Instanz an die deleteResourceItemAsync-Methode der AtomPubClient-Instanz.

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);
    }

Zusammenfassung und nächste Schritte

In diesem Thema haben wir ein Dienstdokument abgerufen, neue Auflistungseinträge hinzugefügt, vorhandene Auflistungseinträge geändert und Auflistungseinträge in diesem Dokument gelöscht. Eine kurze Demo für einen einfachen Feedabruf finden Sie unter So wird's gemacht: Zugreifen auf einen Webfeed.

Verwandte Themen

Sonstige

Asynchrone Programmierung in JavaScript mit Zusagen

So wird's gemacht: Festlegen von Netzwerkfunktionen

So wird's gemacht: Behandeln von Ausnahmen in Netzwerk-Apps

So wird's gemacht: Zugreifen auf einen Webfeed

Roadmap für Windows-Runtime-Apps mit JavaScript

Referenzen

AtomPubClient

SyndicationItem

Windows.Web.AtomPub

Windows.Web.Syndication

Beispiele

AtomPub-Beispiel

Beispiel für die Veröffentlichung