Class FeedParser::Feed
In: lib/feedparser/text-output.rb
lib/feedparser/html-output.rb
lib/feedparser/feedparser.rb
Parent: Object
RuntimeError UnknownFeedTypeException FeedItem\n[lib/feedparser/feedparser.rb\nlib/feedparser/html-output.rb\nlib/feedparser/text-output.rb] AtomItem RSSItem SGMLParser HTML2TextParser Feed\n[lib/feedparser/feedparser.rb\nlib/feedparser/html-output.rb\nlib/feedparser/text-output.rb] lib/feedparser/feedparser.rb lib/feedparser/sgml-parser.rb lib/feedparser/html2text-parser.rb FeedParser Module: FeedParser

an RSS/Atom feed

Methods

new   parse   to_html   to_s   to_text  

Attributes

creator  [R] 
description  [R] 
encoding  [R] 
items  [R] 
link  [R] 
title  [R] 
type  [R] 
xml  [R]  REXML::Element for this feed.

Public Class methods

parse str to build a Feed

[Source]

    # File lib/feedparser/feedparser.rb, line 20
20:     def initialize(str = nil)
21:       parse(str) if str
22:     end

Public Instance methods

Determines all the fields using a string containing an XML document

[Source]

     # File lib/feedparser/feedparser.rb, line 26
 26:     def parse(str)
 27:       # Dirty hack: some feeds contain the & char. It must be changed to &
 28:       str.gsub!(/&(\s+)/, '&\1')
 29:       doc = REXML::Document.new(str)
 30:       @xml = doc.root
 31:       # get feed info
 32:       @encoding = doc.encoding
 33:       @title,@link,@description,@creator = nil
 34:       @items = []
 35:       if doc.root.elements['channel'] || doc.root.elements['rss:channel']
 36:         @type = "rss"
 37:         # We have a RSS feed!
 38:         # Title
 39:         if (e = doc.root.elements['channel/title'] ||
 40:           doc.root.elements['rss:channel/rss:title']) && e.text
 41:           @title = e.text.toUTF8(@encoding).rmWhiteSpace!
 42:         end
 43:         # Link
 44:         if (e = doc.root.elements['channel/link'] ||
 45:             doc.root.elements['rss:channel/rss:link']) && e.text
 46:           @link = e.text.rmWhiteSpace!
 47:         end
 48:         # Description
 49:         if (e = doc.root.elements['channel/description'] || 
 50:             doc.root.elements['rss:channel/rss:description']) && e.text
 51:           @description = e.text.toUTF8(@encoding).rmWhiteSpace!
 52:         end
 53:         # Creator
 54:         if ((e = doc.root.elements['channel/dc:creator']) && e.text) ||
 55:             ((e = doc.root.elements['channel/author'] ||
 56:             doc.root.elements['rss:channel/rss:author']) && e.text)
 57:           @creator = e.text.toUTF8(@encoding).rmWhiteSpace!
 58:         end
 59:         # Items
 60:         if doc.root.elements['channel/item']
 61:           query = 'channel/item'
 62:         elsif doc.root.elements['item']
 63:           query = 'item'
 64:         elsif doc.root.elements['rss:channel/rss:item']
 65:           query = 'rss:channel/rss:item'
 66:         else
 67:           query = 'rss:item'
 68:         end
 69:         doc.root.each_element(query) { |e| @items << RSSItem::new(e, self) }
 70: 
 71:       elsif doc.root.elements['/feed']
 72:         # We have an ATOM feed!
 73:         @type = "atom"
 74:         # Title
 75:         if (e = doc.root.elements['/feed/title']) && e.text
 76:           @title = e.text.toUTF8(@encoding).rmWhiteSpace!
 77:         end
 78:         # Link
 79:         doc.root.each_element('/feed/link') do |e|
 80:           if e.attribute('type') and (
 81:               e.attribute('type').value == 'text/html' or
 82:               e.attribute('type').value == 'application/xhtml' or
 83:               e.attribute('type').value == 'application/xhtml+xml')
 84:             if (h = e.attribute('href')) && h
 85:               @link = h.value.rmWhiteSpace!
 86:             end
 87:           end
 88:         end
 89:         # Description
 90:         if e = doc.root.elements['/feed/info']
 91:           e = e.elements['div'] || e
 92:           @description = e.to_s.toUTF8(@encoding).rmWhiteSpace!
 93:         end
 94:         # Items
 95:         doc.root.each_element('/feed/entry') do |e|
 96:            @items << AtomItem::new(e, self)
 97:         end
 98:       else
 99:         raise UnknownFeedTypeException::new
100:       end
101:     end

[Source]

    # File lib/feedparser/html-output.rb, line 5
 5:     def to_html
 6:       s = ''
 7:       s += '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'
 8:       s += "\n"
 9:       s += "<html>\n"
10:       s += "<body>\n"
11:       s += "<p>Type: #{@type}<br>\n"
12:       s += "Encoding: #{@encoding}<br>\n"
13:       s += "Title: #{@title}<br>\n"
14:       s += "Link: #{@link}<br>\n" 
15:       s += "Description: #{@description}<br>\n"
16:       s += "Creator: #{@creator}</p>\n"
17:       s += "\n"
18:       @items.each do |i|
19:         s += "\n<hr/><!-- *********************************** -->\n"
20:         s += i.to_html
21:       end
22:       s
23:     end

[Source]

     # File lib/feedparser/feedparser.rb, line 103
103:     def to_s
104:       s  = ''
105:       s += "Type: #{@type}\n"
106:       s += "Encoding: #{@encoding}\n"
107:       s += "Title: #{@title}\n"
108:       s += "Link: #{@link}\n"
109:       s += "Description: #{@description}\n"
110:       s += "Creator: #{@creator}\n"
111:       s += "\n"
112:       @items.each { |i| s += i.to_s }
113:       s
114:     end

[Source]

    # File lib/feedparser/text-output.rb, line 27
27:     def to_text
28:       s = ''
29:       s += "Type: #{@type}\n"
30:       s += "Encoding: #{@encoding}\n"
31:       s += "Title: #{@title}\n"
32:       s += "Link: #{@link}\n"
33:       if @description
34:         s += "Description: #{@description.html2text}\n"
35:       else
36:         s += "Description:\n"
37:       end
38:       s += "Creator: #{@creator}\n"
39:       s += "\n"
40:       @items.each do |i|
41:         s += "\n" + '*' * 40 + "\n"
42:         s += i.to_text
43:       end
44:       s
45:     end

[Validate]