dropcaster 0.0.4 → 0.0.5.rc1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -1,47 +1,11 @@
1
- # encoding: utf-8
2
-
3
- require 'rubygems'
4
- require 'bundler'
5
- begin
6
- Bundler.setup(:default, :development)
7
- rescue Bundler::BundlerError => e
8
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
10
- exit e.status_code
11
- end
12
- require 'rake'
13
-
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gem|
16
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = "dropcaster"
18
- gem.homepage = "http://nerab.github.com/dropcaster"
19
- gem.license = "MIT"
20
- gem.summary = %Q{Simple Podcast Publishing with Dropbox}
21
- gem.description = %Q{Dropcaster is a podcast feed generator for the command line. It is most simple to use with Dropbox, but works equally well with any other hoster.}
22
- gem.email = "nerab@gmx.at"
23
- gem.authors = ["nerab"]
24
- gem.executables << 'dropcaster'
25
- gem.executables << 'lstags'
26
- # dependencies defined in Gemfile
27
- end
28
- Jeweler::RubygemsDotOrgTasks.new
29
-
30
- require 'rake/testtask'
31
- Rake::TestTask.new(:test) do |test|
32
- test.libs << 'lib' << 'test'
33
- test.pattern = 'test/**/test_*.rb'
34
- test.verbose = true
35
- end
36
-
37
- task :default => :test
38
-
39
- require 'rdoc/task'
40
- RDoc::Task.new do |rdoc|
41
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
42
-
43
- rdoc.rdoc_dir = 'rdoc'
44
- rdoc.title = "dropcaster #{version}"
45
- rdoc.rdoc_files.include('README*')
46
- rdoc.rdoc_files.include('lib/**/*.rb')
47
- end
1
+ # encoding: utf-8
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new(:test) do |test|
7
+ test.libs << 'test'
8
+ test.pattern = 'test/**/test_*.rb'
9
+ end
10
+
11
+ task :default => :test
data/TODO CHANGED
@@ -1,12 +1,13 @@
1
- * Handle channel URLs not ending with a slash (may be required for hosts not discovering an index.html, like Dropbox)
2
- * Support subtitle and keywords in channel and items
3
- * If the option for the item template is present (e.g. --item-template templates/item.html.erb), generate individual html pages for each item from it and link to it from the index.html. Leave it off by default.
4
- * Print warnings when one of the specs from http://www.apple.com/itunes/podcasts/specs.html is violated
5
- * Allow muting of the iTunes warnings (see above) using a commandline switch
6
- * Implement sidecar files
7
- * Support other file types than mp3 (e.g. ogg or pdf)
8
- * Treat lyrics as plain text for the episode page, and with an optional command line switch we could also support markdown etc.
9
- * Potential optimization for large numbers of mp3 files: If there is an existing index.rss file, do not re-read the information from those files that are still there and still have the same hash value.
10
- * It feels pretty awkward to refer to the ID3v2 frame names all the time. After all, this is an implementation detail. Maybe we can wrap the frames with a nicer name, but still allow access to the underlying mp3info library? Maybe all we need is some aliasing and / or delegation?
11
- * Potentially replace the ERB template with Builder::XmlMarkup, see http://builder.rubyforge.org/ (the same that Rails uses)
12
- * Expose strip_itunes_private as commandline parameter
1
+ * If the option for the item template is present (e.g. --item-template templates/item.html.erb), generate individual html pages for each item from it and link to it from the index.html. Leave it off by default.
2
+ * Derive nice-looking HTML templates from Wordpress' Twenty Eleven theme
3
+ * Print warnings when one of the specs from http://www.apple.com/itunes/podcasts/specs.html is violated
4
+ * Allow muting of the iTunes warnings (see above) using a commandline switch
5
+ * Implement sidecar files
6
+ * Write up some documentation on how the mapping between ID3 tags, iTunes and channel / item attributes works
7
+ * Support other file types than mp3 (e.g. ogg or pdf)
8
+ * Treat lyrics as plain text for the episode page, and with an optional command line switch we could also support markdown etc.
9
+ * Potential optimization for large numbers of mp3 files: If there is an existing index.rss file, do not re-read the information from those files that are still there and still have the same hash value.
10
+ * It feels pretty awkward to refer to the ID3v2 frame names all the time. After all, this is an implementation detail. Maybe we can wrap the frames with a nicer name, but still allow access to the underlying mp3info library? Maybe all we need is some aliasing and / or delegation?
11
+ * Potentially replace the ERB template with Builder::XmlMarkup, see http://builder.rubyforge.org/ (the same that Rails uses)
12
+ * Improve handling of iTunes' normalization data. ```id3info test/fixtures/iTunes.mp3``` shows that comments do have a key, and we want to skip iTunNORM.
13
+ * Write up a man page so that [gem man](http://defunkt.io/gem-man/) can pick it up
data/bin/dropcaster CHANGED
@@ -1,117 +1,129 @@
1
- #!/usr/bin/env ruby
2
-
3
- $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
4
-
5
- require 'rubygems'
6
- require 'yaml'
7
-
8
- help = <<HELP
9
- Dropcaster is a podcast feed generator for the command line.
10
-
11
- Author: Nicolas E. Rabenau nerab@gmx.at
12
- Homepage: http://nerab.github.com/dropcaster/
13
-
14
- Basic Usage:
15
-
16
- dropcaster Prints a podcast feed document for the mp3 files in the current directory.
17
- dropcaster [FILE]... Prints a podcast feed document for FILES
18
- dropcaster [DIR]... Prints a podcast feed document for the mp3 files in DIR
19
-
20
- Options:
21
- HELP
22
-
23
- def usage
24
- "Run '#{File.basename(__FILE__)} --help' for further help."
25
- end
26
-
27
- require 'optparse'
28
- require 'dropcaster'
29
-
30
- options = Hash.new
31
- options[:auto_detect_channel_file] = true
32
-
33
- opts = OptionParser.new do |opts|
34
- opts.banner = help
35
-
36
- opts.on("--verbose", "Verbose mode - displays additional diagnostic information") do |file|
37
- Dropcaster.logger = Logger.new(STDERR)
38
- Dropcaster.logger.formatter = Dropcaster::LogFormatter.new
39
- Dropcaster.logger.level = Logger::INFO
40
- end
41
-
42
- opts.on("--channel FILE", "Read the channel definition from FILE instead of channel.yml in the current directory.") do |file|
43
- begin
44
- Dropcaster.logger.info "Reading channel definition from #{file}"
45
- options = YAML.load_file(file).merge(options)
46
- options[:auto_detect_channel_file] = false
47
- rescue
48
- Dropcaster.logger.error "Could not load channel definition. #{$!.message}"
49
- Dropcaster.logger.info $!.backtrace
50
- exit(1)
51
- end
52
- end
53
-
54
- opts.on("--title STRING", "Use STRING as the channel's title. Overrides settings read from channel definition file.") do |title|
55
- Dropcaster.logger.info "Setting channel title to '#{title}' via command line"
56
- options[:title] = title
57
- end
58
-
59
- opts.on("--url URL", "Use URL as the channel's url. Overrides settings read from channel definition file.") do |url|
60
- Dropcaster.logger.info "Setting channel URL to '#{url}' via command line"
61
- options[:url] = url
62
- end
63
-
64
- opts.on("--description STRING", "Use STRING as the channel's description. Overrides settings read from channel definition file.") do |description|
65
- Dropcaster.logger.info "Setting channel description to '#{description}' via command line"
66
- options[:description] = description
67
- end
68
-
69
- opts.on("--enclosures URL", "Use URL as the base URL for the channel's enclosures. Overrides settings read from channel definition file.") do |enclosures_url|
70
- Dropcaster.logger.info "Setting enclosures base URL to '#{enclosures_url}' via command line"
71
- options[:enclosures_url] = enclosures_url
72
- end
73
-
74
- opts.on("--image URL", "Use URL as the channel's image URL. Overrides settings read from channel definition file.") do |image_url|
75
- Dropcaster.logger.info "Setting image URL to '#{image_url}' via command line"
76
- options[:image_url] = image_url
77
- end
78
-
79
- opts.on("--channel-template FILE", "Use FILE as template for generating the channel feed. Overrides the default that comes with Dropcaster.") do |file|
80
- Dropcaster.logger.info "Using'#{file}' as channel template file"
81
- options[:channel_template] = file
82
- end
83
-
84
- opts.on("--version", "Display current version") do
85
- puts "#{File.basename(__FILE__)} " + Dropcaster::VERSION
86
- exit 0
87
- end
88
- end
89
-
90
- opts.parse!
91
- sources = ARGV.blank? ? '.' : ARGV
92
-
93
- if options[:auto_detect_channel_file]
94
- # There was no channel file specified, so we try to load channel.yml from sources dir
95
- channel_file = Dropcaster::ChannelFileLocator.locate(sources)
96
-
97
- if File.exists?(channel_file)
98
- Dropcaster.logger.info "Auto-detected channel file at #{channel_file}"
99
- options_from_yaml = YAML.load_file(channel_file)
100
- options = options_from_yaml.merge(options)
101
- else
102
- Dropcaster.logger.error "No channel file found at #{channel_file})"
103
- Dropcaster.logger.info usage
104
- exit(1) # No way to continue without a channel definition
105
- end
106
- end
107
-
108
- Dropcaster.logger.info "Generating the channel with these options: #{options.inspect}"
109
-
110
- begin
111
- puts Dropcaster::Channel.new(sources, options).to_rss
112
- rescue
113
- Dropcaster.logger.error $!.message
114
- Dropcaster.logger.debug $!.backtrace
115
- Dropcaster.logger.info usage
116
- exit(1)
117
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
4
+
5
+ require 'yaml'
6
+
7
+ help = <<HELP
8
+ Dropcaster is a podcast feed generator for the command line.
9
+
10
+ Author: Nicolas E. Rabenau nerab@gmx.at
11
+ Homepage: http://rubydoc.info/gems/dropcaster/file/README.md
12
+
13
+ Basic Usage:
14
+
15
+ dropcaster Prints a podcast feed document for the mp3 files in the current directory.
16
+ dropcaster [FILE]... Prints a podcast feed document for FILES
17
+ dropcaster [DIR]... Prints a podcast feed document for the mp3 files in DIR
18
+
19
+ Options:
20
+ HELP
21
+
22
+ def usage
23
+ "Run '#{File.basename(__FILE__)} --help' for further help."
24
+ end
25
+
26
+ require 'optparse'
27
+ require 'dropcaster'
28
+
29
+ options = Hash.new
30
+ options[:auto_detect_channel_file] = true
31
+
32
+ opts = OptionParser.new do |opts|
33
+ opts.banner = help
34
+
35
+ opts.on("--verbose", "Verbose mode - displays additional diagnostic information") do |file|
36
+ Dropcaster.logger = Logger.new(STDERR)
37
+ Dropcaster.logger.formatter = Dropcaster::LogFormatter.new
38
+ Dropcaster.logger.level = Logger::INFO
39
+ end
40
+
41
+ opts.on("--trace", "Verbose mode - displays additional diagnostic information") do |file|
42
+ Dropcaster.logger = Logger.new(STDERR)
43
+ Dropcaster.logger.formatter = Dropcaster::LogFormatter.new
44
+ Dropcaster.logger.level = Logger::DEBUG
45
+ end
46
+
47
+ opts.on("--channel FILE", "Read the channel definition from FILE instead of channel.yml in the current directory.") do |file|
48
+ begin
49
+ Dropcaster.logger.info "Reading channel definition from #{file}"
50
+ options = YAML.load_file(file).merge(options)
51
+ options[:auto_detect_channel_file] = false
52
+ rescue
53
+ Dropcaster.logger.error "Could not load channel definition. #{$!.message}"
54
+ Dropcaster.logger.info $!.backtrace
55
+ exit(1)
56
+ end
57
+ end
58
+
59
+ opts.on("--title STRING", "Use STRING as the channel's title. Overrides settings read from channel definition file.") do |title|
60
+ Dropcaster.logger.info "Setting channel title to '#{title}' via command line"
61
+ options[:title] = title
62
+ end
63
+
64
+ opts.on("--subtitle STRING", "Use STRING as the channel's subtitle. Overrides settings read from channel definition file.") do |subtitle|
65
+ Dropcaster.logger.info "Setting channel subtitle to '#{subtitle}' via command line"
66
+ options[:subtitle] = subtitle
67
+ end
68
+
69
+ opts.on("--url URL", "Use URL as the channel's url. Overrides settings read from channel definition file.") do |url|
70
+ Dropcaster.logger.info "Setting channel URL to '#{url}' via command line"
71
+ options[:url] = url
72
+ end
73
+
74
+ opts.on("--description STRING", "Use STRING as the channel's description. Overrides settings read from channel definition file.") do |description|
75
+ Dropcaster.logger.info "Setting channel description to '#{description}' via command line"
76
+ options[:description] = description
77
+ end
78
+
79
+ opts.on("--enclosures URL", "Use URL as the base URL for the channel's enclosures. Overrides settings read from channel definition file.") do |enclosures_url|
80
+ Dropcaster.logger.info "Setting enclosures base URL to '#{enclosures_url}' via command line"
81
+ options[:enclosures_url] = enclosures_url
82
+ end
83
+
84
+ opts.on("--image URL", "Use URL as the channel's image URL. Overrides settings read from channel definition file.") do |image_url|
85
+ Dropcaster.logger.info "Setting image URL to '#{image_url}' via command line"
86
+ options[:image_url] = image_url
87
+ end
88
+
89
+ opts.on("--channel-template FILE", "Use FILE as template for generating the channel feed. Overrides the default that comes with Dropcaster.") do |file|
90
+ Dropcaster.logger.info "Using'#{file}' as channel template file"
91
+ options[:channel_template] = file
92
+ end
93
+
94
+ opts.on("--version", "Display current version") do
95
+ puts "#{File.basename(__FILE__)} " + Dropcaster::VERSION
96
+ exit 0
97
+ end
98
+ end
99
+
100
+ opts.parse!
101
+ sources = ARGV.blank? ? '.' : ARGV
102
+
103
+ if options[:auto_detect_channel_file]
104
+ # There was no channel file specified, so we try to load channel.yml from sources dir
105
+ channel_file = Dropcaster::ChannelFileLocator.locate(sources)
106
+
107
+ if File.exists?(channel_file)
108
+ Dropcaster.logger.info "Auto-detected channel file at #{channel_file}"
109
+ options_from_yaml = YAML.load_file(channel_file)
110
+ options = options_from_yaml.merge(options)
111
+ else
112
+ Dropcaster.logger.error "No channel file found at #{channel_file})"
113
+ Dropcaster.logger.info usage
114
+ exit(1) # No way to continue without a channel definition
115
+ end
116
+ end
117
+
118
+ Dropcaster.logger.info "Generating the channel with these options: #{options.inspect}"
119
+
120
+ begin
121
+ puts Dropcaster::Channel.new(sources, options).to_rss
122
+ rescue
123
+ Dropcaster.logger.error $!.message
124
+ $!.backtrace.each do |line|
125
+ Dropcaster.logger.debug(line)
126
+ end
127
+ Dropcaster.logger.info usage
128
+ exit(1)
129
+ end
data/bin/lstags CHANGED
@@ -1,45 +1,51 @@
1
- #!/usr/bin/env ruby
2
-
3
- unless ARGV.size == 1
4
- STDERR.puts "#{File.basename(__FILE__)}: Missing required parameter for the mp3 file to process"
5
- exit(1)
6
- end
7
-
8
- require 'rubygems'
9
- require 'mp3info'
10
-
11
- begin
12
- Mp3Info.open(ARGV.first) do |mp3info|
13
- puts 'ID3v1 tags:'
14
- mp3info.tag.keys.each{|key|
15
- puts " #{key} => #{mp3info.tag.send(key)}"
16
- }
17
- puts
18
- puts 'ID3v2 tags:'
19
- mp3info.tag2.keys.each{|key|
20
- case key
21
- when 'PIC'
22
- when 'APIC'
23
- # picture - do not print binary data
24
- when 'ULT'
25
- print " ULT => "
26
- block_counter = 0
27
- mp3info.tag2.ULT.bytes{|b|
28
- print "0x%02x " % b.to_i
29
- print b > 31 ? " '#{b.chr}' " : " " * 5
30
- if (block_counter += 1) > 7 # display in blocks of 8 bytes
31
- puts
32
- print " " * 9
33
- block_counter = 0
34
- end
35
- }
36
- puts
37
- else
38
- puts " #{key} => #{mp3info.tag2.send(key)}"
39
- end
40
- }
41
- end
42
- rescue
43
- puts "Error: #{$!.message}"
44
- exit(1)
45
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ unless ARGV.size == 1
4
+ STDERR.puts "#{File.basename(__FILE__)}: Missing required parameter for the mp3 file to process"
5
+ exit(1)
6
+ end
7
+
8
+ require 'rubygems'
9
+ require 'mp3info'
10
+
11
+ begin
12
+ file_name = ARGV.first
13
+
14
+ puts "Listing tags for file: #{file_name}"
15
+
16
+ Mp3Info.open(file_name) do |mp3info|
17
+ puts 'ID3v1 tags:'
18
+ mp3info.tag.keys.each{|key|
19
+ puts " #{key} => #{mp3info.tag.send(key)}"
20
+ }
21
+ puts
22
+ puts 'ID3v2 tags:'
23
+ mp3info.tag2.keys.each{|key|
24
+ case key
25
+ when 'PIC'
26
+ when 'APIC'
27
+ # picture - do not print binary data
28
+ when 'ULT'
29
+ print " ULT => "
30
+ block_counter = 0
31
+ mp3info.tag2.ULT.bytes{|b|
32
+ print "0x%02x " % b.to_i
33
+ print b > 31 ? " '#{b.chr}' " : " " * 5
34
+ if (block_counter += 1) > 7 # display in blocks of 8 bytes
35
+ puts
36
+ print " " * 9
37
+ block_counter = 0
38
+ end
39
+ }
40
+ puts
41
+ else
42
+ puts " #{key} => #{mp3info.tag2.send(key)}"
43
+ end
44
+ }
45
+ end
46
+ puts "Modification date: #{File.new(file_name).mtime}"
47
+
48
+ rescue
49
+ puts "Error: #{$!.message}"
50
+ exit(1)
51
+ end
@@ -1,81 +1,88 @@
1
- #
2
- # A sample RSS channel definition
3
- #
4
- # This file is read by Dropcaster
5
- # http://github.com/nerab/dropcaster
6
- #
7
- # It defines the properties of your podcast channel.
8
- #
9
-
10
- #
11
- # Title (name) of the podcast
12
- #
13
- :title: 'All About Everything'
14
-
15
- #
16
- # Short description of the podcast (a few words)
17
- #
18
- :subtitle: 'A show about everything'
19
-
20
- #
21
- # URL to the podcast.
22
- #
23
- :url: 'http://www.example.com/podcasts/everything/'
24
-
25
- #
26
- # Optional base URL for enclosure links
27
- #
28
- :enclosures_url: 'http://www.example.com/podcasts/everything/episodes'
29
-
30
- #
31
- # Language of the podcast - ISO 639-1 Alpha-2 list (two-letter language codes, some with possible modifiers, such as "en-us").
32
- #
33
- :language: 'en-us'
34
-
35
- #
36
- # Not visible in iTunes, but useful as a statement in the feed
37
- #
38
- :copyright: '© 2011 John Doe & Family'
39
-
40
- #
41
- # Author / creator of the podcast. In iTunes, it is displayed in the artist column.
42
- #
43
- :author: 'John Doe'
44
-
45
- #
46
- # Longer description of the podcast
47
- #
48
- :description: 'All About Everything is a show about everything. Each week we dive into any subject known to man and talk about it as much as we can. Look for our Podcast in the iTunes Store!'
49
-
50
- #
51
- # Contact information of the owner of the podcast. Not be publicly displayed in iTunes.
52
- #
53
- :owner:
54
- :name: 'John Doe'
55
- :email: 'john.doe@example.com'
56
-
57
- #
58
- # iTunes prefers square .jpg images that are at least 600 x 600 pixels
59
- #
60
- # If the URL does not start with http: or https:, it will be prefixed with the channel url.
61
- #
62
- :image_url: 'AllAboutEverything.jpg'
63
-
64
- #
65
- # Category / categories of the podcast
66
- #
67
- # For iTunes, see http://www.apple.com/itunes/podcasts/specs.html#categories for applicable values
68
- #
69
- # Examples:
70
- # :categories: 'Technology'
71
- # :categories: ['Technology', 'Gadgets']
72
- # :categories: ['TV & Film', ['Technology', 'Gadgets']]
73
- #
74
- # Don't HTML-escape the categories, this will be taken care of by Dropcaster
75
- #
76
- :categories: ['Technology', 'Gadgets']
77
-
78
- #
79
- # Yes, No or Clean, see http://www.apple.com/itunes/podcasts/specs.html#explicit
80
- #
81
- :explicit: No
1
+ #
2
+ # A sample RSS channel definition
3
+ #
4
+ # This file is read by Dropcaster
5
+ # http://github.com/nerab/dropcaster
6
+ #
7
+ # It defines the properties of your podcast channel.
8
+ #
9
+
10
+ #
11
+ # Title (name) of the podcast
12
+ #
13
+ :title: 'All About Everything'
14
+
15
+ #
16
+ # Short description of the podcast (a few words)
17
+ #
18
+ :subtitle: 'A show about everything'
19
+
20
+ #
21
+ # URL to the podcast.
22
+ #
23
+ :url: 'http://www.example.com/podcasts/everything/'
24
+
25
+ #
26
+ # Optional base URL for enclosure links
27
+ #
28
+ :enclosures_url: 'http://www.example.com/podcasts/everything/episodes'
29
+
30
+ #
31
+ # Language of the podcast - ISO 639-1 Alpha-2 list (two-letter language codes, some with possible modifiers, such as "en-us").
32
+ #
33
+ :language: 'en-us'
34
+
35
+ #
36
+ # Not visible in iTunes, but useful as a statement in the feed
37
+ #
38
+ :copyright: '© 2011 John Doe & Family'
39
+
40
+ #
41
+ # Author / creator of the podcast. In iTunes, it is displayed in the artist column.
42
+ #
43
+ :author: 'John Doe'
44
+
45
+ #
46
+ # Longer description of the podcast
47
+ #
48
+ :description: 'All About Everything is a show about everything. Each week we dive into any subject known to man and talk about it as much as we can. Look for our Podcast in the iTunes Store!'
49
+
50
+ #
51
+ # Contact information of the owner of the podcast. Not be publicly displayed in iTunes.
52
+ #
53
+ :owner:
54
+ :name: 'John Doe'
55
+ :email: 'john.doe@example.com'
56
+
57
+ #
58
+ # iTunes prefers square .jpg images that are at least 600 x 600 pixels
59
+ #
60
+ # If the URL does not start with http: or https:, it will be prefixed with the channel url.
61
+ #
62
+ :image_url: 'AllAboutEverything.jpg'
63
+
64
+ #
65
+ # Category / categories of the podcast
66
+ #
67
+ # For iTunes, see http://www.apple.com/itunes/podcasts/specs.html#categories for applicable values
68
+ #
69
+ # Examples:
70
+ # :categories: 'Technology'
71
+ # :categories: ['Technology', 'Gadgets']
72
+ # :categories: ['TV & Film', ['Technology', 'Gadgets']]
73
+ #
74
+ # Don't HTML-escape the categories, this will be taken care of by Dropcaster
75
+ #
76
+ :categories: ['Technology', 'Gadgets']
77
+
78
+ #
79
+ # Yes, No or Clean, see http://www.apple.com/itunes/podcasts/specs.html#explicit
80
+ #
81
+ :explicit: No
82
+
83
+ #
84
+ # Keywords
85
+ #
86
+ # Apple recommends to use not more than 12 keywords
87
+ #
88
+ :keywords: [salt, pepper, shaker, exciting]
@@ -1,19 +1,19 @@
1
- #
2
- # Sample sidecar file
3
- #
4
- # If this file is present side-by-side with an mp3 file, and if it has the same name as the mp3 (but with
5
- # an extension of yml or yaml), then any setting made in this file will be used instead of the value from the mp3.
6
- #
7
- :title: 'Title of the episode'
8
- :author: 'Author of the episode'
9
- :subtitle: 'Subtitle of the episode'
10
- :description: 'Desciption and summary of the episode'
11
- :image_url: 'URL to an image specific for this episode'
12
- :enclosure:
13
- :url: 'URL where this episode can be downloaded'
14
- :length: 42 # length of the episode in milliseconds
15
- :type: 'usually audio/mp3'
16
- :guid: 'Globally unique id of the episode'
17
- :pubDate: 'Date as per RFC 2822; e.g. Wed, 15 Jun 2005 19:00:00 GMT'
18
- :duration: 'Either HH:MM:SS, H:MM:SS, MM:SS, M:SS, or SS'
19
- :keywords: ['ruby', 'rails', 'podcast'] # up to 12 text keywords
1
+ #
2
+ # Sample sidecar file
3
+ #
4
+ # If this file is present side-by-side with an mp3 file, and if it has the same name as the mp3 (but with
5
+ # an extension of yml or yaml), then any setting made in this file will be used instead of the value from the mp3.
6
+ #
7
+ :title: 'Title of the episode'
8
+ :author: 'Author of the episode'
9
+ :subtitle: 'Subtitle of the episode'
10
+ :description: 'Desciption and summary of the episode'
11
+ :image_url: 'URL to an image specific for this episode'
12
+ :enclosure:
13
+ :url: 'URL where this episode can be downloaded'
14
+ :length: 42 # length of the episode in milliseconds
15
+ :type: 'usually audio/mp3'
16
+ :guid: 'Globally unique id of the episode'
17
+ :pubDate: 'Date as per RFC 2822; e.g. Wed, 15 Jun 2005 19:00:00 GMT'
18
+ :duration: 'Either HH:MM:SS, H:MM:SS, MM:SS, M:SS, or SS'
19
+ :keywords: ['ruby', 'rails', 'podcast'] # up to 12 text keywords