4 ответов:
разбор ленты
С jQuery ' s jFeed
(не советую, см. другие параметры.)
jQuery.getFeed({ url : FEED_URL, success : function (feed) { console.log(feed.title); // do more stuff here } });С jQueryвстроенная поддержка XML
$.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()); }); });С jQuery и Google AJAX Feed API
$.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); }); } } });но это означает, что вы относитесь к ним в интернете и достижимый.
Содержание Здания
после того, как вы успешно извлекли необходимую информацию из ленты, вы можете создать
DocumentFragments (с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="https://stackoverflow.com/questions/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="https://stackoverflow.com/questions/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>казнь
используя встроенную поддержку XML jQuery
вызов:
$.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:С помощью jQuery и Google AJAX API
вызов:
$.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):
The Google Feed API без использования 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); });чтобы проанализировать данные, проверьте документация о формате ответа.
Если вы ищете простую и бесплатную альтернативу 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>
Если вы хотите использовать простой 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'))
Comments