Class FeedParser::FeedItem
In: lib/feedparser/html-output.rb
lib/feedparser/feedparser.rb
lib/feedparser/text-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/sgml-parser.rb lib/feedparser/text-output.rb lib/feedparser/html2text-parser.rb FeedParser dot/m_6_0.png

an Item from a feed

Methods

creator   new   parse   to_html   to_html_with_headers   to_s   to_text  

Attributes

cacheditem  [RW] 
categories  [RW]  The item‘s categories/tags. An array of strings.
content  [RW] 
creators  [RW] 
date  [RW] 
enclosures  [RW]  The item‘s enclosures childs. An array of (url, length, type) triplets.
feed  [R] 
link  [RW] 
subject  [RW] 
title  [RW] 
xml  [R]  REXML::Element for this item

Public Class methods

[Source]

     # File lib/feedparser/feedparser.rb, line 136
136:     def initialize(item = nil, feed = nil)
137:       @xml = item
138:       @feed = feed
139:       @title, @link, @content, @date, @subject = nil
140:       @creators = []
141:       @categories = []
142:       @enclosures = []
143:       parse(item) if item
144:     end

Public Instance methods

[Source]

     # File lib/feedparser/feedparser.rb, line 150
150:     def creator
151:       case @creators.length
152:       when 0
153:         return nil
154:       when 1
155:         return creators[0]
156:       else
157:         return creators[0...-1].join(", ")+" and "+creators[-1]
158:       end
159:     end

[Source]

     # File lib/feedparser/feedparser.rb, line 146
146:     def parse(item)
147:       raise "parse() should be implemented by subclasses!"
148:     end

[Source]

     # File lib/feedparser/html-output.rb, line 66
 66:     def to_html(localtime = true)
 67:       s = "<table border=\"1\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" borderspacing=\"0\"><tr><td>\n<table width=\"100%\" bgcolor=\"#EDEDED\" cellpadding=\"4\" cellspacing=\"2\">\n"
 68:       r = ""
 69:       r += "<a href=\"#{@feed.link}\">\n" if @feed.link
 70:       if @feed.title
 71:         r += "<b>#{@feed.title.escape_html}</b>\n"
 72:       elsif @feed.link
 73:         r += "<b>#{@feed.link.escape_html}</b>\n"
 74:       else
 75:         r += "<b>Unnamed feed</b>\n"
 76:       end
 77:       r += "</a>\n" if @feed.link
 78:       headline = "<tr><td align=\"right\"><b>%s</b></td>\n<td width=\"100%%\">%s</td></tr>"
 79:       s += (headline % ["Feed:", r])
 80: 
 81:       r = ""
 82:       r += "<a href=\"#{@link}\">" if @link
 83:       if @title
 84:         r += "<b>#{@title.escape_html}</b>\n"
 85:       elsif @link
 86:         r += "<b>#{@link.escape_html}</b>\n"
 87:       end
 88:       r += "</a>\n" if @link
 89:       s += (headline % ["Item:", r])
 90:       s += "</table></td></tr></table>\n"
 91:       s += "\n"
 92:       if @content and @content !~ /\A\s*</m
 93:         s += "<br/>\n"
 94:       end
 95:       s += "#{@content}" if @content
 96:       if @enclosures and @enclosures.length > 0
 97:         s += "<table border=\"1\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" borderspacing=\"0\"><tr><td>\n<table width=\"100%\" bgcolor=\"#EDEDED\" cellpadding=\"2\" cellspacing=\"2\">\n"
 98:         s += '<tr><td width="100%"><b>Files:</b></td></tr>'
 99:         s += "\n"
