You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
3.7 KiB
145 lines
3.7 KiB
17 years ago
|
/* jFeed : jQuery feed parser plugin
|
||
|
* Copyright (C) 2007 Jean-François Hovinne - http://www.hovinne.com/
|
||
|
* Dual licensed under the MIT (MIT-license.txt)
|
||
|
* and GPL (GPL-license.txt) licenses.
|
||
|
*/
|
||
|
|
||
|
jQuery.getFeed = function(options) {
|
||
|
|
||
|
options = jQuery.extend({
|
||
|
|
||
|
url: null,
|
||
|
data: null,
|
||
|
success: null
|
||
|
|
||
|
}, options);
|
||
|
|
||
|
if(options.url) {
|
||
|
|
||
|
$.ajax({
|
||
|
type: 'GET',
|
||
|
url: options.url,
|
||
|
data: options.data,
|
||
|
dataType: 'xml',
|
||
|
success: function(xml) {
|
||
|
var feed = new JFeed(xml);
|
||
|
if(jQuery.isFunction(options.success)) options.success(feed);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|
||
|
function JFeed(xml) {
|
||
|
if(xml) this.parse(xml);
|
||
|
};
|
||
|
|
||
|
JFeed.prototype = {
|
||
|
|
||
|
type: '',
|
||
|
version: '',
|
||
|
title: '',
|
||
|
link: '',
|
||
|
description: '',
|
||
|
parse: function(xml) {
|
||
|
|
||
|
if(jQuery('channel', xml).length == 1) {
|
||
|
|
||
|
this.type = 'rss';
|
||
|
var feedClass = new JRss(xml);
|
||
|
|
||
|
} else if(jQuery('feed', xml).length == 1) {
|
||
|
|
||
|
this.type = 'atom';
|
||
|
var feedClass = new JAtom(xml);
|
||
|
}
|
||
|
|
||
|
if(feedClass) jQuery.extend(this, feedClass);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
function JFeedItem() {};
|
||
|
|
||
|
JFeedItem.prototype = {
|
||
|
|
||
|
title: '',
|
||
|
link: '',
|
||
|
description: '',
|
||
|
updated: '',
|
||
|
id: ''
|
||
|
};
|
||
|
|
||
|
function JAtom(xml) {
|
||
|
this._parse(xml);
|
||
|
};
|
||
|
|
||
|
JAtom.prototype = {
|
||
|
|
||
|
_parse: function(xml) {
|
||
|
|
||
|
var channel = jQuery('feed', xml).eq(0);
|
||
|
|
||
|
this.version = '1.0';
|
||
|
this.title = jQuery(channel).find('title:first').text();
|
||
|
this.link = jQuery(channel).find('link:first').attr('href');
|
||
|
this.description = jQuery(channel).find('subtitle:first').text();
|
||
|
this.language = jQuery(channel).attr('xml:lang');
|
||
|
this.updated = jQuery(channel).find('updated:first').text();
|
||
|
|
||
|
this.items = new Array();
|
||
|
|
||
|
var feed = this;
|
||
|
|
||
|
jQuery('entry', xml).each( function() {
|
||
|
|
||
|
var item = new JFeedItem();
|
||
|
|
||
|
item.title = jQuery(this).find('title').eq(0).text();
|
||
|
item.link = jQuery(this).find('link').eq(0).attr('href');
|
||
|
item.description = jQuery(this).find('content').eq(0).text();
|
||
|
item.updated = jQuery(this).find('updated').eq(0).text();
|
||
|
item.id = jQuery(this).find('id').eq(0).text();
|
||
|
|
||
|
feed.items.push(item);
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|
||
|
function JRss(xml) {
|
||
|
this._parse(xml);
|
||
|
};
|
||
|
|
||
|
JRss.prototype = {
|
||
|
|
||
|
_parse: function(xml) {
|
||
|
|
||
|
if(jQuery('rss', xml).length == 0) this.version = '1.0';
|
||
|
else this.version = jQuery('rss', xml).eq(0).attr('version');
|
||
|
|
||
|
var channel = jQuery('channel', xml).eq(0);
|
||
|
|
||
|
this.title = jQuery(channel).find('title:first').text();
|
||
|
this.link = jQuery(channel).find('link:first').text();
|
||
|
this.description = jQuery(channel).find('description:first').text();
|
||
|
this.language = jQuery(channel).find('language:first').text();
|
||
|
this.updated = jQuery(channel).find('lastBuildDate:first').text();
|
||
|
|
||
|
this.items = new Array();
|
||
|
|
||
|
var feed = this;
|
||
|
|
||
|
jQuery('item', xml).each( function() {
|
||
|
|
||
|
var item = new JFeedItem();
|
||
|
|
||
|
item.title = jQuery(this).find('title').eq(0).text();
|
||
|
item.link = jQuery(this).find('link').eq(0).text();
|
||
|
item.description = jQuery(this).find('description').eq(0).text();
|
||
|
item.updated = jQuery(this).find('pubDate').eq(0).text();
|
||
|
item.id = jQuery(this).find('guid').eq(0).text();
|
||
|
|
||
|
feed.items.push(item);
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|