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