ฉันต้องการแยกวิเคราะห์ฟีด RSS (XML เวอร์ชัน 2.0) และแสดงรายละเอียดที่แยกวิเคราะห์ในหน้า HTML
ฉันต้องการแยกวิเคราะห์ฟีด RSS (XML เวอร์ชัน 2.0) และแสดงรายละเอียดที่แยกวิเคราะห์ในหน้า HTML
คำตอบ:
(ไม่แนะนำให้ดูตัวเลือกอื่น ๆ )
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);
});
}
}
});
แต่นั่นหมายความว่าคุณวางใจได้ว่าพวกเขาออนไลน์และเข้าถึงได้
เมื่อคุณดึงข้อมูลที่ต้องการจากฟีดเรียบร้อยแล้วคุณสามารถสร้างDocumentFragment
s (โดยdocument.createDocumentFragment()
มีองค์ประกอบ (สร้างด้วยdocument.createElement()
) ที่คุณต้องการจะฉีดเพื่อแสดงข้อมูลของคุณ
เลือกองค์ประกอบคอนเทนเนอร์ที่คุณต้องการในหน้าและต่อท้ายส่วนเอกสารของคุณจากนั้นใช้ innerHTML เพื่อแทนที่เนื้อหาทั้งหมด
สิ่งที่ต้องการ:
$('#rss-viewer').append(aDocumentFragmentEntry);
หรือ:
$('#rss-viewer')[0].innerHTML = aDocumentFragmentOfAllEntries.innerHTML;
การใช้ฟีดของคำถามนี้ซึ่งจากการเขียนนี้ให้:
<?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>
อัญเชิญ:
$.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());
});
});
พิมพ์ออกมา:
------------------------
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:
อัญเชิญ:
$.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);
});
}
}
});
พิมพ์ออกมา:
------------------------
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
ตัวเลือกอื่นที่เลิกใช้แล้ว (ขอบคุณ @daylight)และง่ายที่สุดสำหรับฉัน (นี่คือสิ่งที่ฉันใช้สำหรับSpokenToday.info ):
ฟีด API ของ Googleโดยไม่ต้องใช้ JQuery และมีเพียง 2 ขั้นตอน
นำเข้าห้องสมุด:
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("feeds", "1");</script>
ค้นหา / โหลดฟีด ( เอกสารประกอบ ):
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);
});
document.getElementById('image').style.backgroundImage = "url('" + src + "')";
หากคุณกำลังมองหาทางเลือกที่ง่ายและฟรีสำหรับGoogle Feed APIสำหรับวิดเจ็ต rss ของคุณrss2json.comอาจเป็นทางออกที่เหมาะสมสำหรับสิ่งนั้น
คุณอาจลองดูวิธีการทำงานกับโค้ดตัวอย่างจากเอกสาร apiด้านล่าง:
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>
สำหรับใครก็ตามที่อ่านสิ่งนี้ (ในปี 2019 เป็นต้นไป) น่าเสียดายที่การใช้งานการอ่าน JS RSS ส่วนใหญ่ไม่ทำงานในขณะนี้ ประการแรก Google API ได้ปิดตัวลงดังนั้นจึงไม่ใช่ตัวเลือกอีกต่อไปและเนื่องจากนโยบายความปลอดภัย CORS โดยทั่วไปคุณจึงไม่สามารถขอฟีด RSS ข้ามโดเมนได้
ใช้ตัวอย่างบนhttps://www.raymondcamden.com/2015/12/08/parsing-rss-feeds-in-javascript-options (2015) ฉันได้รับสิ่งต่อไปนี้:
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.
สิ่งนี้ถูกต้องและเป็นข้อควรระวังด้านความปลอดภัยของเว็บไซต์สุดท้าย แต่ตอนนี้หมายความว่าคำตอบข้างต้นไม่น่าจะได้ผล
วิธีแก้ปัญหาของฉันอาจเป็นการแยกวิเคราะห์ฟีด RSS ผ่าน PHP และอนุญาตให้จาวาสคริปต์เข้าถึง PHP ของฉันแทนที่จะพยายามเข้าถึงฟีดปลายทางปลายทางเอง
หากคุณต้องการใช้ javascript API แบบธรรมดามีตัวอย่างที่ดีที่https://github.com/hongkiat/js-rss-reader/
คำอธิบายทั้งหมดที่ https://www.hongkiat.com/blog/rss-reader-in-javascript/
ใช้fetch
วิธีการเป็นวิธีการส่วนกลางที่ดึงทรัพยากรแบบอะซิงโครนัส ด้านล่างนี้เป็นรหัสย่อ:
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'))
คุณสามารถใช้jquery-rssหรือVanilla RSSซึ่งมาพร้อมกับเทมเพลตที่ดีและใช้งานง่ายสุด ๆ :
// 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');
});
ดูhttp://jsfiddle.net/sdepold/ozq2dn9e/1/สำหรับตัวอย่างการทำงาน
พยายามที่จะหาทางออกที่ดีสำหรับตอนนี้ฉันเกิดขึ้นเมื่อFeedEk jQuery RSS / ATOM ฟีดปลั๊กอินที่จะได้งานที่ดีของการแยกและการแสดง RSS และ Atom ฟีดผ่าน jQuery ฟีด API สำหรับฟีด RSS ที่ใช้ XML พื้นฐานฉันพบว่ามันใช้งานได้ดีและไม่จำเป็นต้องมีสคริปต์ฝั่งเซิร์ฟเวอร์หรือวิธีแก้ปัญหา CORS อื่น ๆ เพื่อให้มันทำงานได้แม้ในเครื่อง
ฉันโกรธมากกับบทความและคำตอบที่ทำให้เข้าใจผิดมากมายที่ฉันเขียนโปรแกรมอ่าน RSS ของตัวเอง: https://gouessej.wordpress.com/2020/06/28/comment-creer-un-lecteur-rss-en-javascript-how- เพื่อสร้าง-a-RSS-reader ในจาวาสคริปต์ /
คุณสามารถใช้คำขอ AJAX เพื่อดึงไฟล์ RSS ได้ แต่จะใช้ได้ก็ต่อเมื่อคุณใช้พร็อกซี CORS ฉันจะพยายามเขียนพร็อกซี CORS ของตัวเองเพื่อให้ได้โซลูชันที่มีประสิทธิภาพมากขึ้น ในระหว่างนี้มันใช้งานได้ฉันติดตั้งบนเซิร์ฟเวอร์ของฉันภายใต้ Debian Linux
โซลูชันของฉันไม่ได้ใช้ JQuery ฉันใช้ API มาตรฐาน Javascript ธรรมดาเท่านั้นที่ไม่มีไลบรารีของบุคคลที่สามและควรใช้งานได้แม้กับ Microsoft Internet Explorer 11