Ich muss einen RSS-Feed (XML-Version 2.0) analysieren und die analysierten Details auf einer HTML-Seite anzeigen.
Ich muss einen RSS-Feed (XML-Version 2.0) analysieren und die analysierten Details auf einer HTML-Seite anzeigen.
Antworten:
(Empfehlen Sie das nicht wirklich, siehe die anderen Optionen.)
jQuery.getFeed({
url : FEED_URL,
success : function (feed) {
console.log(feed.title);
// do more stuff here
}
});
$.get(FEED_URL, function (data) {
$(data).find("entry").each(function () { // or "item" or whatever suits your feed
var el = $(this);
console.log("------------------------");
console.log("title : " + el.find("title").text());
console.log("author : " + el.find("author").text());
console.log("description: " + el.find("description").text());
});
});
$.ajax({
url : document.location.protocol + '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&callback=?&q=' + encodeURIComponent(FEED_URL),
dataType : 'json',
success : function (data) {
if (data.responseData.feed && data.responseData.feed.entries) {
$.each(data.responseData.feed.entries, function (i, e) {
console.log("------------------------");
console.log("title : " + e.title);
console.log("author : " + e.author);
console.log("description: " + e.description);
});
}
}
});
Das bedeutet jedoch, dass Sie darauf angewiesen sind, dass sie online und erreichbar sind.
Sobald Sie die benötigten Informationen erfolgreich aus dem Feed extrahiert haben, können Sie DocumentFragment
s erstellen (mit document.createDocumentFragment()
den Elementen (erstellt mit document.createElement()
), die Sie einfügen möchten, um Ihre Daten anzuzeigen.
Wählen Sie das gewünschte Containerelement auf der Seite aus und hängen Sie Ihre Dokumentfragmente daran an. Verwenden Sie einfach innerHTML, um den Inhalt vollständig zu ersetzen.
Etwas wie:
$('#rss-viewer').append(aDocumentFragmentEntry);
oder:
$('#rss-viewer')[0].innerHTML = aDocumentFragmentOfAllEntries.innerHTML;
Verwenden Sie den Feed dieser Frage , der zum jetzigen Zeitpunkt Folgendes enthält:
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:re="http://purl.org/atompub/rank/1.0">
<title type="text">How to parse a RSS feed using javascript? - Stack Overflow</title>
<link rel="self" href="https://stackoverflow.com/feeds/question/10943544" type="application/atom+xml" />
<link rel="hub" href="http://pubsubhubbub.appspot.com/" />
<link rel="alternate" href="https://stackoverflow.com/q/10943544" type="text/html" />
<subtitle>most recent 30 from stackoverflow.com</subtitle>
<updated>2012-06-08T06:36:47Z</updated>
<id>https://stackoverflow.com/feeds/question/10943544</id>
<creativeCommons:license>http://www.creativecommons.org/licenses/by-sa/3.0/rdf</creativeCommons:license>
<entry>
<id>https://stackoverflow.com/q/10943544</id>
<re:rank scheme="http://stackoverflow.com">2</re:rank>
<title type="text">How to parse a RSS feed using javascript?</title>
<category scheme="https://stackoverflow.com/feeds/question/10943544/tags" term="javascript"/><category scheme="https://stackoverflow.com/feeds/question/10943544/tags" term="html5"/><category scheme="https://stackoverflow.com/feeds/question/10943544/tags" term="jquery-mobile"/>
<author>
<name>Thiru</name>
<uri>https://stackoverflow.com/users/1126255</uri>
</author>
<link rel="alternate" href="/programming/10943544/how-to-parse-a-rss-feed-using-javascript" />
<published>2012-06-08T05:34:16Z</published>
<updated>2012-06-08T06:35:22Z</updated>
<summary type="html">
<p>I need to parse the RSS-Feed(XML version2.0) using XML and I want to display the parsed detail in HTML page, I tried in many ways. But its not working. My system is running under proxy, since I am new to this field, I don't know whether it is possible or not. If any one knows please help me on this. Thanks in advance.</p>
</summary>
</entry>
<entry>
<id>https://stackoverflow.com/questions/10943544/-/10943610#10943610</id>
<re:rank scheme="http://stackoverflow.com">1</re:rank>
<title type="text">Answer by haylem for How to parse a RSS feed using javascript?</title>
<author>
<name>haylem</name>
<uri>https://stackoverflow.com/users/453590</uri>
</author>
<link rel="alternate" href="/programming/10943544/how-to-parse-a-rss-feed-using-javascript/10943610#10943610" />
<published>2012-06-08T05:43:24Z</published>
<updated>2012-06-08T06:35:22Z</updated>
<summary type="html"><h1>Parsing the Feed</h1>
<h3>With jQuery's jFeed</h3>
<p>Try this, with the <a href="http://plugins.jquery.com/project/jFeed" rel="nofollow">jFeed</a> <a href="http://www.jquery.com/" rel="nofollow">jQuery</a> plug-in</p>
<pre><code>jQuery.getFeed({
url : FEED_URL,
success : function (feed) {
console.log(feed.title);
// do more stuff here
}
});
</code></pre>
<h3>With jQuery's Built-in XML Support</h3>
<pre><code>$.get(FEED_URL, function (data) {
$(data).find("entry").each(function () { // or "item" or whatever suits your feed
var el = $(this);
console.log("------------------------");
console.log("title : " + el.find("title").text());
console.log("author : " + el.find("author").text());
console.log("description: " + el.find("description").text());
});
});
</code></pre>
<h3>With jQuery and the Google AJAX APIs</h3>
<p>Otherwise, <a href="https://developers.google.com/feed/" rel="nofollow">Google's AJAX Feed API</a> allows you to get the feed as a JSON object:</p>
<pre><code>$.ajax({
url : document.location.protocol + '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&amp;num=10&amp;callback=?&amp;q=' + encodeURIComponent(FEED_URL),
dataType : 'json',
success : function (data) {
if (data.responseData.feed &amp;&amp; data.responseData.feed.entries) {
$.each(data.responseData.feed.entries, function (i, e) {
console.log("------------------------");
console.log("title : " + e.title);
console.log("author : " + e.author);
console.log("description: " + e.description);
});
}
}
});
</code></pre>
<p>But that means you're relient on them being online and reachable.</p>
<hr>
<h1>Building Content</h1>
<p>Once you've successfully extracted the information you need from the feed, you need to create document fragments containing the elements you'll want to inject to display your data.</p>
<hr>
<h1>Injecting the content</h1>
<p>Select the container element that you want on the page and append your document fragments to it, and simply use innerHTML to replace its content entirely.</p>
</summary>
</entry></feed>
Aufruf:
$.get('https://stackoverflow.com/feeds/question/10943544', function (data) {
$(data).find("entry").each(function () { // or "item" or whatever suits your feed
var el = $(this);
console.log("------------------------");
console.log("title : " + el.find("title").text());
console.log("author : " + el.find("author").text());
console.log("description: " + el.find("description").text());
});
});
Druckt aus:
------------------------
title : How to parse a RSS feed using javascript?
author :
Thiru
https://stackoverflow.com/users/1126255
description:
------------------------
title : Answer by haylem for How to parse a RSS feed using javascript?
author :
haylem
https://stackoverflow.com/users/453590
description:
Aufruf:
$.ajax({
url : document.location.protocol + '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&callback=?&q=' + encodeURIComponent('https://stackoverflow.com/feeds/question/10943544'),
dataType : 'json',
success : function (data) {
if (data.responseData.feed && data.responseData.feed.entries) {
$.each(data.responseData.feed.entries, function (i, e) {
console.log("------------------------");
console.log("title : " + e.title);
console.log("author : " + e.author);
console.log("description: " + e.description);
});
}
}
});
Druckt aus:
------------------------
title : How to parse a RSS feed using javascript?
author : Thiru
description: undefined
------------------------
title : Answer by haylem for How to parse a RSS feed using javascript?
author : haylem
description: undefined
Eine weitere veraltete Option (dank @daylight) , die für mich am einfachsten ist (diese verwende ich für SpokenToday.info ):
Die Google Feed API ohne Verwendung von JQuery und mit nur 2 Schritten:
Importieren Sie die Bibliothek:
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("feeds", "1");</script>
Feeds suchen / laden ( Dokumentation ):
var feed = new google.feeds.Feed('http://www.google.com/trends/hottrends/atom/feed?pn=p1');
feed.load(function (data) {
// Parse data depending on the specified response format, default is JSON.
console.dir(data);
});
Überprüfen Sie zum Analysieren von Daten die Dokumentation zum Antwortformat .
document.getElementById('image').style.backgroundImage = "url('" + src + "')";
Wenn Sie nach einer einfachen und kostenlosen Alternative zur Google Feed-API für Ihr RSS-Widget suchen, ist rss2json.com möglicherweise eine geeignete Lösung dafür.
Sie können versuchen, anhand der folgenden API-Dokumentation zu sehen, wie es mit einem Beispielcode funktioniert :
google.load("feeds", "1");
function initialize() {
var feed = new google.feeds.Feed("https://news.ycombinator.com/rss");
feed.load(function(result) {
if (!result.error) {
var container = document.getElementById("feed");
for (var i = 0; i < result.feed.entries.length; i++) {
var entry = result.feed.entries[i];
var div = document.createElement("div");
div.appendChild(document.createTextNode(entry.title));
container.appendChild(div);
}
}
});
}
google.setOnLoadCallback(initialize);
<html>
<head>
<script src="https://rss2json.com/gfapi.js"></script>
</head>
<body>
<p><b>Result from the API:</b></p>
<div id="feed"></div>
</body>
</html>
Für alle anderen, die dies lesen (ab 2019), funktionieren die meisten JS RSS-Leseimplementierungen leider nicht. Erstens wurde die Google-API heruntergefahren, sodass dies keine Option mehr ist. Aufgrund der CORS-Sicherheitsrichtlinie können Sie RSS-Feeds jetzt im Allgemeinen nicht domänenübergreifend anfordern.
Anhand des Beispiels unter https://www.raymondcamden.com/2015/12/08/parsing-rss-feeds-in-javascript-options (2015) erhalte ich Folgendes:
Access to XMLHttpRequest at 'https://feeds.feedburner.com/raymondcamdensblog?format=xml' from origin 'MYSITE' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Dies ist korrekt und stellt eine Sicherheitsmaßnahme für die End-Website dar. Dies bedeutet jedoch, dass die obigen Antworten wahrscheinlich nicht funktionieren.
Meine Problemumgehung wird wahrscheinlich darin bestehen, den RSS-Feed über PHP zu analysieren und dem Javascript den Zugriff auf mein PHP zu ermöglichen, anstatt zu versuchen, auf den Endziel-Feed selbst zuzugreifen.
Wenn Sie eine einfache Javascript-API verwenden möchten, finden Sie ein gutes Beispiel unter https://github.com/hongkiat/js-rss-reader/.
Die vollständige Beschreibung finden Sie unter https://www.hongkiat.com/blog/rss-reader-in-javascript/
Es verwendet die fetch
Methode als globale Methode, die eine Ressource asynchron abruft. Unten ist ein Code-Snap:
fetch(websiteUrl).then((res) => {
res.text().then((htmlTxt) => {
var domParser = new DOMParser()
let doc = domParser.parseFromString(htmlTxt, 'text/html')
var feedUrl = doc.querySelector('link[type="application/rss+xml"]').href
})
}).catch(() => console.error('Error in fetching the website'))
Sie können jquery-rss oder Vanilla RSS verwenden , das mit schönen Vorlagen geliefert wird und super einfach zu bedienen ist:
// Example for jquery.rss
$("#your-div").rss("https://stackoverflow.com/feeds/question/10943544", {
limit: 3,
layoutTemplate: '<ul class="inline">{entries}</ul>',
entryTemplate: '<li><a href="{url}">[{author}@{date}] {title}</a><br/>{shortBodyPlain}</li>'
})
// Example for Vanilla RSS
const RSS = require('vanilla-rss');
const rss = new RSS(
document.querySelector("#your-div"),
"https://stackoverflow.com/feeds/question/10943544",
{
// options go here
}
);
rss.render().then(() => {
console.log('Everything is loaded and rendered');
});
Ein funktionierendes Beispiel finden Sie unter http://jsfiddle.net/sdepold/ozq2dn9e/1/ .
Als ich jetzt versuchte, eine gute Lösung dafür zu finden, stieß ich auf das FeedEk jQuery RSS / ATOM-Feed-Plugin , das RSS- und Atom-Feeds über die jQuery- Feed-API hervorragend analysiert und anzeigt . Ich habe festgestellt, dass ein grundlegender XML-basierter RSS-Feed wie ein Zauber funktioniert und keine serverseitigen Skripte oder andere CORS-Problemumgehungen benötigt, damit er auch lokal ausgeführt werden kann.
Ich war so verärgert über viele irreführende Artikel und Antworten, dass ich meinen eigenen RSS-Reader schrieb: https://gouessej.wordpress.com/2020/06/28/comment-creer-un-lecteur-rss-en-javascript-how- einen RSS-Reader in Javascript erstellen /
Sie können AJAX-Anforderungen zum Abrufen der RSS-Dateien verwenden, dies funktioniert jedoch nur dann, wenn Sie einen CORS-Proxy verwenden. Ich werde versuchen, meinen eigenen CORS-Proxy zu schreiben, um Ihnen eine robustere Lösung zu bieten. In der Zwischenzeit funktioniert es, ich habe es auf meinem Server unter Debian Linux bereitgestellt.
Meine Lösung verwendet kein JQuery, ich verwende nur einfache Javascript-Standard-APIs ohne Bibliotheken von Drittanbietern und es soll sogar mit Microsoft Internet Explorer 11 funktionieren.