Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
viktiga API:er
Hämta eller skapa det mest aktuella och populära webbinnehållet med syndikerade feeds som genereras enligt RSS- och Atom-standarderna med hjälp av funktioner i Windows. Web.Syndication-namnrymd.
Note
Windows.Web.Syndication API:erna och Windows.Web.AtomPub är Windows Runtime (WinRT) API:er som fungerar i WinUI 3-skrivbordsappar (Windows App SDK) samt UWP-appar.
Vad är ett flöde?
En webbfeed är ett dokument som innehåller valfritt antal enskilda poster som består av text, länkar och bilder. Uppdateringar som görs i ett flöde är i form av nya poster som används för att höja upp det senaste innehållet på webben. Innehållskonsumenter kan använda en feedläsarapp för att aggregera och övervaka feeds från valfritt antal enskilda innehållsförfattare och få åtkomst till det senaste innehållet snabbt och bekvämt.
Vilka standarder för flödesformat stöds?
Windows stöder feedhämtning för RSS-formatstandarder från 0.91 till RSS 2.0 och Atom-standarder från 0.3 till 1.0. Klasser i Windows. Web.Syndication-namnområdet kan definiera feeds och feedobjekt som kan representera både RSS- och Atom-element.
Dessutom tillåter Både Atom 1.0- och RSS 2.0-format sina feeddokument att innehålla element eller attribut som inte definierats i de officiella specifikationerna. Med tiden har dessa anpassade element och attribut blivit ett sätt att definiera domänspecifik information som används av andra webbtjänstdataformat som GData och OData. För att stödja den här funktionen representerar klassen SyndicationNode allmänna XML-element. Använda SyndicationNode med klasser i Windows. Data.Xml.Dom-namnrymd, tillåter appar att komma åt attribut, tillägg och allt innehåll som de kan innehålla.
Observera att för publicering av syndikerat innehåll Windows implementeringen av Atom Publication Protocol (Windows. Web.AtomPub) stöder endast flödesinnehållsåtgärder enligt atom- och atompubliceringsstandarderna.
Använda syndikerat innehåll med nätverksisolering
Med funktionen för nätverksisolering i Windows kan en utvecklare styra och begränsa nätverksåtkomsten för en Windows app. Alla appar kan inte kräva åtkomst till nätverket. Men för de appar som gör det ger Windows olika åtkomstnivåer till nätverket som kan aktiveras genom att välja lämpliga funktioner.
Med nätverksisolering kan en utvecklare definiera omfånget för nödvändig nätverksåtkomst för varje app. En app utan lämpligt definierat omfång hindras från att komma åt den angivna typen av nätverk och en specifik typ av nätverksbegäran (utgående klientinitierade begäranden eller både inkommande oönskade begäranden och utgående klientinitierade begäranden). Möjligheten att ange och framtvinga nätverksisolering säkerställer att om en app komprometteras kan den bara komma åt nätverk där appen uttryckligen har beviljats åtkomst. Detta minskar avsevärt omfattningen av påverkan på andra program och på Windows.
Nätverksisolering påverkar alla klasselement i Windows. Web.Syndication och Windows. Web.AtomPub-namnområden som försöker komma åt nätverket. Windows framtvingar aktivt nätverksisolering. Ett anrop till ett klasselement i Windows. Web.Syndication eller Windows. Web.AtomPub-namnområdet som resulterar i nätverksåtkomst kan misslyckas på grund av nätverksisolering om lämplig nätverksfunktion inte har aktiverats.
Nätverksfunktionerna för en app konfigureras i appmanifestet när appen skapas. Nätverksfunktioner läggs vanligtvis till med hjälp av Visual Studio när appen utvecklas. Nätverksfunktioner kan också anges manuellt i appmanifestfilen med hjälp av en textredigerare.
Mer detaljerad information om nätverksisolering och nätverksfunktioner finns i avsnittet "Funktioner" i grunderna för nätverk .
Så här kommer du åt en webbfeed
Det här avsnittet visar hur du hämtar och visar en webbfeed med hjälp av klasser i Windows. Web.Syndication-namnrymd i din Windows app som skrivits i C#.
Förutsättningar
För att säkerställa att din Windows app är nätverksklar måste du ange alla nätverksfunktioner som behövs i projektet Package.appxmanifest-filen. Om din app behöver ansluta som en klient till fjärrtjänster på Internet krävs funktionen internetClient . Mer information finns i avsnittet "Funktioner" i avsnittet Grunderna för nätverk .
Hämta syndikerat innehåll från en webbfeed
Nu ska vi granska kod som visar hur du hämtar en feed och sedan visar varje enskilt objekt som feeden innehåller. Innan vi kan konfigurera och skicka begäran definierar vi några variabler som vi ska använda under åtgärden och initierar en instans av SyndicationClient, som definierar de metoder och egenskaper som vi ska använda för att hämta och visa feeden.
Uri-konstruktorn utlöser ett undantag om uriString som skickas till konstruktorn inte är en giltig URI. Därför validerar vi uriString med hjälp av ett try/catch-block.
Windows.Web.Syndication.SyndicationClient client = new Windows.Web.Syndication.SyndicationClient();
Windows.Web.Syndication.SyndicationFeed feed;
// The URI is validated by catching exceptions thrown by the Uri constructor.
Uri uri = null;
// Use your own uriString for the feed you are connecting to.
string uriString = "";
try
{
uri = new Uri(uriString);
}
catch (Exception ex)
{
// Handle the invalid URI here.
}
Note
JavaScript-exemplen i den här artikeln använder WinJS (Windows Library for JavaScript), som är ett äldre ramverk för UWP JavaScript-appar. Dessa exempel tillhandahålls endast som referens och rekommenderas inte för ny apputveckling.
var currentFeed = null;
var currentItemIndex = 0;
var client = new Windows.Web.Syndication.SyndicationClient();
// The URI is validated by catching exceptions thrown by the Uri constructor.
var uri = null;
try {
uri = new Windows.Foundation.Uri(uriString);
} catch (error) {
WinJS.log && WinJS.log("Error: Invalid URI");
return;
}
Därefter konfigurerar vi begäran genom att ange serverautentiseringsuppgifter (egenskapen ServerCredential ), proxyautentiseringsuppgifter (egenskapen ProxyCredential ) och HTTP-huvuden (metoden SetRequestHeader ) som behövs. Med de grundläggande parametrarna för begäran konfigurerade, ett giltigt URI-objekt , som skapats med hjälp av en feed-URI-sträng som tillhandahålls av appen. Uri-objektet skickas sedan till funktionen RetrieveFeedAsync för att begära feeden.
Förutsatt att önskat flödesinnehåll returneras itererar exempelkoden genom varje flödesobjekt och anropar displayCurrentItem (som vi definierar härnäst) för att visa objekt och deras innehåll som en lista via användargränssnittet.
Du måste skriva kod för att hantera undantag när du anropar de flesta asynkrona nätverksmetoder. Undantagshanteraren kan hämta mer detaljerad information om orsaken till undantaget för att bättre förstå felet och fatta lämpliga beslut.
Metoden RetrieveFeedAsync genererar ett undantag om en anslutning inte kunde upprättas med HTTP-servern eller om URI-objektet inte pekar på en giltig AtomPub- eller RSS-feed. JavaScript-exempelkoden använder en onError-funktion för att fånga eventuella undantag och skriva ut mer detaljerad information om undantaget om ett fel inträffar.
try
{
// Although most HTTP servers do not require User-Agent header,
// others will reject the request or return a different response if this header is missing.
// Use the setRequestHeader() method to add custom headers.
client.SetRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
feed = await client.RetrieveFeedAsync(uri);
// Retrieve the title of the feed and store it in a string.
string title = feed.Title.Text;
// Iterate through each feed item.
foreach (Windows.Web.Syndication.SyndicationItem item in feed.Items)
{
displayCurrentItem(item);
}
}
catch (Exception ex)
{
// Handle the exception here.
}
function onError(err) {
WinJS.log && WinJS.log(err, "sample", "error");
// Match error number with an ErrorStatus value.
// Use Windows.Web.WebErrorStatus.getStatus() to retrieve HTTP error status codes.
var errorStatus = Windows.Web.Syndication.SyndicationError.getStatus(err.number);
if (errorStatus === Windows.Web.Syndication.SyndicationErrorStatus.invalidXml) {
displayLog("An invalid XML exception was thrown. Please make sure to use a URI that points to a RSS or Atom feed.");
}
}
// Retrieve and display feed at given feed address.
function retreiveFeed(uri) {
// Although most HTTP servers do not require User-Agent header,
// others will reject the request or return a different response if this header is missing.
// Use the setRequestHeader() method to add custom headers.
client.setRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
client.retrieveFeedAsync(uri).done(function (feed) {
currentFeed = feed;
WinJS.log && WinJS.log("Feed download complete.", "sample", "status");
var title = "(no title)";
if (currentFeed.title) {
title = currentFeed.title.text;
}
document.getElementById("CurrentFeedTitle").innerText = title;
currentItemIndex = 0;
if (currentFeed.items.size > 0) {
displayCurrentItem();
}
// List the items.
displayLog("Items: " + currentFeed.items.size);
}, onError);
}
I föregående steg returnerade RetrieveFeedAsync det begärda feedinnehållet och exempelkoden började iterera genom tillgängliga flödesobjekt. Vart och ett av dessa objekt representeras med hjälp av ett SyndicationItem-objekt som innehåller alla objektegenskaper och innehåll som tillhandahålls av relevant syndikeringsstandard (RSS eller Atom). I följande exempel ser vi funktionen displayCurrentItem arbeta igenom varje objekt och visa dess innehåll via olika namngivna gränssnittselement.
private void displayCurrentItem(Windows.Web.Syndication.SyndicationItem item)
{
string itemTitle = item.Title == null ? "No title" : item.Title.Text;
string itemLink = item.Links == null ? "No link" : item.Links.FirstOrDefault().ToString();
string itemContent = item.Content == null ? "No content" : item.Content.Text;
//displayCurrentItem is continued below.
function displayCurrentItem() {
var item = currentFeed.items[currentItemIndex];
// Display item number.
document.getElementById("Index").innerText = (currentItemIndex + 1) + " of " + currentFeed.items.size;
// Display title.
var title = "(no title)";
if (item.title) {
title = item.title.text;
}
document.getElementById("ItemTitle").innerText = title;
// Display the main link.
var link = "";
if (item.links.size > 0) {
link = item.links[0].uri.absoluteUri;
}
var linkElement = document.getElementById("Link");
linkElement.innerText = link;
linkElement.href = link;
// Display the body as HTML.
var content = "(no content)";
if (item.content) {
content = item.content.text;
}
else if (item.summary) {
content = item.summary.text;
}
document.getElementById("WebView").innerHTML = window.toStaticHTML(content);
//displayCurrentItem is continued below.
Som tidigare nämnts skiljer sig den typ av innehåll som representeras av ett SyndicationItem-objekt beroende på vilken feedstandard (RSS eller Atom) som används för att publicera feeden. Till exempel kan ett Atom-flöde tillhandahålla en lista över deltagare, men det är inte ett RSS-flöde. Tilläggselement som ingår i ett feedobjekt som inte stöds av någon av standardelementen (till exempel Dublin Core-tilläggselement) kan dock nås med hjälp av egenskapen SyndicationItem.ElementExtensions och visas sedan enligt följande exempelkod.
//displayCurrentItem continued.
string extensions = "";
foreach (Windows.Web.Syndication.SyndicationNode node in item.ElementExtensions)
{
string nodeName = node.NodeName;
string nodeNamespace = node.NodeNamespace;
string nodeValue = node.NodeValue;
extensions += nodeName + "\n" + nodeNamespace + "\n" + nodeValue + "\n";
}
this.listView.Items.Add(itemTitle + "\n" + itemLink + "\n" + itemContent + "\n" + extensions);
}
// displayCurrentItem function continued.
var bindableNodes = [];
for (var i = 0; i < item.elementExtensions.size; i++) {
var bindableNode = {
nodeName: item.elementExtensions[i].nodeName,
nodeNamespace: item.elementExtensions[i].nodeNamespace,
nodeValue: item.elementExtensions[i].nodeValue,
};
bindableNodes.push(bindableNode);
}
var dataList = new WinJS.Binding.List(bindableNodes);
var listView = document.getElementById("extensionsListView").winControl;
WinJS.UI.setOptions(listView, {
itemDataSource: dataList.dataSource
});
}
Windows developer