iTunesAmazon 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,5 @@
1
1
  #!/usr/bin/env ruby -w
2
2
 
3
-
4
-
5
3
  require 'rubygems'
6
4
  require 'nokogiri'
7
5
  require 'amazon/aws'
@@ -11,10 +9,10 @@ require './lib/track.rb'
11
9
  include Amazon::AWS
12
10
  include Amazon::AWS::Search
13
11
 
14
- KEY_ID = '1E3447REXBE9VATGH4R2'
12
+ KEY_ID = ''
15
13
 
16
14
  class ITunesAmazon
17
- VERSION = '0.0.1'
15
+ VERSION = '0.0.2'
18
16
 
19
17
  attr_accessor :tracks, :albums, :total_time
20
18
 
@@ -25,6 +23,7 @@ class ITunesAmazon
25
23
  get_amazon_stats
26
24
  end
27
25
 
26
+ # Creates the tracks and albums objects from an iTunes file
28
27
  def parse(file)
29
28
  xml = Nokogiri::XML.parse(File.read(file))
30
29
  xml.xpath("//dict/dict/dict").each do |song|
@@ -40,7 +39,11 @@ class ITunesAmazon
40
39
  when 'Play Count' then track.play_count = attr.next.text
41
40
  end
42
41
  end
43
- @tracks << track
42
+
43
+ # don't deal with Podcasts
44
+ unless track.genre == 'Podcast' then @tracks << track end
45
+
46
+ # Set up a hash of albums.
44
47
  key = "#{track.artist},#{track.album}"
45
48
  unless @albums.has_key?(key)
46
49
  @albums[key] = Album.new(track.album, track.artist, track)
@@ -50,6 +53,7 @@ class ITunesAmazon
50
53
  end
51
54
  end
52
55
 
56
+ # Runs Amazon stats on each album
53
57
  def get_amazon_stats
54
58
  @albums.each_value do |album|
55
59
  album.get_amazon_info
@@ -88,7 +92,7 @@ class ITunesAmazon
88
92
  end
89
93
 
90
94
  def random_song(seed = nil)
91
- unless seed == nil then srand(seed) end
95
+ srand seed if seed
92
96
  @tracks[rand(@tracks.size)]
93
97
  end
94
98
 
@@ -117,18 +121,26 @@ class ITunesAmazon
117
121
  fields.sort {|a, b| b[1] <=> a[1]}[0][0]
118
122
  end
119
123
 
120
- def top_rated_amazon_albums(n)
121
- top_albums = @albums.values.sort {|a, b| b.amazon_average_rating.to_f <=> a.amazon_average_rating.to_f}
124
+ def top_selling_amazon_albums(n)
125
+ top_albums = @albums.values.sort_by {|album| album.amazon_sales_rank.to_i }
122
126
  top_albums[0..(n-1)]
123
127
  end
124
128
 
125
-
129
+ def how_much_is_it_worth
130
+ amount = 0
131
+ @albums.values.each do |album|
132
+ #unless (track.time == nil && track.time.is_a?(Numeric)) then
133
+ amount += album.amazon_price.to_i
134
+ # end
135
+ end
136
+ amount
137
+ end
126
138
 
127
139
  def self.run(args)
128
140
  parser = ITunesAmazon.new(args[0])
129
141
 
130
- album = parser.top_rated_amazon_albums(1)[0]
131
- p "Top rated Amazon album: #{album.album} by #{album.artist} rated #{album.amazon_average_rating.to_f}"
142
+ album = parser.top_selling_amazon_albums(1)[0]
143
+ p "Top selling Amazon album: #{album.album} by #{album.artist} sell rank #{album.amazon_sales_rank}"
132
144
 
133
145
  top_track = parser.top_played_songs(1)[0]
134
146
  p "Top song: #{top_track.name} by #{top_track.artist}, played #{top_track.play_count} times"
@@ -1,12 +1,11 @@
1
1
  #!/usr/bin/env ruby -w
2
2
 
3
-
4
3
  $: << 'lib'
5
4
 
6
5
  require "test/unit"
7
6
  require 'i_tunes_amazon.rb'
8
7
 
9
- class ITunesParserTester < Test::Unit::TestCase
8
+ class ITunesAmazonTester < Test::Unit::TestCase
10
9
  @@parse_this = ITunesAmazon.new("../test.itunes.xml")
11
10
 
12
11
  def setup
@@ -73,5 +72,17 @@ class ITunesParserTester < Test::Unit::TestCase
73
72
  assert_equal expected, actual
74
73
  end
75
74
 
75
+ def test_amazon_top_selling_album
76
+ @parser.get_amazon_stats
77
+ actual = @parser.top_selling_amazon_albums(1)[0].album
78
+ expected = "Live In Cook County Jail"
79
+ assert_equal expected, actual
80
+ end
76
81
 
82
+ def test_how_much_is_it_worth
83
+ @parser.get_amazon_stats
84
+ actual = @parser.how_much_is_it_worth
85
+ expected = 3547
86
+ assert_equal expected, actual
87
+ end
77
88
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iTunesAmazon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tracie Hlavka