Ruby RSSライブラリでエンクロージャを指定するにはどうすればよいですか?
概要
Ruby RSS ライブラリを使用してポッドキャスト用の RSS フィードを構築しようとしています。エンクロージャの値を指定していますが、エンクロージャはフィードに追加されず、サイレントに失敗します。
エンクロージャをフィード項目に含めるには何をする必要がありますか?
rss = RSS::Maker.make("atom") do |maker|
maker.channel.id = "my_channel"
maker.channel.updated = Time.now.to_s
maker.channel.author = "me"
maker.channel.title = "my channel"
maker.items.new_item do |item|
item.title = "my episode"
item.id = "my_episode"
item.updated = Time.now.to_s
item.enclosure.url = "https://example.com"
item.enclosure.type = "audio/mpeg"
item.enclosure.length = 123
end
end
出力:
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<author>
<name>me</name>
</author>
<id>my_channel</id>
<title>my channel</title>
<updated>2024-05-11T12:09:06+01:00</updated>
<entry>
<id>my_episode</id>
<title>my episode</title>
<updated>2024-05-11T12:09:06+01:00</updated>
<dc:date>2024-05-11T12:09:06+01:00</dc:date>
</entry>
<dc:date>2024-05-11T12:09:06+01:00</dc:date>
</feed>
解決策
あなたの問題は、Atom Maker の使用法です。 Atom は、RSS 仕様と同じように「エンクロージャー」を認識しません。
Atom はリンク rel 属性 (仕様) を介して「エンクロージャ」を持つことができます。
したがって、Atom Maker を使用するには、次のようなことができるはずです。
item.link.rel = "enclosure"
item.link.href = "https://example.com"
item.link.type = "audio/mpeg"
item.link.length = 123
これにより、次のようなリンク ノードが生成されます。
<link rel="enclosure" type="audio/mpeg" length="123" href="https://example.com"/>
真のエンクロージャ ノードを生成したい場合は、RSS Maker のいずれかを使用する必要があります。例 2.0 (仕様) の場合。そうすれば、既存のコードは期待どおりに動作します。
RSS::Maker.make("2.0") do |maker|
# ...
maker.items.new_item do |item|
#...
item.enclosure.url = "https://example.com"
item.enclosure.type = "audio/mpeg"
item.enclosure.length = 123
end
end
これにより、次のようなエンクロージャ ノードが生成されます。
<enclosure url="https://example.com" length="123" type="audio/mpeg" />