Module FeedTools
In: lib/feed_tools/version.rb
lib/feed_tools/database_feed_cache.rb
lib/feed_tools/feed_structures.rb
lib/feed_tools/feed_item.rb
lib/feed_tools/helpers/generic_helper.rb
lib/feed_tools/helpers/uri_helper.rb
lib/feed_tools/helpers/feed_helper.rb
lib/feed_tools/helpers/retrieval_helper.rb
lib/feed_tools/helpers/feed_tools_helper.rb
lib/feed_tools/helpers/html_helper.rb
lib/feed_tools/helpers/feed_item_helper.rb
lib/feed_tools/helpers/xml_helper.rb
lib/feed_tools/helpers/debug_helper.rb
lib/feed_tools/vendor/uri.rb
lib/feed_tools/feed.rb
lib/feed_tools.rb
ActiveRecord::Base DatabaseFeedCache StandardError FeedAccessError FeedItem Feed URI Cloud Link Author Image Enclosure TextInput Category lib/feed_tools/feed_item.rb lib/feed_tools/feed.rb lib/feed_tools.rb lib/feed_tools/vendor/uri.rb lib/feed_tools/database_feed_cache.rb lib/feed_tools/feed_structures.rb FeedToolsHelper FeedItemHelper DebugHelper HtmlHelper FeedHelper XmlHelper RetrievalHelper UriHelper GenericHelper FEED_TOOLS_VERSION FeedTools dot/m_79_0.png

feed_tools.rb

 FeedTools was designed to be a simple XML feed parser, generator, and translator with a built-in
 caching system.

Example

  slashdot_feed = FeedTools::Feed.open('http://www.slashdot.org/index.rss')
  slashdot_feed.title
  => "Slashdot"
  slashdot_feed.description
  => "News for nerds, stuff that matters"
  slashdot_feed.link
  => "http://slashdot.org/"
  slashdot_feed.items.first.find_node("slash:hitparade/text()").value
  => "43,37,28,23,11,3,1"

Methods

Classes and Modules

Module FeedTools::DebugHelper
Module FeedTools::FeedHelper
Module FeedTools::FeedItemHelper
Module FeedTools::FeedToolsHelper
Module FeedTools::GenericHelper
Module FeedTools::HtmlHelper
Module FeedTools::RetrievalHelper
Module FeedTools::UriHelper
Module FeedTools::XmlHelper
Class FeedTools::Author
Class FeedTools::Category
Class FeedTools::Cloud
Class FeedTools::DatabaseFeedCache
Class FeedTools::Enclosure
Class FeedTools::Feed
Class FeedTools::FeedAccessError
Class FeedTools::FeedItem
Class FeedTools::Image
Class FeedTools::Link
Class FeedTools::TextInput
Class FeedTools::URI

Constants

EnclosureHash = Struct.new( "EnclosureHash", :hash, :type )   TODO: Make these actual classes instead of structs
============================================
EnclosurePlayer = Struct.new( "EnclosurePlayer", :url, :height, :width )
EnclosureCredit = Struct.new( "EnclosureCredit", :name, :role )
EnclosureThumbnail = Struct.new( "EnclosureThumbnail", :url, :height, :width )

Public Class methods

Creates a merged "planet" feed from a set of urls.

Options are:

  • :multi_threaded - If set to true, feeds will be retrieved concurrently. Not recommended when used in conjunction with the DatabaseFeedCache as it will open multiple connections to the database.

[Source]

     # File lib/feed_tools.rb, line 337
337:   def FeedTools.build_merged_feed(url_array, options = {})
338:     FeedTools::GenericHelper.validate_options([ :multi_threaded ],
339:                      options.keys)
340:     options = { :multi_threaded => false }.merge(options)
341:     warn("FeedTools.build_merged_feed is deprecated.")
342:     return nil if url_array.nil?
343:     merged_feed = FeedTools::Feed.new
344:     retrieved_feeds = []
345:     if options[:multi_threaded]
346:       feed_threads = []
347:       url_array.each do |feed_url|
348:         feed_threads << Thread.new do
349:           feed = Feed.open(feed_url)
350:           retrieved_feeds << feed
351:         end
352:       end
353:       feed_threads.each do |thread|
354:         thread.join
355:       end
356:     else
357:       url_array.each do |feed_url|
358:         feed = Feed.open(feed_url)
359:         retrieved_feeds << feed
360:       end
361:     end
362:     retrieved_feeds.each do |feed|
363:       merged_feed.entries = merged_feed.entries.concat(
364:         feed.entries.collect do |entry|
365:           new_entry = entry.dup
366:           new_entry.title = "#{feed.title}: #{entry.title}"
367:           new_entry
368:         end
369:       )
370:     end
371:     return merged_feed
372:   end

