RSS-Feeds sind kaum mehr wegzudenken und ein effektives Tool, um das Zielpublikum über News zu informieren. Daher ist es nicht verwunderlich, dass viele SharePoint-Nutzer auch auf ihren Seiten einen RSS-Feed einbinden möchten. Für Teamseiten in Modern Pages ist dies nicht weiter schwer. Denn dafür gibt es einen RSS Web Part, der sehr einfach zu bedienen ist. Anders verhält es sich mit Kommunikationswebseiten, die bisher noch so ein Feature vermissen. Wir haben uns daher eine unkomplizierte Lösung überlegt, wie man RSS-Feeds in SharePoint Kommunikationswebseiten integrieren kann.

RSS-Feeds in SharePoint Kommunikationswebseiten

Einbinden von RSS-Feeds in SharePoint Kommunikationswebseiten mit PowerShell

Die Anfrage dafür kam von einem unserer Kunden, der einen personalisierten Pressespiegel der Austria Presse Agentur zugekauft hat. Dadurch erhält der Kunde einen Link mit einem auf seine Bedürfnisse zugeschnittenen RSS-Feed. Wie beim Web Part für Teamseiten soll der Link, der den RSS-Feed enthält, ausgelesen und so verarbeitet werden, dass auf der Startseite die darin enthaltenen Nachrichten in einer Liste angezeigt werden. Wir waren (und sind es noch immer) doch sehr erstaunt, dass Microsoft hier noch kein Standardfeature eingeführt hat. Doch dafür gibt es ja Smarter Business Solutions! 😀 Ein wesentlicher Vorteil unserer Lösung ist, dass man die News, und in dem Fall auch die Auswahl der APA, über einen Genehmigungs-Workflow „moderieren“ kann. Dies ist beim RSS Webpart leider nicht der Fall, da hier alle Beiträge des Feeds ungefiltert angezeigt werden.

Unsere Lösung zur Integration eines RSS-Feeds in SharePoint Kommunikationswebseiten haben wir in einem recht simplen Skript mit PnP PowerShell umgesetzt.

Der Ablauf

  1. Über REST den Inhalt des RSS-Feed auslesen
  2. Die gewünschten Informationen aus dem RSS-Feed parsen
  3. Gefundene Bilder in einen neuen Ordner in SharePoint speichern
  4. Für jedes Item im RSS-Feed eine neue Seite mit den Informationen anlegen und veröffentlichen

Auslesen und Parsen des RSS-Feeds

Um einen RSS-Feed in SharePoint Kommunikationswebseiten einbinden zu können, müssen wir diesen zuvor auslesen. Dafür brauchen wir die Url zum RSS-Feed, die wir mit Invoke-RestMethod aufrufen. Hier erhalten wir den gesamten Inhalt als Array von XML-Elementen:

 

$rssFeed = Invoke-RestMethod -Uri $rssFeedUrl

Diese XML-Elemente stellen die einzelnen Nachrichten dar. Im nächsten Schritt gehen wir also jede Nachricht (Item) durch und holen uns folgende Informationen:

  • Autor
  • GUID
  • ItemOrigin (Url zum Nachrichtenbeitrag)
  • Inhalt
  • Veröffentlichungsdatum

Hier möchten wir noch anmerken, dass die Item-Knoten mancher RSS-Feeds unterschiedliche Unterknoten haben und daher das Parsing individuell entwickelt werden muss.

 

$authorPrefix = $rssFeedItem.author
$title = $rssFeedItem.title
$guid = $rssFeedItem.guid
$sourceUrl = $rssFeedItem.itemOrigin
$content = $rssFeedItem.encoded.'#cdata-section'
$publishedDate = [datetime]::Parse($rssFeedItem.datetime)

 

Da Beiträge auch Bilder oder andere Medien enthalten können und wie für unsere RSS-Feeds in SharePoint Kommunikationswebseiten auch ein Beitragsbild brauchen, müssen wir diese auch parsen. Hierfür speichern wir uns die Nachrichtenseite als HTML und suchen nach dem Metatag-Property og:image. Dessen content-Attribut enthält den Link zum Beitragsbild, den wir später für die Darstellung unserer SharePoint-Nachrichten brauchen.

In unserem Fall sind im Feed nicht nur Links zu Online-Artikeln vorhanden, sondern auch Links zu PDF-Dateien. Hier funktioniert der Ansatz über die Metatags nicht, aber wir können uns die benötigten Informationen ganz einfach aus dem RSS-Feed Item holen:

 

if($sourceUrl) {
	$result = Invoke-RestMethod -Uri $sourceUrl
	$html = New-Object -ComObject "HTMLFile"
	$html.IHTMLDocument2_write($result)

	$htmlTag = $html.childNodes | Where-Object {$_.nodename -like 'HTML'} 
	$headTag = $htmlTag.childNodes | Where-Object {$_.nodename -like 'HEAD'}
	$metaTags = $headTag.childNodes | Where-Object {$_.nodename -like 'META'}
				
	$ogimageUrl = $MetaTags | Where-Object { $_.outerHTML -like '*property="og:image"*' } | Select-Object -ExpandProperty content
}
else {
	if($rssFeedItem.content.thumbnail.count -gt 1) {
		$ogImageUrl = $rssFeedItem.content.thumbnail[0].url
	}
	else {
		$ogImageUrl = $rssFeedItem.content.thumbnail.url
	}

	$sourceUrl = $rssFeedItem.enclosure.url
}

Nachrichten erstellen und RSS-Feed in SharePoint Kommunikationwebseite einbinden

In diesem Schritt legen wir unter den SiteAssets für jeden Artikel einen Ordner an und laden dort das gefundene Bild hoch. Wurde kein Bild gefunden, so nehmen wir ein passendes Ersatzbild.

Als letzten Schritt erstellen wir auch schon die Seite für unsere News, indem wir eine SitePage mit dem LayoutType Article und den zuvor extrahierten Informationen anlegen. Abschließend veröffentlichen wir die Page, damit alle anderen Benutzer sie auch sehen können.

Und hier haben wir auch schon unseren RSS-Feed in der SharePoint Kommunikationswebseite:

RSS-Feeds in SharePoint Kommunikationswebseiten: eingebundener RSS-Feed

Apropos Nachrichten: erfahre außerdem, wie wir das Schalten wichtiger Nachrichten in SharePoint Modern Pages umgesetzt haben.

Haben wir dein Interesse geweckt?

Das komplette Skript stellen wir dir gerne gerne zur Verfügung – hinterlasse uns dafür einen Kommentar oder schreibe uns!

Hast du noch Fragen bezüglich des Einbindens von RSS-Feeds in SharePoint Kommunikationswebseiten oder eine ähnliche Anforderung? Dann zögere nicht und nimm Kontakt mit uns auf!

Kontaktiere uns