require 'watir' require 'optparse' require 'fileutils' cmd_options = {} typepad_home = "http://www.typepad.com" opts = OptionParser.new do |opts| opts.banner = "Usage: ruby export_photo_album.rb -u username -p password -a albumname" opts.on(:REQUIRED, "-u", "--username", "Username") do |v| cmd_options[:username] = v end opts.on(:REQUIRED, "-p", "--password", "Password") do |v| cmd_options[:password] = v end opts.on(:REQUIRED, "-a", "--album", "Album name") do |v| cmd_options[:album] = v end end opts.parse!(ARGV) if cmd_options.size != 3 puts opts.banner exit end orig_album_name = cmd_options[:album] #Replace any spaces in the album name with underscores album_name = cmd_options[:album].to_s.gsub(/\W/, "_") #Create the output directory and comments file begin outputDir = FileUtils.mkdir(album_name) rescue => e puts "#{album_name} folder already exists..." end outputFile = File.new("#{album_name}/#{album_name}.txt", "w+") default_out = $defout browser = Watir::IE.new browser.goto("http://www.typepad.com:80/t/app") begin browser.text_field(:name, "username").set(cmd_options[:username]) browser.text_field(:name, "password").set(cmd_options[:password]) browser.button(:value, "Log In").click rescue puts "User is already logged in, proceed" end begin browser.link(:text, 'Photo Albums').click rescue raise "Username/password combination was invalid" end begin browser.link(:text, orig_album_name).click rescue raise "Photo album '#{orig_album_name}' doesn't exist" end # Begin looping through photos photos_table = browser.table(:index, 1) $stdout = outputFile image_links = [] counter = 0 photos_table.each do |row| if counter > 0 puts "#{counter}." image_links << typepad_home + row[2].html.to_s.delete("\"").match(/.*?<[a|A] href=(.*?)>.*/)[1] puts row[3].html.to_s.delete("\"").match(/.*?<[A|a] href=.*?>(.*?)<.*/)[1] puts row[4].text puts row[5].text puts end counter += 1 end $stdout = default_out puts "Parsed photo titles, comments and dates" puts "Downloading full images..." counter = 1 for link in image_links browser.goto(link) browser.link(:text, "View full-size photo").click image = browser.image(:index, 1) save_path = "#{FileUtils.pwd}\\#{album_name}\\#{album_name}_#{counter}".gsub("/", "\\") image.save(save_path) counter += 1 end puts "done!"