class PodcastFeedGenerator::Generator
Public Instance Methods
generate(feed_info)
click to toggle source
# File lib/podcast_feed_generator.rb, line 92 def generate feed_info builder = Nokogiri::XML::Builder.new do |xml| detect_duplicate_guids feed_info["episodes"] verifyHasArtwork feed_info["podcast"] verifyHasCategories feed_info["podcast"] xml.rss('xmlns:content' => "http://purl.org/rss/1.0/modules/content/", "xmlns:wfw" => "http://wellformedweb.org/CommentAPI/", "xmlns:itunes" => "http://www.itunes.com/dtds/podcast-1.0.dtd", "xmlns:dc" => "http://purl.org/dc/elements/1.1/", "xmlns:media" => "http://search.yahoo.com/mrss/", "version" => "2.0") { channel_details = feed_info["podcast"] xml.channel { xml.title channel_details["title"] xml.description channel_details["description"] xml.link channel_details["link"] xml.lastBuildDate channel_details["lastBuildDate"] || Time.now.rfc2822 xml.generator channel_details["generator"] || DEFAULT_GENERATOR_STRING xml.language channel_details["language"] || "en-US" xml.copyright channel_details["copyright"] xml['itunes'].author channel_details["author"] || channel_details["author"] xml['itunes'].subtitle channel_details["subtitle"] || channel_details["description"] xml['itunes'].summary channel_details["summary"] || channel_details["description"] xml['itunes'].explicit channel_details["explicit"] || "no" xml['itunes'].type channel_details["podcastType"] || "episodic" xml['itunes'].owner { xml['itunes'].name channel_details["ownerName"] xml['itunes'].email channel_details["ownerEmail"] } xml['itunes'].image("href" => channel_details["podcastArtworkUrl"] ) unless channel_details["categories"].nil? channel_details["categories"].each do |category_name| xml['itunes'].category("text" => category_name) end end episodes = feed_info["episodes"].each_with_index do |episode, index| episode["episodeNumber"] = episode["episodeNumber"] || (feed_info["episodes"].length - index) end feed_info["episodes"].each_with_index do |episode, index| verifyHasDuration episode verifyMediaFileUrl episode verifyMediaFileBytes episode xml.item { xml.title episode["title"] xml['dc'].creator episode["creator"] || channel_details["author"] xml.author episode["creator"] || channel_details["author"] xml.pubDate episode["pubDate"] xml.link episode["link"] xml.guid("isPermalink": episode["guidIsPermalink"]){ xml.text episode["guid"] || (0...32).map { (65 + rand(26)).chr }.join } xml.description episode["description"] xml["content"].encoded { xml.text "<![CDATA[#{episode["htmlDescription"]} ]]>" } xml['itunes'].author episode["author"] xml['itunes'].subtitle episode["subtitle"] || episode["description"] xml['itunes'].summary episode["summary"] || episode["description"] xml['itunes'].explicit episode["explicit"] || 'no' xml['itunes'].duration episode["duration"] xml['itunes'].image("href"=> episode["episodeArtUrl"] || channel_details["podcastArtworkUrl"]) xml['itunes'].episode episode["episodeNumber"] xml['itunes'].season episode["seasonNumber"] xml['itunes'].title episode["itunesTitle"] || episode["title"] xml['itunes'].episodeType episode["episodeType"] || "full" xml.enclosure( "url" => episode["mediaFileUrl"], "type" => episode["mediaMimeType"] || "audio/mpeg", "length" => episode["mediaFileSizeBytes"] ) xml['media'].content( "url"=> episode["mediaFileUrl"], "type" => episode["mediaMimeType"] || "audio/mpeg", "length" => episode["mediaFileSizeBytes"], "isDefault" => episode["mediaIsDefault"] || "true", "medium" => episode["medium"] || "audio" ) { xml['media'].title("type" => "plain") { xml.text episode["title"] } } } end } } end builder.to_xml end