Skip to content

Instantly share code, notes, and snippets.

@ssig33
Created December 23, 2010 10:29
Show Gist options
  • Save ssig33/752813 to your computer and use it in GitHub Desktop.
Save ssig33/752813 to your computer and use it in GitHub Desktop.

これは何

沢山動画とかが置いてあるディレクトリから Podcast を作るやつ。

どう使うの

インストール

Ruby とか Rubygems とか入れる

# apt-get install rubygems ruby

依存してるモジュールを入れる

# sudo gem install sinatra builder

設定する

  1. app.rb の DIR のところに動画とかを置いてるディレクトリを指定
  2. PATH の所には Web からそのディレクトリがどう見えるかを指定。
  • /home/unko/fuck というディレクトリが Web 経由では http://hostname/~unko/fuck と見えるなら ~unko/fuck と書く
  1. PREFIX には Web サーバーのホストネームとかを書く
  1. TITLE には Podcast のタイトルを書く
  2. AUTHOR には適当に自分の名前でも書く

起動する

$ ruby app.rb

アクセスする

デフォルトでは http://localhost:4567/ にアクセスすると Podcast の RSS が降ってきます。

ずっとこんな半端なサーバーを立てておくのもアレなので、 $ wget http://localhost:4567/ -O podcast.xml とかやって xml を作ってサーバーを落すのがいいのではないかと。いちいちこいつにディレクトリを走査させるよかフィードを作ってスタティックに配信する方が負荷も低いです。

require "sinatra"
require "builder"
require "time"
require "uri"
DIR = ""
PATH = ""
PREFIX = ""
TITLE = ""
AUTHOR = ""
class Video
attr_accessor :title, :url, :path, :id, :created_at
end
get "/" do
@videos = []
Dir.entries(DIR).each do |f|
next if f == "." or f == ".."
s = File::stat("#{DIR}/#{f}")
v = Video.new
v.title = f
v.url = "http://#{PREFIX}/#{PATH}/#{f}"
v.id = v.url
v.path = "#{DIR}/#{f}"
v.created_at = s.mtime
@videos << v
end
@videos.sort!{|a,b| -1*a.created_at.to_i <=> -1*b.created_at.to_i}
builder :feed
end
__END__
@@ feed
xml.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
xml.rss('version' => '2.0', 'xmlns:atom' => 'http://www.w3.org/2005/Atom', 'xmlns:openSearch' => 'http://a9.com/-/spec/opensearchrss/1.0/') do
xml.channel do
xml.title TITLE
xml.link("http://" + request.host_with_port)
xml.language "ja-ja"
xml.ttl "40"
xml.pubDate(Time.now.strftime("%a, %d %b %Y %H:%M:%S %Z"))
@videos.each do |v|
xml.item do
xml.title(v.title)
xml.link(v.url)
xml.description(v.title)
xml.guid(v.url)
xml.pubDate(v.created_at.rfc822)
xml.enclosure :url => URI.encode(v.url)
xml.author AUTHOR
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment