关闭

RssReader

488人阅读 评论(0) 收藏 举报

// Copyright (c) 2006 Robin Schuil (http://lunchpauze.blogspot.com, http://www.sayoutloud.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// VERSION 0.1

Ajax.RssReader = Class.create();
Ajax.RssReader.prototype = Object.extend(new Ajax.Request(), {
 
 initialize : function( url, options ) {
  
  options = options || {};
  
  this.setOptions(options);
  
  this.items = {};

  var onSuccess = this.options.onSuccess || Prototype.emptyFunction;
  var onFailure = this.options.onFailure || Prototype.emptyFunction;
  
  this.options.onSuccess = (function(t) { if( this.onSuccess(t) ) { onSuccess(this); } else { this.onFailure(t); onFailure(this); } }).bind(this);
  this.options.onFailure = (function(t) { this.onFailure(t); onFailure(this); }).bind(this);
  
  this.request( url );

 },
 
 onSuccess : function( t ) {
  
  try {
   var node = t.responseXML;
   var xmlChannel = node.getElementsByTagName('channel').item(0); 
  }
  catch(e) {
   return false;
  }
  
  this.channel = {
   title:      this._getElementValue(xmlChannel, 'title'),
   link:      this._getElementValue(xmlChannel, 'link'),
   description:  this._getElementValue(xmlChannel, 'description'),
   language:    this._getElementValue(xmlChannel, 'language'),
   copyright:   this._getElementValue(xmlChannel, 'copyright'),
   managingEditor: this._getElementValue(xmlChannel, 'managingEditor'),
   webMaster:   this._getElementValue(xmlChannel, 'webMaster'),
   pubDate:    this._getElementValue(xmlChannel, 'pubDate'),
   lastBuildDate: this._getElementValue(xmlChannel, 'lastBuildDate')
  };
  
  this.items = new Array();
  
  var xmlItems = xmlChannel.getElementsByTagName('item');

  for (var n=0; n<xmlItems.length; n++) {
   
   var xmlItem = xmlItems[n];
   
   var item = {
    title:    this._getElementValue(xmlItem, 'title'),
    link:     this._getElementValue(xmlItem, 'link'),
    description: this._getElementValue(xmlItem, 'description'),
    author:    this._getElementValue(xmlItem, 'author'),
    category:   this._getElementValue(xmlItem, 'category'),
    comments:   this._getElementValue(xmlItem, 'comments'),
    guid:     this._getElementValue(xmlItem, 'guid'),
    pubDate:   this._getElementValue(xmlItem, 'pubDate')
   };
   
   this.items.push( item );
         
  }
  
  return true;
    
 },
 
 onFailure : function( t ) {
  
 },
 
 _getElementValue : function( node, elementName ) {
  
  try {
   var value = node.getElementsByTagName(elementName).item(0).firstChild.data; 
  }
  catch(e) {
   var value = '';
  }
  
  return value;
  
 }
 
});

//应用

function myCallback( rss ) {
    alert(rss.channel.title);
    for(var n=0; n<rss.items.length; n++) {
        alert(rss.items[n].title);
    }
}

function errorHandler( rss ) {
   alert('An error has occured');
}

new Ajax.RssReader( 'test.xml', { onSuccess: myCallback, onFailure: errorHandler } );

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:26129次
    • 积分:381
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:18篇
    • 译文:0篇
    • 评论:3条
    最新评论