100:         @enclosures.each do |e|
101:           s += "<tr><td>&nbsp;&nbsp;&nbsp;<a href=\"#{e[0]}\">#{e[0].split('/')[-1]}</a> (#{e[1].to_i.to_human_readable}, #{e[2]})</td></tr>\n"
102:         end
103:         s += "</table></td></tr></table>\n"
104:       end
105:       s += "\n<hr width=\"100%\"/>\n"
106:       s += '<table width="100%" cellpadding="0" cellspacing="0">' + "\n"
107:       l = '<tr><td align="right"><font color="#ababab">%s</font>&nbsp;&nbsp;</td><td><font color="#ababab">%s</font></td></tr>' + "\n"
108:       if @date
109:         if localtime
110:           s += l % [ 'Date:', @date.to_s ]
111:         else
112:           s += l % [ 'Date:', @date.getutc.to_s ]
113:         end
114:       end
115:       s += l % [ 'Author:', creator.escape_html ] if creator
116:       s += l % [ 'Subject:', @subject.escape_html ] if @subject
117:       s += l % [ 'Filed under:', @categories.join(', ').escape_html ] unless @categories.empty?
118:       s += "</table>\n"
119:       s
120:     end

[Source]

    # File lib/feedparser/html-output.rb, line 54
54:     def to_html_with_headers(localtime = true)
55:       s = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html>\n<body>\n"
56:       s += to_html(localtime)
57:       s += "\n</body>\n</html>"
58:       s
59:     end

[Source]

     # File lib/feedparser/feedparser.rb, line 161
161:     def to_s(localtime = true)
162:       s = "--------------------------------\n" +
163:         "Title: #{@title}\nLink: #{@link}\n"
164:       if localtime or @date.nil?
165:         s += "Date: #{@date.to_s}\n"
166:       else
167:         s += "Date: #{@date.getutc.to_s}\n"
168:       end
169:       s += "Creator: #{creator}\n" +
170:         "Subject: #{@subject}\n"
171:       if defined?(@categories) and @categories.length > 0
172:         s += "Filed under: " + @categories.join(', ') + "\n"
173:       end
174:       s += "Content:\n#{content}\n"
175:       if defined?(@enclosures) and @enclosures.length > 0
176:         s2 = "Enclosures:\n"
177:         @enclosures.each do |e|
178:           s2 += e.join(' ') + "\n"
179:         end
180:         s += s2
181:       end
182:       return s
183:     end

[Source]

     # File lib/feedparser/text-output.rb, line 59
 59:     def to_text(localtime = true, wrapto = false, header = true)
 60:       s = ""
 61:       if header
 62:         s += "Item: "
 63:         s += @title if @title
 64:         s += "\n<#{@link}>" if @link
 65:         if @date
 66:           if localtime
 67:             s += "\nDate: #{@date.to_s}"
 68:           else
 69:             s += "\nDate: #{@date.getutc.to_s}"
 70:           end
 71:         end
 72:         s += "\n"
 73:       else
 74:         s += "<#{@link}>\n\n" if @link
 75:       end
 76:       s += "#{@content.html2text(wrapto).chomp}\n" if @content
 77:       if @enclosures and @enclosures.length > 0
 78:         s += "\nFiles:"
 79:         @enclosures.each do |e|
 80:           s += "\n #{e[0]} (#{e[1].to_i.to_human_readable}, #{e[2]})"
 81:         end
 82:       end
 83:       if not header
 84:         s += "-- "
 85:       end
 86:       s += "\nFeed: "
 87:       s += @feed.title if @feed.title
 88:       s += "\n<#{@feed.link}>" if @feed.link
 89:       if not header
 90:         s += "\nItem: "
 91:         s += @title if @title
 92:         s += "\n<#{@link}>" if @link
 93:         if @date
 94:           if localtime
 95:             s += "\nDate: #{@date.to_s}"
 96:           else
 97:             s += "\nDate: #{@date.getutc.to_s}"
 98:           end
 99:         end
100:       end
101:       s += "\nAuthor: #{creator}" if creator
102:       s += "\nSubject: #{@subject}" if @subject
103:       s += "\nFiled under: #{@categories.join(', ')}" unless @categories.empty?
104:       s += "\n" # final newline, for compat with history
105:       s 
106:     end

[Validate]