Youtubeの動画を自動的にダウンロードする

Mitaka Hackathon@Apr.15で制作したプログラムです。

Capybaraでブラウザを立ち上げずにターミナルからサイトにアクセスしているのがポイント。

# -*- coding: utf-8 -*-
require 'capybara'
require 'capybara/dsl'
require 'capybara-webkit'
include Capybara
include Capybara::DSL
require 'mechanize'
require 'nokogiri'

Capybara.default_driver = :webkit

puts "(c) Produced by Kenichiro,Shohei, Ryo 2012 Apr.15 "
puts "youtubeから動画を検索してURLを返します。"
puts "検索したい語を入力してください。:"
line = gets

agent = Mechanize.new
agent.get("http://www.youtube.com/")
agent.page.form_with(:action => "/results"){ |form|
  form.field_with(:name =>"search_query").value = line.toutf8()
  form.click_button
}

output = {}

agent.page.links_with(:href => /\/watch\?v\=/ , :class => "yt-uix-tile-link" ).each do |link|
  movieurl = link.href
  movieurl = movieurl.split("watch?v=").last
  movieurl = movieurl.split("&feature").first
  output[link.text] = movieurl 
end 

#puts output
fout = File.open("title.txt","w")
fout.write(output)

#for i in 0..2
output.each_with_index do |(movie_title, movie_URL), i|
  break if i > 3
  puts movie_title,movie_URL
  visit 'http://www.youtube-mp3.org/'
  within("#submit-form") do
    #fill_in 'youtube-url', :with => 'http://www.youtube.com/watch?v=OnhY3Lx8Cao'
    fill_in 'youtube-url', :with => 'http://www.youtube.com/watch?v='+movie_URL   
  end
  click_button 'Convert Video'

  sleep 5

  click_link 'Download'

  current_url
  #`curl #{current_url} -o sample.mp3`
  `curl \"#{current_url}\" -o \"#{movie_title}.mp3\"`

end