Returns the configuration hash for FeedTools

[Source]

     # File lib/feed_tools.rb, line 253
253:   def FeedTools.configurations
254:     if @configurations.blank?
255:       FeedTools.load_configurations()
256:     end
257:     return @configurations
258:   end

Sets the configuration hash for FeedTools

[Source]

     # File lib/feed_tools.rb, line 261
261:   def FeedTools.configurations=(new_configurations)
262:     @configurations = new_configurations
263:   end

Returns the current caching mechanism.

Objects of this class must accept the following messages:

 id
 id=
 url
 url=
 title
 title=
 link
 link=
 feed_data
 feed_data=
 feed_data_type
 feed_data_type=
 etag
 etag=
 last_modified
 last_modified=
 save

Additionally, the class itself must accept the following messages:

 find_by_id
 find_by_url
 initialize_cache
 connected?

[Source]

     # File lib/feed_tools.rb, line 295
295:   def FeedTools.feed_cache
296:     return nil if FeedTools.configurations[:feed_cache].blank?
297:     class_name = FeedTools.configurations[:feed_cache].to_s
298:     if @feed_cache.nil? || @feed_cache.to_s != class_name
299:       begin
300:         cache_class = eval(class_name)
301:         if cache_class.kind_of?(Class)
302:           @feed_cache = cache_class
303:           if @feed_cache.respond_to? :initialize_cache
304:             @feed_cache.initialize_cache
305:           end
306:           return cache_class
307:         else
308:           return nil
309:         end
310:       rescue
311:         return nil
312:       end
313:     else
314:       return @feed_cache
315:     end
316:   end

Returns true if FeedTools.feed_cache is not nil and a connection with the cache has been successfully established. Also returns false if an error is raised while trying to determine the status of the cache.

[Source]

     # File lib/feed_tools.rb, line 321
321:   def FeedTools.feed_cache_connected?
322:     begin
323:       return false if FeedTools.feed_cache.nil?
324:       return FeedTools.feed_cache.connected?
325:     rescue
326:       return false
327:     end
328:   end

[Source]

     # File lib/feed_tools.rb, line 203
203:   def FeedTools.load_configurations
204:     if @configurations.blank?
205:       # TODO: Load this from a config file.
206:       config_hash = {}
207:       @configurations = {
208:         :feed_cache => nil,
209:         :disable_update_from_remote => false,
210:         :proxy_address => nil,
211:         :proxy_port => nil,
212:         :proxy_user => nil,
213:         :proxy_password => nil,
214:         :auth_user => nil,
215:         :auth_password => nil,
216:         :auth_scheme => nil,
217:         :http_timeout => nil,
218:         :user_agent =>
219:           "FeedTools/#{FeedTools::FEED_TOOLS_VERSION::STRING} " + 
220:           "+http://www.sporkmonger.com/projects/feedtools/",
221:         :generator_name =>
222:           "FeedTools/#{FeedTools::FEED_TOOLS_VERSION::STRING}",
223:         :generator_href =>
224:           "http://www.sporkmonger.com/projects/feedtools/",
225:         :tidy_enabled => false,
226:         :tidy_options => {},
227:         :lazy_parsing_enabled => true,
228:         :serialization_enabled => false,
229:         :idn_enabled => true,
230:         :sanitization_enabled => true,
231:         :sanitize_with_nofollow => true,
232:         :always_strip_wrapper_elements => true,
233:         :timestamp_estimation_enabled => true,
234:         :url_normalization_enabled => true,
235:         :entry_sorting_property => "time",
236:         :strip_comment_count => false,
237:         :tab_spaces => 2,
238:         :max_ttl => 3.days.to_s,
239:         :default_ttl => 1.hour.to_s,
240:         :output_encoding => "utf-8"
241:       }.merge(config_hash)
242:     end
243:     return @configurations
244:   end

Resets configuration to a clean load

[Source]

     # File lib/feed_tools.rb, line 247
247:   def FeedTools.reset_configurations
248:     @configurations = nil
249:     FeedTools.load_configurations
250:   end

[Validate]