| Class | FeedParser::Feed |
| In: |
lib/feedparser/feedparser.rb
lib/feedparser/text-output.rb lib/feedparser/html-output.rb |
| Parent: | Object |
| creator | [R] | |
| description | [R] | |
| encoding | [R] | |
| items | [R] | |
| link | [R] | |
| title | [R] | |
| type | [R] |
Determines all the fields using a string containing an XML document
# 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
# 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
# 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
# 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