benschwarz-muxtape 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/README +29 -0
  2. data/bin/muxtape +4 -0
  3. data/lib/muxtape.rb +82 -0
  4. data/muxtape-rb.gemspec +20 -0
  5. metadata +82 -0
data/README ADDED
@@ -0,0 +1,29 @@
1
+ Download your favorite muxtapes using this command line tool.
2
+
3
+ Select a 'featured' tape or bash in the name of one of your favorites.
4
+ Tracks will download and add to a new iTunes playlist.
5
+
6
+ Bits and pieces, stolen, chopped and skewed from multiple sources.
7
+ Highline CLI menus added by the prevalent `hassox`, Daniel Neighman
8
+
9
+ Mashed up and packaged by Ben Schwarz
10
+
11
+ Installation:
12
+
13
+ `gem sources -a http://gems.github.com/`
14
+ `sudo gem install benschwarz-muxtape-rb`
15
+
16
+ Usage:
17
+
18
+ Homeslice:Muxtapes ben$ muxtape
19
+
20
+ 1. featured
21
+ 2. custom
22
+ 3. quit
23
+ Would you like to select from the featured playlists or enter your own?
24
+ 2
25
+ Which One?
26
+ hiphop
27
+ Downloading HIPHOP, (remember it?)
28
+ Downloading 1 of 12
29
+ ... You get the idea
data/bin/muxtape ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'muxtape'
data/lib/muxtape.rb ADDED
@@ -0,0 +1,82 @@
1
+ require 'rubygems'
2
+ require 'hpricot'
3
+ require 'open-uri'
4
+ require 'fileutils'
5
+ require 'ostruct'
6
+ require "appscript"
7
+ require 'highline/import'
8
+ include Appscript
9
+
10
+ def get_featured_tapes
11
+ doc = Hpricot(open("http://muxtape.com"))
12
+ (doc/"ul.featured a").map{|e| e[:href].scan(/http:\/\/(.*?).muxtape.com/); $1 }.sort
13
+ end
14
+
15
+ HighLine.track_eof = false
16
+ $terminal.page_at = 20
17
+
18
+ def choose_tape
19
+ choose do |m|
20
+ m.prompt = "Which tape would you like"
21
+ m.choices(*get_featured_tapes)
22
+ m.choice(:quit){ say("Orright... Seeya!"); exit(0)}
23
+ end
24
+ end
25
+
26
+ def get_tape
27
+ choose do |menu|
28
+ menu.prompt = "Would you like to select from the featured playlists or enter your own?"
29
+ menu.choice(:featured){ say("Loading List. Please Wait"); choose_tape }
30
+ menu.choice(:custom){ ask("Which One?", String)}
31
+ menu.choice(:quit){ say("Orright... Seeya!"); exit(0)}
32
+ end
33
+ end
34
+
35
+
36
+ uri = "http://#{get_tape}.muxtape.com/"
37
+
38
+ page = Hpricot(open(uri))
39
+
40
+ muxtape = (page/:h1).inner_text
41
+
42
+ puts "Downloading #{muxtape}, (#{(page/:h2).inner_text})"
43
+
44
+ # Get the song names if need be
45
+ #song_names = (page/"li.song .name").map do |song|
46
+ # song.inner_text.strip
47
+ #end
48
+
49
+ songs = []
50
+ (page/"script").each do |script|
51
+ src = script.inner_text
52
+ if src =~ /new\s+Kettle\(\[([^\]]+)\],\[([^\]]+)\]/
53
+ ids, codes = [$1, $2].map {|a| a.gsub("'",'').split(",") }
54
+ ids.zip(codes).each do |ic|
55
+ songs << OpenStruct.new(:sid =>"#{ic[0]}.mp3", :url => "http://muxtape.s3.amazonaws.com/songs/#{ic[0]}?#{ic[1]}")
56
+ end
57
+ end
58
+ end
59
+
60
+ FileUtils.mkdir_p muxtape
61
+
62
+ # Keep an array of song files to add to iTunes later
63
+ @song_files = []
64
+
65
+ songs.each_with_index do |song, index|
66
+ puts "Downloading #{index.next} of #{songs.size}"
67
+ song_file = "#{muxtape}/#{song.sid}"
68
+ open(song.url) do |f|
69
+ open(song_file,"wb") {|mp3| mp3.write f.read }
70
+ end
71
+
72
+ @song_files << song_file
73
+ end
74
+
75
+
76
+ # Add to iTunes
77
+ i_tunes = app('iTunes')
78
+ return if i_tunes.playlists[its.name.eq(muxtape)].exists #skip if exists
79
+ pl = i_tunes.make(:new => :user_playlist, :with_properties => {:name => muxtape})
80
+ @song_files.each do |sf|
81
+ i_tunes.add(MacTypes::FileURL.path(File.expand_path(File.dirname(__FILE__) + "/#{sf}")), :to => pl)
82
+ end
@@ -0,0 +1,20 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "muxtape"
3
+ s.version = "0.0.1"
4
+ s.date = "2008-04-26"
5
+ s.summary = "Download your favorite muxtapes with ease"
6
+ s.email = "ben@germanforblack.com"
7
+ s.homepage = "http://github.com/benschwarz/muxtape-rb"
8
+ s.description = "A command line ruby based tool to download muxtapes from muxtape.com"
9
+ s.authors = ["Ben Schwarz"]
10
+ s.files = ["README", "muxtape-rb.gemspec", "lib/muxtape.rb", "bin/muxtape"]
11
+
12
+ # Deps
13
+ s.add_dependency("hpricot", [">= 0.6"])
14
+ s.add_dependency("highline", [">= 1.4.0"])
15
+ s.add_dependency("rb-appscript", [">= 0.5.1"])
16
+
17
+ # 'Binary' goodness
18
+ s.default_executable = 'bin/muxtape'
19
+ s.executables = ["muxtape"]
20
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: benschwarz-muxtape
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ben Schwarz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-04-26 00:00:00 -07:00
13
+ default_executable: bin/muxtape
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hpricot
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0.6"
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: highline
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: 1.4.0
32
+ version:
33
+ - !ruby/object:Gem::Dependency
34
+ name: rb-appscript
35
+ version_requirement:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.5.1
41
+ version:
42
+ description: A command line ruby based tool to download muxtapes from muxtape.com
43
+ email: ben@germanforblack.com
44
+ executables:
45
+ - muxtape
46
+ extensions: []
47
+
48
+ extra_rdoc_files: []
49
+
50
+ files:
51
+ - README
52
+ - muxtape-rb.gemspec
53
+ - lib/muxtape.rb
54
+ - bin/muxtape
55
+ has_rdoc: false
56
+ homepage: http://github.com/benschwarz/muxtape-rb
57
+ post_install_message:
58
+ rdoc_options: []
59
+
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: "0"
67
+ version:
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: "0"
73
+ version:
74
+ requirements: []
75
+
76
+ rubyforge_project:
77
+ rubygems_version: 1.0.1
78
+ signing_key:
79
+ specification_version: 2
80
+ summary: Download your favorite muxtapes with ease
81
+ test_files: []
82
+