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