#!/usr/bin/env ruby require 'date' require 'yaml' require 'bundler/inline' gemfile do source 'https://rubygems.org' gem 'builder' end class Feed attr_reader :catalogue def initialize(catalogue) @catalogue = catalogue end def to_xml builder = Builder::XmlMarkup.new(indent: 2) builder.instruct! :xml, version: "1.0", encoding: "UTF-8" builder.rss(version: '2.0', 'xmlns:itunes' => "http://www.itunes.com/dtds/podcast-1.0.dtd", "xmlns:atom" => "http://www.w3.org/2005/Atom") do builder.channel do builder.atom :link, rel: 'self', type: 'application/atom+xml', href: "#{catalogue[:url]}/feed.rss", title: catalogue[:title] builder.title catalogue[:title] builder.link catalogue[:url] builder.language catalogue[:language] builder.copyright catalogue[:copyright] builder.itunes :subtitle, catalogue[:subtitle] builder.itunes :author, catalogue[:author] builder.itunes :summary, catalogue[:summary] builder.description catalogue[:description] builder.itunes :owner do builder.itunes :name, catalogue[:author] builder.itunes :email, catalogue[:email] end builder.itunes :image, href: catalogue[:image] builder.itunes :category, text: "Technology" builder.itunes :explicit, "no" catalogue[:episodes].each do |episode| builder.item do builder.title episode[:name] builder.itunes :author, episode[:author] builder.itunes :subtitle, episode[:subtitle] builder.itunes :summary do builder.cdata! episode[:summary] end builder.itunes :image, href: catalogue[:image] builder.enclosure length: episode[:mp3_size_bytes], type: episode[:mime_type], url: episode[:mp3_url] builder.guid episode[:permalink] builder.pubDate episode[:date].rfc822 builder.itunes :duration, episode[:duration] builder.itunes :explicit, 'no' end end end end builder.target! end end data = YAML.safe_load( IO.read('episodes.yml'), permitted_classes: [Date], symbolize_names: true ) puts Feed.new(data).to_xml