Saya perlu mengurai RSS feed (XML versi 2.0) dan menampilkan detail parsing di halaman HTML.
Saya perlu mengurai RSS feed (XML versi 2.0) dan menampilkan detail parsing di halaman HTML.
Jawaban:
(Jangan terlalu merekomendasikan yang itu, lihat opsi lainnya.)
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);
});
}
}
});
Tetapi itu berarti Anda mengandalkan mereka untuk online dan dapat dihubungi.
Setelah Anda berhasil mengekstrak informasi yang Anda butuhkan dari feed, Anda dapat membuat DocumentFragment
s (dengan document.createDocumentFragment()
berisi elemen (dibuat dengan document.createElement()
) yang ingin Anda masukkan untuk menampilkan data Anda.
Pilih elemen kontainer yang Anda inginkan pada halaman dan tambahkan fragmen dokumen Anda ke dalamnya, dan cukup gunakan innerHTML untuk mengganti kontennya sepenuhnya.
Sesuatu seperti:
$('#rss-viewer').append(aDocumentFragmentEntry);
atau:
$('#rss-viewer')[0].innerHTML = aDocumentFragmentOfAllEntries.innerHTML;
Menggunakan feed pertanyaan ini , yang pada tulisan ini memberikan:
<?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>
Memohon:
$.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());
});
});
Cetakan:
------------------------
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:
Memohon:
$.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);
});
}
}
});
Cetakan:
------------------------
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
Opsi lain yang tidak digunakan lagi (berkat @daylight) , dan yang paling mudah bagi saya (inilah yang saya gunakan untuk SpokenToday.info ):
The Google API Pakan tanpa menggunakan JQuery dan dengan hanya 2 langkah:
Impor perpustakaan:
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("feeds", "1");</script>
Temukan / Muat feed ( dokumentasi ):
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);
});
Untuk mengurai data, periksa dokumentasi tentang format respons .
document.getElementById('image').style.backgroundImage = "url('" + src + "')";
Jika Anda mencari alternatif sederhana dan gratis untuk Google Feed API untuk widget rss Anda, rss2json.com bisa menjadi solusi yang cocok untuk itu.
Anda dapat mencoba melihat cara kerjanya pada kode sampel dari dokumentasi api di bawah ini:
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>
Bagi orang lain yang membaca ini (pada 2019 dan seterusnya) sayangnya sebagian besar implementasi membaca RSS JS sekarang tidak berfungsi. Pertama, Google API telah ditutup, jadi ini bukan lagi opsi dan karena kebijakan keamanan CORS, Anda biasanya tidak dapat meminta umpan RSS lintas domain sekarang.
Menggunakan contoh di https://www.raymondcamden.com/2015/12/08/parsing-rss-feeds-in-javascript-options (2015) saya mendapatkan yang berikut:
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.
Ini benar dan merupakan tindakan pencegahan keamanan oleh situs web akhir tetapi sekarang berarti bahwa jawaban di atas tidak mungkin berfungsi.
Solusi saya mungkin akan mengurai umpan RSS melalui PHP dan mengizinkan javascript untuk mengakses PHP saya daripada mencoba mengakses umpan tujuan akhir itu sendiri.
Jika Anda ingin menggunakan API javascript biasa, ada contoh yang bagus di https://github.com/hongkiat/js-rss-reader/
Deskripsi lengkapnya di https://www.hongkiat.com/blog/rss-reader-in-javascript/
Ini menggunakan fetch
metode sebagai metode global yang mengambil sumber daya secara asinkron. Di bawah ini adalah cuplikan kode:
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'))
Anda dapat menggunakan jquery-rss atau Vanilla RSS , yang dilengkapi dengan template yang bagus dan sangat mudah digunakan:
// 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');
});
Lihat http://jsfiddle.net/sdepold/ozq2dn9e/1/ untuk contoh yang berfungsi.
Mencoba menemukan solusi yang baik untuk ini sekarang, saya kebetulan menggunakan FeedEk jQuery RSS / ATOM Feed Plugin yang melakukan pekerjaan yang baik dalam mem -parse dan menampilkan RSS dan Atom feed melalui jQuery Feed API . Untuk umpan RSS berbasis XML dasar, menurut saya ini berfungsi seperti pesona dan tidak memerlukan skrip sisi server atau solusi CORS lainnya untuk menjalankannya bahkan secara lokal.
Saya sangat jengkel dengan banyak artikel dan jawaban yang menyesatkan sehingga saya menulis pembaca RSS saya sendiri: https://gouessej.wordpress.com/2020/06/28/comment-creer-un-lecteur-rss-en-javascript-how- untuk-membuat-a-rss-reader-in-javascript /
Anda dapat menggunakan permintaan AJAX untuk mengambil file RSS tetapi ini akan berfungsi jika dan hanya jika Anda menggunakan proxy CORS. Saya akan mencoba menulis proxy CORS saya sendiri untuk memberi Anda solusi yang lebih kuat. Sementara itu, ini berfungsi, saya menerapkannya di server saya di bawah Debian Linux.
Solusi saya tidak menggunakan JQuery, saya hanya menggunakan API standar Javascript biasa tanpa perpustakaan pihak ketiga dan seharusnya berfungsi bahkan dengan Microsoft Internet Explorer 11.