Я хочу использовать jQuery для анализа RSS-каналов. Можно ли это сделать с помощью базовой библиотеки jQuery из коробки или мне нужно будет использовать плагин?
Анализируйте RSS с помощью jQuery
Ответы (19)
ВНИМАНИЕ
Google Feed API официально устарел и не поддерживает больше работать!
Нет необходимости в плагине целиком. Это вернет ваш RSS как объект JSON в функцию обратного вызова:
function parseRSS(url, callback) {
$.ajax({
url: document.location.protocol + '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&callback=?&q=' + encodeURIComponent(url),
dataType: 'json',
success: function(data) {
callback(data.responseData.feed);
}
});
}
Используйте jFeed - плагин jQuery RSS / Atom. Согласно документации, это очень просто:
jQuery.getFeed({
url: 'rss.xml',
success: function(feed) {
alert(feed.title);
}
});
Для тех из нас, кто пришел к обсуждению поздно, начиная с версии 1.5 jQuery имеет встроенные возможности синтаксического анализа XML, что позволяет довольно легко сделать это без плагинов или сторонних сервисов. Он имеет функцию parseXml, а также автоматически анализирует xml при использовании функции $ .get. Например.:
$.get(rssurl, function(data) {
var $xml = $(data);
$xml.find("item").each(function() {
var $this = $(this),
item = {
title: $this.find("title").text(),
link: $this.find("link").text(),
description: $this.find("description").text(),
pubDate: $this.find("pubDate").text(),
author: $this.find("author").text()
}
//Do something with item here...
});
});
$this.find("link").text()
всегда возвращает пустую строку ''?
- person Jeff Tian; 03.10.2014
$xml = $($.parseXML(data.trim()));
, и тогда я смогу получить ссылку, как и ожидалось.
- person Jeff Tian; 04.10.2014
jFeed не работает в IE.
Используйте zRSSFeed. Если бы он работал через 5 минут
Обновление (15 октября 2019 г.)
Я извлек основную логику из jquery-rss в новую библиотеку под названием Vanilla RSS, которая использует fetch API и может работать без дополнительных зависимостей:
const RSS = require('vanilla-rss');
const rss = new RSS(
document.querySelector("#your-div"),
"http://www.recruiter.com/feed/career.xml",
{
// options go here
}
);
rss.render().then(() => {
console.log('Everything is loaded and rendered');
});
Оригинал
Почта:
Вы также можете использовать jquery-rss, который поставляется с красивыми шаблонами и очень прост в использовании:
$("#your-div").rss("http://www.recruiter.com/feed/career.xml", {
limit: 3,
layoutTemplate: '<ul class="inline">{entries}</ul>',
entryTemplate: '<li><a href="{url}">[{author}@{date}] {title}</a><br/>{shortBodyPlain}</li>'
})
урожайность (по состоянию на 18 сентября 2013 г.):
<div id="your-div">
<ul class="inline">
<entries></entries>
</ul>
<ul class="inline">
<li><a href="http://www.recruiter.com/i/when-to-go-over-a-recruiter%e2%80%99s-head/">[@Tue, 10 Sep 2013 22:23:51 -0700] When to Go Over a Recruiter's Head</a><br>Job seekers tend to have a certain "fear" of recruiters and hiring managers, and I mean fear in the reverence and respect ...</li>
<li><a href="http://www.recruiter.com/i/the-perfect-job/">[@Tue, 10 Sep 2013 14:52:40 -0700] The Perfect Job</a><br>Having long ago dealt with the "perfect resume" namely God's, in a previous article of mine, it makes sense to consider the ...</li>
<li><a href="http://www.recruiter.com/i/unemployment-benefits-applications-remain-near-5-year-low-decline-again/">[@Mon, 09 Sep 2013 12:49:17 -0700] Unemployment Benefits Applications Remain Near 5-Year Low, Decline Again</a><br>As reported by the U.S. Department of Labor, the number of workers seeking unemployment benefits continued to sit near ...</li>
</ul>
</div>
См. http://jsfiddle.net/sdepold/ozq2dn9e/1/ для рабочего примера. .
moment.js
- person Purvesh Desai; 19.11.2015
function getFeed(sender, uri) {
jQuery.getFeed({
url: 'proxy.php?url=' + uri,
success: function(feed) {
jQuery(sender).append('<h2>'
+ '<a href="'
+ feed.link
+ '">'
+ feed.title
+ '</a>'
+ '</h2>');
var html = '';
for(var i = 0; i < feed.items.length && i < 5; i++) {
var item = feed.items[i];
html += '<h3>'
+ '<a href="'
+ item.link
+ '">'
+ item.title
+ '</a>'
+ '</h3>';
html += '<div class="updated">'
+ item.updated
+ '</div>';
html += '<div>'
+ item.description
+ '</div>';
}
jQuery(sender).append(html);
}
});
}
<div id="getanewbrowser">
<script type="text/javascript">
getFeed($("#getanewbrowser"), 'http://feeds.feedburner.com/getanewbrowser')
</script>
</div>
Используйте Google AJAX Feed API, если ваши данные RSS не являются конфиденциальными. Конечно, быстро.
https://developers.google.com/feed/
ОБНОВЛЕНИЕ [25.04.2016] Теперь лучше написанная и полностью поддерживаемая версия с дополнительными опциями и возможностями, размещенными на GitHub.jQRSS
Я видел Выбранный ответ, сделанный Nathan Strutz, однако ссылка на страницу плагина jQuery все еще не работает, и домашняя страница этого сайта не загружается. Я попробовал несколько других решений и обнаружил, что большинство из них не только устарело, но и ЛЕГКО! Таким образом, я бросил шляпу и сделал свой собственный плагин, и с мертвыми ссылками здесь, это похоже на отличное место для отправки ответа. Если вы ищете этот ответ в 2012 году (скоро до b 2013), вы можете заметить разочарование мертвыми ссылками и старыми советами здесь, как это сделал я. Ниже приведена ссылка на мой современный пример плагина, а также код этого плагина! Просто скопируйте код в файл JS и свяжите его в заголовке, как любой другой плагин. Использование ЧРЕЗВЫЧАЙНО EZ!
Код плагина
09.02.2015 - сделано давно назревшее обновление для проверкиconsole
перед отправкой на него команд! Должно помочь с более старыми проблемами IE.
(function($) {
if (!$.jQRSS) {
$.extend({
jQRSS: function(rss, options, func) {
if (arguments.length <= 0) return false;
var str, obj, fun;
for (i=0;i<arguments.length;i++) {
switch(typeof arguments[i]) {
case "string":
str = arguments[i];
break;
case "object":
obj = arguments[i];
break;
case "function":
fun = arguments[i];
break;
}
}
if (str == null || str == "") {
if (!obj['rss']) return false;
if (obj.rss == null || obj.rss == "") return false;
}
var o = $.extend(true, {}, $.jQRSS.defaults);
if (typeof obj == "object") {
if ($.jQRSS.methods.getObjLength(obj) > 0) {
o = $.extend(true, o, obj);
}
}
if (str != "" && !o.rss) o.rss = str;
o.rss = escape(o.rss);
var gURL = $.jQRSS.props.gURL
+ $.jQRSS.props.type
+ "?v=" + $.jQRSS.props.ver
+ "&q=" + o.rss
+ "&callback=" + $.jQRSS.props.callback;
var ajaxData = {
num: o.count,
output: o.output,
};
if (o.historical) ajaxData.scoring = $.jQRSS.props.scoring;
if (o.userip != null) ajaxData.scoring = o.userip;
$.ajax({
url: gURL,
beforeSend: function (jqXHR, settings) { if (window['console']) { console.log(new Array(30).join('-'), "REQUESTING RSS XML", new Array(30).join('-')); console.log({ ajaxData: ajaxData, ajaxRequest: settings.url, jqXHR: jqXHR, settings: settings, options: o }); console.log(new Array(80).join('-')); } },
dataType: o.output != "xml" ? "json" : "xml",
data: ajaxData,
type: "GET",
xhrFields: { withCredentials: true },
error: function (jqXHR, textStatus, errorThrown) { return new Array("ERROR", { jqXHR: jqXHR, textStatus: textStatus, errorThrown: errorThrown } ); },
success: function (data, textStatus, jqXHR) {
var f = data['responseData'] ? data.responseData['feed'] ? data.responseData.feed : null : null,
e = data['responseData'] ? data.responseData['feed'] ? data.responseData.feed['entries'] ? data.responseData.feed.entries : null : null : null
if (window['console']) {
console.log(new Array(30).join('-'), "SUCCESS", new Array(30).join('-'));
console.log({ data: data, textStatus: textStatus, jqXHR: jqXHR, feed: f, entries: e });
console.log(new Array(70).join('-'));
}
if (fun) {
return fun.call(this, data['responseData'] ? data.responseData['feed'] ? data.responseData.feed : data.responseData : null);
}
else {
return { data: data, textStatus: textStatus, jqXHR: jqXHR, feed: f, entries: e };
}
}
});
}
});
$.jQRSS.props = {
callback: "?",
gURL: "http://ajax.googleapis.com/ajax/services/feed/",
scoring: "h",
type: "load",
ver: "1.0"
};
$.jQRSS.methods = {
getObjLength: function(obj) {
if (typeof obj != "object") return -1;
var objLength = 0;
$.each(obj, function(k, v) { objLength++; })
return objLength;
}
};
$.jQRSS.defaults = {
count: "10", // max 100, -1 defaults 100
historical: false,
output: "json", // json, json_xml, xml
rss: null, // url OR search term like "Official Google Blog"
userip: null
};
}
})(jQuery);
ИСПОЛЬЗОВАНИЕ
// Param ORDER does not matter, however, you must have a link and a callback function
// link can be passed as "rss" in options
// $.jQRSS(linkORsearchString, callbackFunction, { options })
$.jQRSS('someUrl.xml', function(feed) { /* do work */ })
$.jQRSS(function(feed) { /* do work */ }, 'someUrl.xml', { count: 20 })
$.jQRSS('someUrl.xml', function(feed) { /* do work */ }, { count: 20 })
$.jQRSS({ count: 20, rss: 'someLink.xml' }, function(feed) { /* do work */ })
$ .jQRSS ('Искать слова здесь вместо ссылки', function (feed) {/ * do work * /}) // TODO: Требуется исправление
Параметры
{
count: // default is 10; max is 100. Setting to -1 defaults to 100
historical: // default is false; a value of true instructs the system to return any additional historical entries that it might have in its cache.
output: // default is "json"; "json_xml" retuns json object with xmlString / "xml" returns the XML as String
rss: // simply an alternate place to put news feed link or search terms
userip: // as this uses Google API, I'll simply insert there comment on this:
/* Reference: https://developers.google.com/feed/v1/jsondevguide
This argument supplies the IP address of the end-user on
whose behalf the request is being made. Google is less
likely to mistake requests for abuse when they include
userip. In choosing to utilize this parameter, please be
sure that you're in compliance with any local laws,
including any laws relating to disclosure of personal
information being sent.
*/
}
Я согласен с @Andrew, использование Google - надежный, многоразовый способ сделать это с огромным преимуществом, заключающимся в возвращении JSON. вместо XML. Дополнительным преимуществом использования Google в качестве прокси является то, что службы, которые могут заблокировать ваш прямой доступ к своим данным, вряд ли остановят Google. Вот пример использования отчета о лыжах и данных условий. У него есть все обычные приложения реального мира: 1) Сторонний RSS / XML 2) JSONP 3) Очистка строк и строк в массив, когда вы не можете получить данные именно так, как вы хотите 4) при загрузке добавляйте элементы в ДОМ. Надеюсь, это поможет некоторым людям!
<!-- Load RSS Through Google as JSON using jQuery -->
<script type="text/javascript">
function displaySkiReport (feedResponse) {
// Get ski report content strings
var itemString = feedResponse.entries[0].content;
var publishedDate = feedResponse.entries[0].publishedDate;
// Clean up strings manually as needed
itemString = itemString.replace("Primary: N/A", "Early Season Conditions");
publishedDate = publishedDate.substring(0,17);
// Parse ski report data from string
var itemsArray = itemString.split("/");
//Build Unordered List
var html = '<h2>' + feedResponse.entries[0].title + '</h2>';
html += '<ul>';
html += '<li>Skiing Status: ' + itemsArray[0] + '</li>';
// Last 48 Hours
html += '<li>' + itemsArray[1] + '</li>';
// Snow condition
html += '<li>' + itemsArray[2] + '</li>';
// Base depth
html += '<li>' + itemsArray[3] + '</li>';
html += '<li>Ski Report Date: ' + publishedDate + '</li>';
html += '</ul>';
$('body').append(html);
}
function parseRSS(url, callback) {
$.ajax({
url: document.location.protocol + '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&callback=?&q=' + encodeURIComponent(url),
dataType: 'json',
success: function(data) {
callback(data.responseData.feed);
}
});
}
$(document).ready(function() {
// Ski report
parseRSS("http://www.onthesnow.com/michigan/boyne-highlands/snow.rss", displaySkiReport);
});
</script>
jFeed несколько устарел и работает только со старыми версиями jQuery. Прошло два года с момента его обновления.
zRSSFeed, возможно, немного менее гибкий, но он прост в использовании и работает с текущей версией jQuery (в настоящее время 1.4). http://www.zazar.net/developers/zrssfeed/
Вот краткий пример из документации zRSSFeed:
<div id="test"><div>
<script type="text/javascript">
$(document).ready(function () {
$('#test').rssfeed('http://feeds.reuters.com/reuters/oddlyEnoughNews', {
limit: 5
});
});
</script>
Я использую jquery с yql для подачи. Вы можете получить twitter, rss, buzz с помощью yql. Я читал с http://tutorialzine.com/2010/02/feed-widget-jquery-css-yql/. Для меня это очень полезно.
Я советую вам использовать FeedEk. После того, как Google Feed API официально устарел, большинство плагинов перестали работать. Но FeedEk все еще работает. Он очень прост в использовании и имеет множество опций, которые можно настроить.
$('#divRss').FeedEk({
FeedUrl:'http://jquery-plugins.net/rss'
});
С опциями
$('#divRss').FeedEk({
FeedUrl:'http://jquery-plugins.net/rss',
MaxCount : 5,
ShowDesc : true,
ShowPubDate:true,
DescCharacterLimit:100,
TitleLinkTarget:'_blank',
DateFormat: 'MM/DD/YYYY',
DateFormatLang:'en'
});
Используйте google ajax api, кэшированный Google, и любой желаемый формат вывода.
Образец кода; http://code.google.com/apis/ajax/playground/#load_feed а>
<script src="http://www.google.com/jsapi?key=AIzaSyA5m1Nc8ws2BbmPRwKu5gFradvD_hgq6G0" type="text/javascript"></script>
<script type="text/javascript">
/*
* How to load a feed via the Feeds API.
*/
google.load("feeds", "1");
// Our callback function, for when a feed is loaded.
function feedLoaded(result) {
if (!result.error) {
// Grab the container we will put the results into
var container = document.getElementById("content");
container.innerHTML = '';
// Loop through the feeds, putting the titles onto the page.
// Check out the result object for a list of properties returned in each entry.
// http://code.google.com/apis/ajaxfeeds/documentation/reference.html#JSON
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);
}
}
}
function OnLoad() {
// Create a feed instance that will grab Digg's feed.
var feed = new google.feeds.Feed("http://www.digg.com/rss/index.xml");
// Calling load sends the request off. It requires a callback function.
feed.load(feedLoaded);
}
google.setOnLoadCallback(OnLoad);
</script>
zRSSfeed построен на jQuery, и простая тема великолепна .
Попробуйте.
Проект jQuery-rss довольно легкий и не требует какого-либо особого стиля.
Синтаксис может быть таким простым, как
$("#rss-feeds").rss("http://www.recruiter.com/feed/career.xml")
См. http://jsfiddle.net/jhfrench/AFHfn/.
jQuery Feeds - хороший вариант, он имеет встроенную систему шаблонов и использует API Google Feed. , поэтому он имеет междоменную поддержку.
Superfeedr имеет плагин jquery, который очень хорошо с этим справляется. У вас не будет проблем с политикой Cross Origin, и обновления будут распространяться в реальном времени.
jFeed прост и содержит пример для тестирования. Но если вы анализируете канал с другого сервера, вам необходимо разрешить совместное использование ресурсов между источниками (CORS) на сервере ленты. Вам также необходимо проверить поддержку браузера.
Я загрузил образец, но все еще не получил поддержки со стороны IE ни в одной версии когда я изменил URL-адрес в примере на что-то вроде example.com/feed.rss через протокол http. CORS должен поддерживаться в IE 8 и выше, но в примере jFeed канал не отображался.
Лучше всего использовать API Google:
https://developers.google.com/feed/v1/devguide
См .:
https://github.com/jfhovinne/jFeed
http://en.wikipedia.org/wiki/Cross-origin_resource_sharing
http://en.wikipedia.org/wiki/Same_origin_policy
http://caniuse.com/cors.