Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
ważne interfejsy API
Pobieraj lub twórz najnowszą i najpopularniejszą zawartość internetową przy użyciu kanałów informacyjnych wygenerowanych zgodnie ze standardami RSS i Atom za pomocą funkcji z przestrzeni nazw Windows.Web.Syndication.
Note
Interfejsy API Windows.Web.Syndication i Windows.Web.AtomPub to interfejsy API środowisko wykonawcze systemu Windows (WinRT), które działają zarówno w aplikacjach klasycznych WinUI 3 (Zestaw SDK do aplikacji systemu Windows), jak i w aplikacjach UWP.
Co to jest źródło danych?
Kanał informacyjny sieci Web to dokument zawierający dowolną liczbę pojedynczych wpisów składających się z tekstu, linków i obrazów. Aktualizacje wprowadzone do kanału informacyjnego są w postaci nowych wpisów używanych do promowania najnowszej zawartości w Internecie. Użytkownicy zawartości mogą używać aplikacji czytnika kanałów informacyjnych do agregowania i monitorowania kanałów informacyjnych z dowolnej liczby poszczególnych autorów zawartości, szybko i wygodnie uzyskiwać dostęp do najnowszej zawartości.
Które standardy formatu kanału informacyjnego są obsługiwane?
Windows obsługuje pobieranie kanałów informacyjnych w standardzie RSS od wersji 0,91 do 2.0 oraz w standardzie Atom od wersji 0,3 do 1.0. Klasy w przestrzeni nazw Windows.Web.Syndication mogą definiować kanały informacyjne i elementy źródła danych, które mogą reprezentować zarówno elementy RSS, jak i Atom.
Ponadto formaty Atom 1.0 i RSS 2.0 umożliwiają dokumentom kanału informacyjnego używanie elementów lub atrybutów, które nie zostały zdefiniowane w oficjalnych specyfikacjach. Z czasem te elementy niestandardowe i atrybuty stały się sposobem definiowania informacji specyficznych dla domeny używanych przez inne formaty danych usługi internetowej, takie jak GData i OData. Aby obsługiwać tę dodaną funkcję, klasa SyndicationNode reprezentuje ogólne elementy XML. Korzystanie z SyndicationNode z klasami w przestrzeni nazw Windows.Data.Xml.Dom umożliwia aplikacjom dostęp do atrybutów, rozszerzeń i wszelkiej zawartości, jaką mogą one zawierać.
Należy pamiętać, że w przypadku publikowania zawartości syndykowanej implementacja systemu Windows protokołu publikowania Atom (Windows.Web.AtomPub) obsługuje tylko operacje na zawartości kanału zgodnie ze standardami Atom i Atom Publishing Protocol.
Korzystanie z treści syndykowanych z izolacją sieci
Funkcja izolacji sieci w Windows umożliwia deweloperowi kontrolowanie i ograniczanie dostępu do sieci przez aplikację Windows. Nie wszystkie aplikacje mogą wymagać dostępu do sieci. Jednak w przypadku tych aplikacji, które to robią, Windows zapewnia różne poziomy dostępu do sieci, które można włączyć, wybierając odpowiednie możliwości.
Izolacja sieci umożliwia deweloperowi zdefiniowanie dla każdej aplikacji zakresu wymaganego dostępu do sieci. Aplikacja bez zdefiniowanego odpowiedniego zakresu nie może uzyskać dostępu do określonego typu sieci i określonego typu żądania sieciowego (wychodzące żądania inicjowane przez klienta lub zarówno przychodzące żądania niezamówione, jak i wychodzące żądania inicjowane przez klienta). Możliwość ustawiania i wymuszania izolacji sieci gwarantuje, że jeśli aplikacja zostanie naruszona, będzie mogła uzyskiwać dostęp tylko do sieci, w których aplikacja jawnie uzyskała dostęp. Znacznie zmniejsza to zakres wpływu na inne aplikacje i Windows.
Izolacja sieci wpływa na wszystkie elementy klas w przestrzeniach nazw Windows.Web.Syndication i Windows.Web.AtomPub, które próbują uzyskać dostęp do sieci. Windows aktywnie wymusza izolację sieci. Wywołanie elementu klasy w przestrzeni nazw Windows.Web.Syndication lub Windows.Web.AtomPub, które skutkuje dostępem do sieci, może się nie powieść z powodu izolacji sieci, jeśli nie włączono odpowiedniej funkcji sieciowej.
Możliwości sieciowe aplikacji są konfigurowane w manifeście aplikacji podczas kompilowania aplikacji. Funkcje sieci są zwykle dodawane przy użyciu Visual Studio podczas tworzenia aplikacji. Możliwości sieci można również ustawić ręcznie w pliku manifestu aplikacji przy użyciu edytora tekstów.
Aby uzyskać bardziej szczegółowe informacje na temat izolacji sieci i możliwości sieci, zobacz sekcję "Możliwości" w temacie Podstawowe informacje dotyczące sieci .
Jak uzyskać dostęp do internetowego źródła danych
W tej sekcji pokazano, jak pobierać i wyświetlać kanał informacyjny sieci Web za pomocą klas z przestrzeni nazw Windows.Web.Syndication w aplikacji systemu Windows napisanej w języku C#.
Prerequisites
Aby upewnić się, że aplikacja Windows jest gotowa do użycia w sieci, należy ustawić wszystkie wymagane funkcje sieciowe w pliku package.appxmanifest projektu. Jeśli aplikacja musi łączyć się jako klient z usługami zdalnymi w Internecie, wymagana jest funkcja InternetClient . Aby uzyskać więcej informacji, zobacz sekcję "Możliwości" w temacie Podstawowe informacje dotyczące sieci .
Pobieranie zsynchronizowanej zawartości ze źródła danych internetowych
Teraz zapoznamy się z kodem, który pokazuje sposób pobierania kanału informacyjnego, a następnie wyświetli poszczególne elementy, które zawiera kanał informacyjny. Zanim będziemy mogli skonfigurować i wysłać żądanie, zdefiniujemy kilka zmiennych, których będziemy używać podczas tej operacji, i zainicjujemy instancję klasy SyndicationClient, która definiuje metody i właściwości używane do pobierania i wyświetlania kanału.
Konstruktor Uri zgłasza wyjątek, jeśli parametr uriString przekazany konstruktorowi nie jest prawidłowym identyfikatorem URI. Zatem sprawdzamy parametr uriString za pomocą bloku try/catch.
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
Przykłady języka JavaScript w tym artykule używają biblioteki WinJS (Windows Library for JavaScript), która jest starszą strukturą dla aplikacji JavaScript platformy UWP. Te przykłady są udostępniane tylko do celów referencyjnych i nie są zalecane w przypadku tworzenia nowych aplikacji.
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;
}
Następnie skonfigurujemy żądanie, ustawiając wszystkie wymagane poświadczenia serwera (właściwość ServerCredential ), poświadczenia serwera proxy (właściwość ProxyCredential ) i nagłówki HTTP (metoda SetRequestHeader ). Po skonfigurowaniu podstawowych parametrów żądania prawidłowy obiekt Uri, utworzony przy użyciu ciągu URI kanału dostarczonego przez aplikację. Następnie obiekt Uri jest przekazywany do funkcji RetrieveFeedAsync w celu zażądania źródła danych.
Zakładając, że żądana zawartość kanału informacyjnego została zwrócona, przykładowy kod iteruje za pośrednictwem każdego elementu kanału informacyjnego, wywołując funkcję displayCurrentItem (którą definiujemy obok), aby wyświetlić elementy i ich zawartość jako listę za pośrednictwem interfejsu użytkownika.
Aby obsługiwać wyjątki, należy napisać kod w przypadku wywoływania większości metod sieci asynchronicznych. Procedura obsługi wyjątków może pobrać bardziej szczegółowe informacje na temat przyczyny wyjątku, aby lepiej zrozumieć błąd i podejmować odpowiednie decyzje.
Metoda RetrieveFeedAsync zgłasza wyjątek, jeśli nie można nawiązać połączenia z serwerem HTTP lub obiekt URI nie wskazuje prawidłowego źródła danych AtomPub lub RSS. Przykładowy kod w języku JavaScript używa funkcji onError , aby przechwycić wszelkie wyjątki i wyświetlić bardziej szczegółowe informacje na temat wyjątku, jeśli wystąpi błąd.
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);
}
W poprzednim kroku funkcja RetrieveFeedAsync zwróciła żądaną zawartość kanału informacyjnego, a przykładowy kod przeszedł iterację za pośrednictwem dostępnych elementów kanału informacyjnego. Każdy z tych elementów jest reprezentowany przy użyciu obiektu SyndicationItem , który zawiera wszystkie właściwości elementu i zawartość zapewnianą przez odpowiedni standard syndykacji (RSS lub Atom). W poniższym przykładzie obserwujemy funkcję displayCurrentItem działającą przez każdy element i wyświetlając jej zawartość za pomocą różnych nazwanych elementów interfejsu użytkownika.
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.
Zgodnie z wcześniejszymi sugestiami typ zawartości reprezentowanej przez obiekt SyndicationItem będzie się różnić w zależności od standardu kanału informacyjnego (RSS lub Atom) zastosowanego do publikowania kanału informacyjnego. Na przykład kanał Atom może udostępniać listę współtwórców, ale kanał RSS nie. Jednak do elementów rozszerzeń zawartych w elemencie źródła danych, które nie są obsługiwane przez jeden standard (na przykład elementy rozszerzenia Dublin Core), można uzyskać dostęp przy użyciu właściwości SyndicationItem.ElementExtensions , a następnie wyświetlanej zgodnie z opisem w poniższym przykładowym kodzie.
//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
});
}