ディレクトリにあるファイルをPodcastRSSにするだけの簡単なお仕事
#!/usr/bin/env ruby
require 'optparse'
require 'uri'
require 'rss/maker'
config = {}
ARGV.options do |o|
o.on('-t VAL') {|v| config[:target] = v }
o.on('-b VAL') {|v| config[:base_uri] = URI.escape(File::dirname(v + '/a') + '/') }
o.on('-o VAL') {|v| config[:output] = v }
o.on('--title VAL') {|v| config[:title] = v }
o.parse!
end
time = Time.now.strftime("%a, %d %b %Y %X +0900")
def get_type(f)
case File::extname(f)
when '.mp3'
return 'audio/mpeg'
when '.m4a'
return 'audio/x-m4a'
when '.mp4'
return 'video/mp4'
when '.m4v'
return 'video/x-m4v'
when '.mov'
return 'video/quicktime'
when '.pdf'
return 'application/pdf'
end
end
rss = RSS::Maker.make("2.0") do |m|
rss_uri = config[:base_uri] + File::basename(config[:output])
m.channel.about = rss_uri
m.channel.title = config[:title] || ''
m.channel.description = rss_uri
m.channel.link = rss_uri
m.channel.pubDate = time
m.items.do_sort = true
Dir::glob(config[:target]).each do |f|
i = m.items.new_item
uri = URI.escape(config[:base_uri] + File::basename(f))
time = File.mtime(f).strftime("%a, %d %b %Y %X +0900")
i.author = '[email protected]'
i.dc_creator = '[email protected]'
i.description = File::basename f
i.title = File::basename f
i.link = uri
i.pubDate = time
i.date = time
i.content_encoded = uri
i.enclosure.url = uri
i.enclosure.length = File::stat(f).size.to_s
i.enclosure.type = get_type(f)
i.guid.content = uri
end
end
File.open(config[:output], 'w') do |f|
f.write rss.to_s
end
使い方
./mkpodcast.rb -t "/tmp/*.mp4" -b "http://localhost/" -o /tmp/podcast.xml --title "こんにちわこんにちわ"
なんか色々不満あるけど、使い捨てスクリプトにはこれくらいで十分かな。細かい使い方はソース嫁と言うことで。
追記
ファイルの最終更新時間でソートするようにしてみた