如何使用RSS:Maker?</content:encoded>在RSS 2.0提要中生成<content:encoded>元素

时间:2013-10-25 13:09:27

标签: ruby rss

我正在使用Ruby 1.9.3 RSS :: Maker模块为播客生成RSS 2.0提要。我想开始为节目笔记添加<content:encoded>元素。这是我生成RSS的代码。

s3_bucket = AWS::S3::Bucket.find(options[:bucket])

content = RSS::Maker.make(version) do |m|
        m.channel.title = options[:title]
        m.channel.link = options[:link]
        m.channel.description = options[:desc]
        m.channel.language = options[:language]
        m.channel.itunes_image = options[:image]
        m.items.do_sort = true

        s3_bucket.select{|object| object.key =~ /[\s\w]+\.(m4b|mp3|m4a|ogg|aac)/}.each do |audio|
                i = m.items.new_item
                i.link = audio.url(:authenticated => false)  
                i.title = audio.key.split(".")[0]
                i.author = options[:author]
                i.pubDate = audio.last_modified
                i.guid.content = audio.etag
                i.enclosure.url = i.link
                i.enclosure.length = audio.content_length
                i.enclosure.type = audio.content_type
                # Insert content:encoded code here
  end 
end

为了生成我尝试过的<content:encoded>元素:

i.encoded :content audio.metadata[:content]

i.encoded :content, audio.metadata[:content]

i.content = audio.metadata[:content]

i.content.encoded = audio.metadata[:content]

i.encoded = audio.metadata[:content]

i.encoded.content = audio.metadata[:content]

这些都不起作用,并且大多数都会抛出NoSuchMethod异常 - 根据RSS :: Maker模块的文档,这并不奇怪。

有没有办法使用RSS :: Maker添加名称空间的任意元素?

1 个答案:

答案 0 :(得分:1)

您正在寻找i.content_encoded

文档不是很好,所以我使用i.methods来获取我可以在Feed项目上使用的方法列表。 methods适用于所有对象。

列表很长,因此您很可能只想显示可以写入的方法,例如:

RSS::Maker.make("2.0") do |ma|
  puts ma.items.new_item.methods.keep_if { |m|
    m.to_s.end_with?("=")
  }.join("\n")
end