ようこそゲストさん

さしみしょうゆ2.0

2.0になってさらに退化!ほとんど自分用メモと化してます。

2008/07/04(金) ポッドキャスト支援用rubyスクリプト

はてブ情報 はてブに登録 はてブ数 PC関連
ポッドキャストをちょっとやってみようと思ったんだが、ちょうど使い勝手のよいソフトも見つからなかったので、Rubyの勉強もかねて、ポッドキャスト支援用のrubyスクリプトを作ってみた。podcast.zip
(ipodは持ってないのでiTunes+ipodの組み合わせはできない)

ほとんど素人なのに、多少は役に立つものが作れちゃうRubyはすごいかもしれない。
コードも100行以下でできてしまった。

podcast.rbを実行すると、同じフォルダにあるpodcast_rss.txtを読み込んで、最新のコンテンツを自動でダウンロードしてくれます。
オーディオプレイヤーが、PCに挿すと単なるUSBメモリとして認識される物の場合は「Podcast」というフォルダを作って、その中にpodcast.rbとpodcast_rss.txtを置いて実行すると便利だと思う。

うちの環境
iRiverのT20(256MB)を使ってます

podcast_rss.txtの書式は、こんな感じ
#ぽっどきゃすてぃんぐ落語
http://podfeedsp.podcastjuice.jp/app/rss_convert.cgi?url=http%3A%2F%2Fwww.podcastjuice.jp%2Frakugo%2F
落語

#ECC 英会話 Podcasting 知ってる単語でこんなに話せる!
http://www3.eccweblesson.com/podcast/verbs.xml
英語ECC

#日本経済新聞<総合版>
http://nikkei.hi-ho.ne.jp/podcast/kiku4.xml
日経総合

#読売ニュース ポッドキャスト : YOMIURI ONLINE(読売新聞)
http://podfeedsp.podcastjuice.jp/app/rss_convert.cgi?url=http%3A%2F%2Fyp%2Dyol%2Ecocolog%2Dnifty%2Ecom%2Fpodcast_yomiuri_online%2F
読売
"http://〜〜〜"はRSSファイルのURLを指定する。
RSSのURLのすぐ下の行の"落語"とか"読売"+"コンテンツの元ファイル名"というファイル名でpodcast.rbと同じ場所に保存する。
たとえば、"読売080704.mp3"というファイル名で保存されたりする。
それ以外の行は無視。今のところ行頭の#も特に意味はない。
"http://〜〜〜"の行が連続しちゃうとたぶん変なことになると思う。

すでに同じ名前のファイルが保存されている場合は、ダウンロードを行わない。
ダウンロードの進行状況は表示されないので、ちゃんと動いてるかわかりにくいとこが難点。
うちの環境では落語のダウンロードは時間かかってちょっと不安になった。

podcast.rbの実行にはRubyのインストールが必要。
exerbでexeファイルに変換しようと思ったんだけど、なぜかうまく変換できなかった。
2008.08.28
成功しました。exeファイル実行するだけで使えます。
でも実行ファイルサイズ1.6Mとかえらいでかくなった。インタプリタ内蔵だから仕方ないのかな。
WindowsのRubyインストールは、ActiveScriptRubyがおすすめ。

今後はプレイヤーがの容量が足りなくなったら古いファイルを自動で消す機能とかつけようかなと思ってる。
だけどちゃんと作れるか不安。
あと、PCに接続したら自動でダウンロード開始するように「Autorun.inf」を作ろうと思ったんだけど、どうやらそれは簡単にはできないらしいのでたぶん断念。

以下 ソースコード
プログラミングはほとんど趣味でしかやってないので、改善の余地はいろいろあると思う。
require 'rss'

#コンテンツのURLを受け取ってsavefile(ファイルパス)にファイル保存(上書き)
def get_content(url,savefile)
  begin
    content = open(url)
    f = File.open(savefile,"wb")
    f.write content.read
    f.close
  rescue => ex
    print ex.message,"\n"
  end
end

#RSSを受信して、同じファイルが保存済みでなければダウンロードする
def get_rss(url,name)
  begin
    rss = RSS::Parser.parse(url,false)
    #rss.items.each{|item| #コンテンツ根こそぎダウンロードは自重
      item = rss.items[0]
      content_url = item.enclosure.url
      print content = name + content_url.split('/')[-1]  #ファイル名取得
      unless FileTest.file?(content)
        print "   ",content,"\n   ",content_url,"\n   のダウンロードを開始\n"
        get_content(content_url,content)
        print "   ",content,"のダウンロードを終了\n"
      end
    #}
  rescue => ex
    print ex.message,"\n"
  end
end

#podcast_rss.txtからrssのurlと名前を読み出す。
#さらにRSS受信して保存してないものがあればダウンロードする
podcast_rss = File.open("podcast_rss.txt")
while line = podcast_rss.gets
  line.chomp!
  if line[0,7] == "http://"
    url = line
    if name = podcast_rss.gets
      name.chomp!
    else
      name = ""
    end
    print name," ",url,"\nの処理を開始\n"
    get_rss(url,name)
    print name,"の処理を終了\n\n"
  end
end
print "処理終了\n"
2008.08.28 ファイル重複チェックには自作関数でなく「FileTest.file?」を使用するように変更。ソースが約50行くらいになったw

名前:  非公開コメント   

  • TB-URL  http://777.boo.jp/adiary/0780/tb/
  • 090923-rubyでポッドキャストを取得するには Non-programmer's Ruby in Pocket
    ポッドキャストをmp3プレーヤー(実はW-ZERO3)に「手軽に」(重要!)ダウ