Skip to content

Instantly share code, notes, and snippets.

@kelan
Created January 22, 2012 23:55
Show Gist options
  • Select an option

  • Save kelan/1659457 to your computer and use it in GitHub Desktop.

Select an option

Save kelan/1659457 to your computer and use it in GitHub Desktop.

Revisions

  1. kelan revised this gist Jan 22, 2012. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions generate_personal_podcast.rb
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,8 @@
    #!/usr/bin/env ruby -wKU
    #
    # by Kelan Champagne
    # http://yeahrightkeller.com
    #
    # A script to generate a personal podcast feed, hosted on Dropbox
    #
    # Inspired by http://hints.macworld.com/article.php?story=20100421153627718
  2. kelan created this gist Jan 22, 2012.
    76 changes: 76 additions & 0 deletions generate_personal_podcast.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,76 @@
    #!/usr/bin/env ruby -wKU
    #
    # A script to generate a personal podcast feed, hosted on Dropbox
    #
    # Inspired by http://hints.macworld.com/article.php?story=20100421153627718
    #
    # Simply put this, and some .mp3 or .m4a files in a sub-dir under your Dropbox
    # Public folder, update the config values below, and run the script. To get
    # the public_url_base value, you can right click on a file in that folder
    # in Finder, then go to Dropbox > Copy Public Link, and then remove the
    # filename.
    #
    # Notes:
    # * You'll need to re-run it after adding new files to the dir, or you can
    # set up Folder Actions as suggested by the above hint.
    # * This script uses `mdls` to get the title and summary of the podcast
    # from the Spotlight metadata, which requires it to be run on a Mac. But,
    # the rest of the script should be cross-platform compatible.

    require 'date'


    # Config values
    podcast_title = "My personal podcast"
    podcast_description = "My personal podcast description"
    public_url_base = "<put the public url to your dropbox folder here>"


    # Generated values
    date_format = '%a, %d %b %Y %H:%M:%S %z'
    podcast_pub_date = DateTime.now.strftime(date_format)

    # Build the items
    items_content = ""
    Dir.entries('.').each do |file|
    next if file =~ /^\./ # ignore invisible files
    next unless file =~ /\.(mp3|m4a)$/ # only use audio files

    puts "adding file: #{file}"

    item_size_in_bytes = File.size(file).to_s
    item_pub_date = File.mtime(file).strftime(date_format)
    item_title = `mdls --name kMDItemTitle #{file}`.sub(/^.*? = "/, '').sub(/"$/, '').chomp
    item_subtitle = `mdls --name kMDItemComment #{file}`.sub(/^.*? = "/, '').sub(/"$/, '').chomp
    item_summary = item_subtitle
    item_url = "#{public_url_base}/#{file}"
    item_content = <<-HTML
    <item>
    <title>#{item_title}</title>
    <itunes:subtitle>#{item_subtitle}</itunes:subtitle>
    <itunes:summary>#{item_summary}</itunes:summary>
    <enclosure url="#{item_url}" length="#{item_size_in_bytes}" type="audio/mpeg" />
    <pubDate>#{item_pub_date}</pubDate>
    </item>
    HTML

    items_content << item_content
    end

    # Build the whole file
    content = <<-HTML
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
    <channel>
    <title>#{podcast_title}</title>
    <description>#{podcast_description}</description>
    <pubDate>#{podcast_pub_date}</pubDate>
    #{items_content}
    </channel>
    </rss>
    HTML

    # write it out
    output_file = File.new("podcast.rss", 'w')
    output_file.write(content)
    output_file.close