Class FeedParser::Feed
In: lib/feedparser/feedparser.rb
lib/feedparser/text-output.rb
lib/feedparser/html-output.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/html-output.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] 

Public Class methods

parse str to build a Feed

[Source]

    # File lib/feedparser/feedparser.rb, line 17
17:     def initialize(str = nil)
18:       parse(str) if str
19:     end

Public Instance methods

Determines all the fields using a string containing an XML document

[Source]

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