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