diff --git a/test/__init__.py b/test/__init__.py
index 87d571c..e252232 100644
--- a/test/__init__.py
+++ b/test/__init__.py
@@ -3,4 +3,6 @@ import test_tag
import test_event
import test_artist
import test_geo
-import test_group
\ No newline at end of file
+import test_group
+import test_playlist
+import test_track
\ No newline at end of file
diff --git a/test/data/2f1798abca911050d4e12a32343209c1.xml b/test/data/2f1798abca911050d4e12a32343209c1.xml
new file mode 100644
index 0000000..60dbf1d
--- /dev/null
+++ b/test/data/2f1798abca911050d4e12a32343209c1.xml
@@ -0,0 +1,405 @@
+
+
+
+
+
+ danyzinhalee_ev
+ http://www.last.fm/user/danyzinhalee_ev
+ http://userserve-ak.last.fm/serve/34/3709058.jpg
+ http://userserve-ak.last.fm/serve/64/3709058.jpg
+ http://userserve-ak.last.fm/serve/126/3709058.jpg
+ 982904
+
+
+ acandec
+ http://www.last.fm/user/acandec
+ http://userserve-ak.last.fm/serve/34/17055387.jpg
+ http://userserve-ak.last.fm/serve/64/17055387.jpg
+ http://userserve-ak.last.fm/serve/126/17055387.jpg
+ 944066
+
+
+ hawkieye
+ http://www.last.fm/user/hawkieye
+ http://userserve-ak.last.fm/serve/34/19908135.jpg
+ http://userserve-ak.last.fm/serve/64/19908135.jpg
+ http://userserve-ak.last.fm/serve/126/19908135.jpg
+ 892857
+
+
+ Nostress1991
+ http://www.last.fm/user/Nostress1991
+
+
+
+ 842415
+
+
+ jfinner1
+ http://www.last.fm/user/jfinner1
+
+
+
+ 600714
+
+
+ mychaelbs
+ http://www.last.fm/user/mychaelbs
+ http://userserve-ak.last.fm/serve/34/18565431.jpg
+ http://userserve-ak.last.fm/serve/64/18565431.jpg
+ http://userserve-ak.last.fm/serve/126/18565431.jpg
+ 415034
+
+
+ vince88enzo
+ http://www.last.fm/user/vince88enzo
+ http://userserve-ak.last.fm/serve/34/12636711.jpg
+ http://userserve-ak.last.fm/serve/64/12636711.jpg
+ http://userserve-ak.last.fm/serve/126/12636711.jpg
+ 250000
+
+
+ cuate_julian
+ http://www.last.fm/user/cuate_julian
+
+
+
+ 245000
+
+
+ Slempa
+ http://www.last.fm/user/Slempa
+
+
+
+ 180000
+
+
+ fuckin_killa
+ http://www.last.fm/user/fuckin_killa
+ http://userserve-ak.last.fm/serve/34/24623619.jpg
+ http://userserve-ak.last.fm/serve/64/24623619.jpg
+ http://userserve-ak.last.fm/serve/126/24623619.jpg
+ 171788
+
+
+ namitti
+ http://www.last.fm/user/namitti
+ http://userserve-ak.last.fm/serve/34/7325805.gif
+ http://userserve-ak.last.fm/serve/64/7325805.gif
+ http://userserve-ak.last.fm/serve/126/7325805.gif
+ 163652
+
+
+ icklebug
+ http://www.last.fm/user/icklebug
+ http://userserve-ak.last.fm/serve/34/24703075.gif
+ http://userserve-ak.last.fm/serve/64/24703075.gif
+ http://userserve-ak.last.fm/serve/126/24703075.gif
+ 163333
+
+
+ embers4envelope
+ http://www.last.fm/user/embers4envelope
+ http://userserve-ak.last.fm/serve/34/10615543.jpg
+ http://userserve-ak.last.fm/serve/64/10615543.jpg
+ http://userserve-ak.last.fm/serve/126/10615543.jpg
+ 161290
+
+
+ MelliLicious
+ http://www.last.fm/user/MelliLicious
+ http://userserve-ak.last.fm/serve/34/23990081.jpg
+ http://userserve-ak.last.fm/serve/64/23990081.jpg
+ http://userserve-ak.last.fm/serve/126/23990081.jpg
+ 155894
+
+
+ xxmariuszxx
+ http://www.last.fm/user/xxmariuszxx
+
+
+
+ 109393
+
+
+ manorton
+ http://www.last.fm/user/manorton
+ http://userserve-ak.last.fm/serve/34/1714170.jpg
+ http://userserve-ak.last.fm/serve/64/1714170.jpg
+ http://userserve-ak.last.fm/serve/126/1714170.jpg
+ 90000
+
+
+ Kidashka
+ http://www.last.fm/user/Kidashka
+
+
+
+ 80000
+
+
+ BE3M
+ http://www.last.fm/user/BE3M
+ http://userserve-ak.last.fm/serve/34/5498278.jpg
+ http://userserve-ak.last.fm/serve/64/5498278.jpg
+ http://userserve-ak.last.fm/serve/126/5498278.jpg
+ 79113
+
+
+ rav90
+ http://www.last.fm/user/rav90
+ http://userserve-ak.last.fm/serve/34/24730193.jpg
+ http://userserve-ak.last.fm/serve/64/24730193.jpg
+ http://userserve-ak.last.fm/serve/126/24730193.jpg
+ 78711
+
+
+ DecidO
+ http://www.last.fm/user/DecidO
+ http://userserve-ak.last.fm/serve/34/24017607.png
+ http://userserve-ak.last.fm/serve/64/24017607.png
+ http://userserve-ak.last.fm/serve/126/24017607.png
+ 75571
+
+
+ moyh
+ http://www.last.fm/user/moyh
+ http://userserve-ak.last.fm/serve/34/9009589.jpg
+ http://userserve-ak.last.fm/serve/64/9009589.jpg
+ http://userserve-ak.last.fm/serve/126/9009589.jpg
+ 71111
+
+
+ kiranb283
+ http://www.last.fm/user/kiranb283
+ http://userserve-ak.last.fm/serve/34/10366865.jpg
+ http://userserve-ak.last.fm/serve/64/10366865.jpg
+ http://userserve-ak.last.fm/serve/126/10366865.jpg
+ 62500
+
+
+ NutsNats
+ http://www.last.fm/user/NutsNats
+ http://userserve-ak.last.fm/serve/34/18153219.jpg
+ http://userserve-ak.last.fm/serve/64/18153219.jpg
+ http://userserve-ak.last.fm/serve/126/18153219.jpg
+ 61466
+
+
+ Gruenefanta
+ http://www.last.fm/user/Gruenefanta
+ http://userserve-ak.last.fm/serve/34/18035517.jpg
+ http://userserve-ak.last.fm/serve/64/18035517.jpg
+ http://userserve-ak.last.fm/serve/126/18035517.jpg
+ 57067
+
+
+ ivynho
+ http://www.last.fm/user/ivynho
+
+
+
+ 48400
+
+
+ leona13
+ http://www.last.fm/user/leona13
+ http://userserve-ak.last.fm/serve/34/16954863.jpg
+ http://userserve-ak.last.fm/serve/64/16954863.jpg
+ http://userserve-ak.last.fm/serve/126/16954863.jpg
+ 46918
+
+
+ Kylemuffin
+ http://www.last.fm/user/Kylemuffin
+ http://userserve-ak.last.fm/serve/34/17891115.jpg
+ http://userserve-ak.last.fm/serve/64/17891115.jpg
+ http://userserve-ak.last.fm/serve/126/17891115.jpg
+ 45000
+
+
+ lucyfacex3
+ http://www.last.fm/user/lucyfacex3
+ http://userserve-ak.last.fm/serve/34/20826049.jpg
+ http://userserve-ak.last.fm/serve/64/20826049.jpg
+ http://userserve-ak.last.fm/serve/126/20826049.jpg
+ 44526
+
+
+ Mjambam
+ http://www.last.fm/user/Mjambam
+ http://userserve-ak.last.fm/serve/34/6940001.jpg
+ http://userserve-ak.last.fm/serve/64/6940001.jpg
+ http://userserve-ak.last.fm/serve/126/6940001.jpg
+ 43128
+
+
+ bleeds2death
+ http://www.last.fm/user/bleeds2death
+ http://userserve-ak.last.fm/serve/34/7833817.jpg
+ http://userserve-ak.last.fm/serve/64/7833817.jpg
+ http://userserve-ak.last.fm/serve/126/7833817.jpg
+ 42915
+
+
+ szczupac
+ http://www.last.fm/user/szczupac
+
+
+
+ 40704
+
+
+ kleinezuzi
+ http://www.last.fm/user/kleinezuzi
+ http://userserve-ak.last.fm/serve/34/16298691.jpg
+ http://userserve-ak.last.fm/serve/64/16298691.jpg
+ http://userserve-ak.last.fm/serve/126/16298691.jpg
+ 40000
+
+
+ onnall
+ http://www.last.fm/user/onnall
+ http://userserve-ak.last.fm/serve/34/3616525.gif
+ http://userserve-ak.last.fm/serve/64/3616525.gif
+ http://userserve-ak.last.fm/serve/126/3616525.gif
+ 37812
+
+
+ haridelle
+ http://www.last.fm/user/haridelle
+ http://userserve-ak.last.fm/serve/34/5192695.jpg
+ http://userserve-ak.last.fm/serve/64/5192695.jpg
+ http://userserve-ak.last.fm/serve/126/5192695.jpg
+ 37692
+
+
+ stelladauer
+ http://www.last.fm/user/stelladauer
+ http://userserve-ak.last.fm/serve/34/1805728.jpg
+ http://userserve-ak.last.fm/serve/64/1805728.jpg
+ http://userserve-ak.last.fm/serve/126/1805728.jpg
+ 35714
+
+
+ Tony_sk
+ http://www.last.fm/user/Tony_sk
+ http://userserve-ak.last.fm/serve/34/12776583.jpg
+ http://userserve-ak.last.fm/serve/64/12776583.jpg
+ http://userserve-ak.last.fm/serve/126/12776583.jpg
+ 35000
+
+
+ chartman18
+ http://www.last.fm/user/chartman18
+ http://userserve-ak.last.fm/serve/34/17792291.jpg
+ http://userserve-ak.last.fm/serve/64/17792291.jpg
+ http://userserve-ak.last.fm/serve/126/17792291.jpg
+ 32075
+
+
+ GazzerTheLegend
+ http://www.last.fm/user/GazzerTheLegend
+ http://userserve-ak.last.fm/serve/34/903950.jpg
+ http://userserve-ak.last.fm/serve/64/903950.jpg
+ http://userserve-ak.last.fm/serve/126/903950.jpg
+ 31250
+
+
+ CSINYforever
+ http://www.last.fm/user/CSINYforever
+ http://userserve-ak.last.fm/serve/34/24615589.jpg
+ http://userserve-ak.last.fm/serve/64/24615589.jpg
+ http://userserve-ak.last.fm/serve/126/24615589.jpg
+ 31203
+
+
+ StoBoy
+ http://www.last.fm/user/StoBoy
+ http://userserve-ak.last.fm/serve/34/1538480.gif
+ http://userserve-ak.last.fm/serve/64/1538480.gif
+ http://userserve-ak.last.fm/serve/126/1538480.gif
+ 31153
+
+
+ Metal1st
+ http://www.last.fm/user/Metal1st
+
+
+
+ 31025
+
+
+ Maerfee
+ http://www.last.fm/user/Maerfee
+ http://userserve-ak.last.fm/serve/34/686798.jpg
+ http://userserve-ak.last.fm/serve/64/686798.jpg
+ http://userserve-ak.last.fm/serve/126/686798.jpg
+ 30625
+
+
+ srdrmlk
+ http://www.last.fm/user/srdrmlk
+
+
+
+ 30178
+
+
+ alyhussien
+ http://www.last.fm/user/alyhussien
+ http://userserve-ak.last.fm/serve/34/21673457.jpg
+ http://userserve-ak.last.fm/serve/64/21673457.jpg
+ http://userserve-ak.last.fm/serve/126/21673457.jpg
+ 30000
+
+
+ Plystre
+ http://www.last.fm/user/Plystre
+ http://userserve-ak.last.fm/serve/34/3849683.jpg
+ http://userserve-ak.last.fm/serve/64/3849683.jpg
+ http://userserve-ak.last.fm/serve/126/3849683.jpg
+ 28809
+
+
+ muugel
+ http://www.last.fm/user/muugel
+ http://userserve-ak.last.fm/serve/34/2913428.jpg
+ http://userserve-ak.last.fm/serve/64/2913428.jpg
+ http://userserve-ak.last.fm/serve/126/2913428.jpg
+ 28139
+
+
+ Yinjo
+ http://www.last.fm/user/Yinjo
+ http://userserve-ak.last.fm/serve/34/21866175.jpg
+ http://userserve-ak.last.fm/serve/64/21866175.jpg
+ http://userserve-ak.last.fm/serve/126/21866175.jpg
+ 28100
+
+
+ Purplekid
+ http://www.last.fm/user/Purplekid
+ http://userserve-ak.last.fm/serve/34/24381489.jpg
+ http://userserve-ak.last.fm/serve/64/24381489.jpg
+ http://userserve-ak.last.fm/serve/126/24381489.jpg
+ 27776
+
+
+ Dipio
+ http://www.last.fm/user/Dipio
+ http://userserve-ak.last.fm/serve/34/20336307.jpg
+ http://userserve-ak.last.fm/serve/64/20336307.jpg
+ http://userserve-ak.last.fm/serve/126/20336307.jpg
+ 27348
+
+
+ matecz
+ http://www.last.fm/user/matecz
+ http://userserve-ak.last.fm/serve/34/2090797.gif
+ http://userserve-ak.last.fm/serve/64/2090797.gif
+ http://userserve-ak.last.fm/serve/126/2090797.gif
+ 25714
+
+
diff --git a/test/data/3d6c90fed5a5a4440753c8ab9e9e8397.xml b/test/data/3d6c90fed5a5a4440753c8ab9e9e8397.xml
new file mode 100644
index 0000000..f912c5f
--- /dev/null
+++ b/test/data/3d6c90fed5a5a4440753c8ab9e9e8397.xml
@@ -0,0 +1,210 @@
+
+
+
+
+114702
+0
+20
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/data/5b7e1dc34d9a38b7626ca18191d06c63.xml b/test/data/5b7e1dc34d9a38b7626ca18191d06c63.xml
new file mode 100644
index 0000000..46c2e56
--- /dev/null
+++ b/test/data/5b7e1dc34d9a38b7626ca18191d06c63.xml
@@ -0,0 +1,18 @@
+
+
+
+ The Open Door
+ Evanescence
+ 2491629
+
+ http://www.last.fm/music/Evanescence/The+Open+Door
+
+ http://userserve-ak.last.fm/serve/34s/22655081.jpg
+ http://userserve-ak.last.fm/serve/64s/22655081.jpg
+ http://userserve-ak.last.fm/serve/174s/22655081.jpg
+ http://userserve-ak.last.fm/serve/300x300/22655081.jpg
+ 334495
+ 8302042
+
+
+
diff --git a/test/data/72ae40646994a618857bc1324209622f.xml b/test/data/72ae40646994a618857bc1324209622f.xml
new file mode 100644
index 0000000..bb31e9d
--- /dev/null
+++ b/test/data/72ae40646994a618857bc1324209622f.xml
@@ -0,0 +1,53 @@
+
+
+
diff --git a/test/data/7bc6496c43c576f41e772f5282263052.xml b/test/data/7bc6496c43c576f41e772f5282263052.xml
new file mode 100644
index 0000000..75547d9
--- /dev/null
+++ b/test/data/7bc6496c43c576f41e772f5282263052.xml
@@ -0,0 +1,3368 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/data/8b904ba1c11957a68e8bb56f6a07f62e.xml b/test/data/8b904ba1c11957a68e8bb56f6a07f62e.xml
new file mode 100644
index 0000000..eefedcb
--- /dev/null
+++ b/test/data/8b904ba1c11957a68e8bb56f6a07f62e.xml
@@ -0,0 +1,504 @@
+
+
+
+
+ rock
+ 2389749
+ www.last.fm/tag/rock
+
+
+ Gothic Rock
+ 68547
+ www.last.fm/tag/gothic%20rock
+
+
+ Gothic
+ 134790
+ www.last.fm/tag/gothic
+
+
+ Evanescence
+ 4718
+ www.last.fm/tag/evanescence
+
+
+ female vocalists
+ 651995
+ www.last.fm/tag/female%20vocalists
+
+
+ alternative
+ 1212141
+ www.last.fm/tag/alternative
+
+
+ metal
+ 696388
+ www.last.fm/tag/metal
+
+
+ Gothic Metal
+ 146956
+ www.last.fm/tag/gothic%20metal
+
+
+ alternative rock
+ 566926
+ www.last.fm/tag/alternative%20rock
+
+
+ lithium
+ 87
+ www.last.fm/tag/lithium
+
+
+ favorites
+ 218163
+ www.last.fm/tag/favorites
+
+
+ Female fronted metal
+ 52393
+ www.last.fm/tag/female%20fronted%20metal
+
+
+ melancholy
+ 58602
+ www.last.fm/tag/melancholy
+
+
+ sad
+ 60116
+ www.last.fm/tag/sad
+
+
+ symphonic metal
+ 108815
+ www.last.fm/tag/symphonic%20metal
+
+
+ female vocalist
+ 102074
+ www.last.fm/tag/female%20vocalist
+
+
+ piano
+ 141495
+ www.last.fm/tag/piano
+
+
+ female vocals
+ 37817
+ www.last.fm/tag/female%20vocals
+
+
+ female
+ 83563
+ www.last.fm/tag/female
+
+
+ Nu Metal
+ 107258
+ www.last.fm/tag/nu%20metal
+
+
+ goth
+ 48604
+ www.last.fm/tag/goth
+
+
+ beautiful
+ 140020
+ www.last.fm/tag/beautiful
+
+
+ hard rock
+ 381087
+ www.last.fm/tag/hard%20rock
+
+
+ Love
+ 157521
+ www.last.fm/tag/love
+
+
+ american
+ 149106
+ www.last.fm/tag/american
+
+
+ melodic metal
+ 40993
+ www.last.fm/tag/melodic%20metal
+
+
+ Favourites
+ 95356
+ www.last.fm/tag/favourites
+
+
+ goth rock
+ 12965
+ www.last.fm/tag/goth%20rock
+
+
+ 00s
+ 141174
+ www.last.fm/tag/00s
+
+
+ vocal
+ 38828
+ www.last.fm/tag/vocal
+
+
+ Ballad
+ 44648
+ www.last.fm/tag/ballad
+
+
+ dark
+ 45841
+ www.last.fm/tag/dark
+
+
+ Favourite Songs
+ 39533
+ www.last.fm/tag/favourite%20songs
+
+
+ female fronted
+ 4853
+ www.last.fm/tag/female%20fronted
+
+
+ rock ballad
+ 4985
+ www.last.fm/tag/rock%20ballad
+
+
+ female vocal
+ 22565
+ www.last.fm/tag/female%20vocal
+
+
+ Female Voices
+ 16522
+ www.last.fm/tag/female%20voices
+
+
+ dark rock
+ 2109
+ www.last.fm/tag/dark%20rock
+
+
+ english
+ 28172
+ www.last.fm/tag/english
+
+
+ goth metal
+ 2153
+ www.last.fm/tag/goth%20metal
+
+
+ amy lee
+ 303
+ www.last.fm/tag/amy%20lee
+
+
+ beautiful music
+ 1531
+ www.last.fm/tag/beautiful%20music
+
+
+ amazing
+ 49778
+ www.last.fm/tag/amazing
+
+
+ USA
+ 37599
+ www.last.fm/tag/usa
+
+
+ Favorite Artists
+ 26305
+ www.last.fm/tag/favorite%20artists
+
+
+ Progressive rock
+ 326826
+ www.last.fm/tag/progressive%20rock
+
+
+ soft rock
+ 41218
+ www.last.fm/tag/soft%20rock
+
+
+ my music
+ 13139
+ www.last.fm/tag/my%20music
+
+
+ singer-songwriter
+ 404916
+ www.last.fm/tag/singer-songwriter
+
+
+ pop
+ 915204
+ www.last.fm/tag/pop
+
+
+ the open door
+ 28
+ www.last.fm/tag/the%20open%20door
+
+
+ sad songs
+ 3678
+ www.last.fm/tag/sad%20songs
+
+
+ favourite
+ 65888
+ www.last.fm/tag/favourite
+
+
+ 2000s
+ 10502
+ www.last.fm/tag/2000s
+
+
+ sexy
+ 69672
+ www.last.fm/tag/sexy
+
+
+ <3
+ 5327
+ www.last.fm/tag/%3C3
+
+
+ Dark metal
+ 12416
+ www.last.fm/tag/dark%20metal
+
+
+ favorite songs
+ 51160
+ www.last.fm/tag/favorite%20songs
+
+
+ Girl Rock
+ 3181
+ www.last.fm/tag/girl%20rock
+
+
+ calm
+ 24999
+ www.last.fm/tag/calm
+
+
+ depression
+ 3192
+ www.last.fm/tag/depression
+
+
+ Evanescence - Lithium
+ 3
+ www.last.fm/tag/evanescence%20-%20lithium
+
+
+ mood-driven
+ 109
+ www.last.fm/tag/mood-driven
+
+
+ interesting
+ 12940
+ www.last.fm/tag/interesting
+
+
+ I love this song
+ 5209
+ www.last.fm/tag/i%20love%20this%20song
+
+
+ melodic
+ 27655
+ www.last.fm/tag/melodic
+
+
+ Favourite bands
+ 9096
+ www.last.fm/tag/favourite%20bands
+
+
+ fav
+ 18998
+ www.last.fm/tag/fav
+
+
+ easy listening
+ 67983
+ www.last.fm/tag/easy%20listening
+
+
+ christian rock
+ 28279
+ www.last.fm/tag/christian%20rock
+
+
+ Awesome
+ 111779
+ www.last.fm/tag/awesome
+
+
+ Gothic metal and gothic rock
+ 157
+ www.last.fm/tag/gothic%20metal%20and%20gothic%20rock
+
+
+ sends shivers down my spine
+ 546
+ www.last.fm/tag/sends%20shivers%20down%20my%20spine
+
+
+ songs that give me chills
+ 411
+ www.last.fm/tag/songs%20that%20give%20me%20chills
+
+
+ Body Balance
+ 20
+ www.last.fm/tag/body%20balance
+
+
+ LOVE LOVE LOVE
+ 3222
+ www.last.fm/tag/love%20love%20love
+
+
+ post-grunge
+ 19325
+ www.last.fm/tag/post-grunge
+
+
+ emo
+ 242190
+ www.last.fm/tag/emo
+
+
+ alternative metal
+ 66844
+ www.last.fm/tag/alternative%20metal
+
+
+ soft
+ 25318
+ www.last.fm/tag/soft
+
+
+ pop rock
+ 84707
+ www.last.fm/tag/pop%20rock
+
+
+ powerful voice
+ 250
+ www.last.fm/tag/powerful%20voice
+
+
+ angst
+ 3384
+ www.last.fm/tag/angst
+
+
+ Favorite
+ 84330
+ www.last.fm/tag/favorite
+
+
+ best song
+ 1747
+ www.last.fm/tag/best%20song
+
+
+ Gothic Divas
+ 830
+ www.last.fm/tag/gothic%20divas
+
+
+ a subtle use of vocal harmony
+ 410
+ www.last.fm/tag/a%20subtle%20use%20of%20vocal%20harmony
+
+
+ dojaja
+ 423
+ www.last.fm/tag/dojaja
+
+
+ a vocal-centric aesthetic
+ 303
+ www.last.fm/tag/a%20vocal-centric%20aesthetic
+
+
+ Suchtlied
+ 23
+ www.last.fm/tag/suchtlied
+
+
+ moja
+ 344
+ www.last.fm/tag/moja
+
+
+ shadowy
+ 23
+ www.last.fm/tag/shadowy
+
+
+ minhas musicas prediletas
+ 25
+ www.last.fm/tag/minhas%20musicas%20prediletas
+
+
+ sound storm
+ 3393
+ www.last.fm/tag/sound%20storm
+
+
+ my life written in song
+ 181
+ www.last.fm/tag/my%20life%20written%20in%20song
+
+
+ JKRavensfield
+ 938
+ www.last.fm/tag/jkravensfield
+
+
+ alternative gothic metal
+ 22
+ www.last.fm/tag/alternative%20gothic%20metal
+
+
+ suicide chronicles
+ 19
+ www.last.fm/tag/suicide%20chronicles
+
+
+ Brings Close Impossible Distances
+ 31
+ www.last.fm/tag/brings%20close%20impossible%20distances
+
+
+ wake me up slowly
+ 66
+ www.last.fm/tag/wake%20me%20up%20slowly
+
+
diff --git a/test/data/b82e73057126a2cbd77e56273895d74c.xml b/test/data/b82e73057126a2cbd77e56273895d74c.xml
new file mode 100644
index 0000000..dbe0ba3
--- /dev/null
+++ b/test/data/b82e73057126a2cbd77e56273895d74c.xml
@@ -0,0 +1,19 @@
+
+
+
+Bon Jovi - Have a Nice Day
+Previews for Bon Jovi - Have a Nice Day
+http://www.last.fm/music/Bon+Jovi/Have+a+Nice+Day
+2009-03-04T09:49:28
+
+
+
+
+
diff --git a/test/data/fc9329f151a34119678b8be707ff4890.xml b/test/data/fc9329f151a34119678b8be707ff4890.xml
new file mode 100644
index 0000000..6b83d71
--- /dev/null
+++ b/test/data/fc9329f151a34119678b8be707ff4890.xml
@@ -0,0 +1,58 @@
+
+
+
+ Evanescence
+ f4a31f0a-51dd-4fa7-986d-3095c40c5ed9
+ http://www.last.fm/music/Evanescence
+ http://userserve-ak.last.fm/serve/34/7583903.jpg
+ http://userserve-ak.last.fm/serve/64/7583903.jpg
+ http://userserve-ak.last.fm/serve/126/7583903.jpg
+ 1
+
+ 967680
+ 36588935
+
+
+
+
+ Amy Lee
+ http://www.last.fm/music/Amy+Lee
+ http://userserve-ak.last.fm/serve/34/295731.jpg
+ http://userserve-ak.last.fm/serve/64/295731.jpg>
+ http://userserve-ak.last.fm/serve/126/295731.jpg
+
+
+ Within Temptation
+ http://www.last.fm/music/Within+Temptation
+ http://userserve-ak.last.fm/serve/34/5522800.jpg
+ http://userserve-ak.last.fm/serve/64/5522800.jpg>
+ http://userserve-ak.last.fm/serve/126/5522800.jpg
+
+
+ Lacuna Coil
+ http://www.last.fm/music/Lacuna+Coil
+ http://userserve-ak.last.fm/serve/34/3766299.jpg
+ http://userserve-ak.last.fm/serve/64/3766299.jpg>
+ http://userserve-ak.last.fm/serve/126/3766299.jpg
+
+
+ Seether (Feat. Amy Lee)
+ http://www.last.fm/music/Seether+%28Feat.+Amy+Lee%29
+ http://userserve-ak.last.fm/serve/34/22951195.jpg
+ http://userserve-ak.last.fm/serve/64/22951195.jpg>
+ http://userserve-ak.last.fm/serve/126/22951195.jpg
+
+
+ Flyleaf
+ http://www.last.fm/music/Flyleaf
+ http://userserve-ak.last.fm/serve/34/334410.jpg
+ http://userserve-ak.last.fm/serve/64/334410.jpg>
+ http://userserve-ak.last.fm/serve/126/334410.jpg
+
+
+
+ Fri, 30 Jan 2009 00:00:22 +0000
+ alternative rock band founded in Little Rock, Arkansas, United States in 1995 by singer/pianist Amy Lee and guitarist Ben Moody. The band currently consists of Amy Lee (lead vocals, piano, keyboards), Terry Balsamo (guitars), and Tim McCord (bass). Former members include David Hodges (piano, keyboards, backing vocals; left in 2002), Ben Moody (guitars; left in 2003), William Boyd (bass; left in 2006), John LeCompt (guitars, backing vocals; left in 2007), and Rocky Gray (drums; left in 2007).]]>
+ Evanescence is a Grammy-winning alternative rock band founded in Little Rock, Arkansas, United States in 1995 by singer/pianist Amy Lee and guitarist Ben Moody. The band currently consists of Amy Lee (lead vocals, piano, keyboards), Terry Balsamo (guitars), and Tim McCord (bass). Former members include David Hodges (piano, keyboards, backing vocals; left in 2002), Ben Moody (guitars; left in 2003), William Boyd (bass; left in 2006), John LeCompt (guitars, backing vocals; left in 2007), and Rocky Gray (drums; left in 2007). Session members include Troy McLawhorn (guitars) and Will Hunt (drums), both are from Dark New Day, they were "borrowed" to replace LeCompt and Gray during 2007 tours.
Amy Lee and Ben Moody met in 1994 at a youth camp in Little Rock, where Moody heard Lee playing I'd Do Anything for Love (But I Won't Do That) by Meat Loaf on the piano. Their first songs were Solitude and Give Unto Me, written by Lee, and Understanding and My Immortal, written by Moody. The songs were edited by both artists, and they shared equal credit.
Two of Lee and Moody's songs found playtime on local radio stations, raising local awareness of the group and demand for a show. The band eventually appeared live, and became one of the most popular acts in the area. After experimenting with band names, such as Childish Intentions and Stricken, they decided on Evanescence, which means "disappearance" or "fading away" (from the word evanesce, which means "to disappear"). Lee has stated she loves the name because "it is mysterious and dark, and places a picture in the listeners' mind.".
Their first full-length demo CD, Origin (released in 2000), is relatively unknown. The band also released two EPs. First, the self-titled Evanescence EP (1998) of which about 100 copies were made, and second the Sound Asleep EP, also known as the Whisper EP (1999), limited to 50 copies. Origin and the EPs contain demo versions of some of the songs on their debut album, Fallen. For example, the recording of My Immortal found on Fallen can also be found on Origin, minus a handful of additional string accompaniments. Only 2,500 copies of this record were produced; in response, Lee and Moody encouraged fans to download the band's older songs from the Internet.
In several interviews Amy has said that 'Origin' was not an album, it was merely meant to be a demo. While appearing to be an official CD, it was never meant to be officially released. According to Amy Lee "Origin is not an album. Should I say that clearer? 'Origin' is not an album. We recorded its demos, we recorded it a long time ago, in Ben's apartment or in my parent's attic with an 8-track recorder that cost $300. It sounds like crap. Don't feel bad that you don't have it, just download it. It looks kind of like an album because we had an artist make us this cool album cover because we were shopping it to record labels. We put everything we had on there, and some songs that are on there are on 'Fallen', just done right". The video of this interview can be seen here.
The band sent 'Origin' to several record labels, and eventually Wind-up Records signed them. The band then recorded a large collection of demos throughout 2001 and 2002. Afterwards, the band began work on their second full-length album. However, after the album had been finished, Hodges left the band in December of 2002.
The album, entitled 'Fallen', was then released in March 2003. It brought the band international fame, selling 14 millions of copies worldwide. 'Fallen' has since gone 6 times platinum in the United States and has sold more than 15 million copies altogether worldwide.
However, shortly after, Moody left the band on October 22 of 2003 due to internal struggles with the band members. He was then replaced by guitarist Terry Balsamo from the band Cold. Before Moody's departure, Gray, LeCompt, and Boyd had been session members, but afterwards they became full-time members.
At the 2004 Grammy Awards, Evanescence won Best New Artist and Best Hard Rock Performance for their single Bring Me to Life, known worldwide from the Daredevil soundtrack. That same year, the band released a live CD/DVD entitled 'Anywhere but Home', which also sold 1 million of copies worldwide and has since gone platinum in the United States.
Afterwards, the band began work on their next release. Many things set the release back, including the health problems of Terry. He was unfortunately affected by a stroke, but is recovering successfully. Amy also fired their old manager which they had relations with during 'Fallen', and brought him to court. In 2006, they finished recording their second album, titled 'The Open Door', as well as shooting a video for the single Call Me When You're Sober. On July 13th, 2006, Lee announced through Evanescence's online message board that bassist Boyd has decided to leave the band in order to make time for his personal life and family. Tim McCord was announced as Will Boyd's replacement in August 2006.
'The Open Door' debuted at number 1 in Australia, United States, Greece, Germany, and Switzerland. It sold over 1 million copies worldwide within the first week of its release.
The second single of 'The Open Door' was Lithium. A video was shot for the single - directed by Paul Fedor (who has worked with Marilyn Manson, Seether, and Deftones). It took 2 days to film, October 31 and November 1, 2006.
The third single off 'The Open Door' was Sweet Sacrifice. The label, Wind-up, had originally chosen All That I'm Living For to be the third single, but was met with opposition from the fans. The video was shot on March 9th and 10th, 2007. Directed by Paul Brown.
On May 4, 2007, John LeCompt announced that he had been fired from Evanescence, and also stated that drummer Rocky Gray had decided to quit as well. Both musicians posted on their personal MySpace pages to confirm the news report, however, neither elaborated about the circumstances surrounding their departures, and no official statement has yet been released by the band or label.
On his MySpace blog, LeCompt stated that Lee called his cellphone to fire him, and that no warning had previously been given nor were any negotiations made available. No replacements have been named as of yet, but Evanescence says they will continue touring and producing music.
Lee revealed during the taping of MuchMusic's January 9, 2007 episode of Live @ Much that she had become engaged the previous evening. She later confirmed on EvThreads.com that she was proposed to by Josh Hartzler, a 29-year-old therapist and long time friend. She noted in an interview that the songs Good Enough and Bring Me to Life were inspired by him. The couple were married on May 6, 2007, and honeymooned near The Bahamas. She has posted on EvThreads that she is "now officially Mrs. Amy Hartzler."
Discography
1998: Evanescence EP
1999: Sound Asleep EP
2000: Origin
2003: Mystary EP and Fallen (first official studio album)
2004: Anywhere but Home
2006: The Open Door
Official site: www.evanescence.com]]>
+
+
diff --git a/test/test_album.py b/test/test_album.py
index b86546c..e24e0f9 100644
--- a/test/test_album.py
+++ b/test/test_album.py
@@ -24,7 +24,7 @@ class TestAlbum(unittest.TestCase):
def setUp(self):
apikey = "152a230561e72192b8b0f3e42362c6ff"
self.api = Api(apikey, no_cache = True)
- self.album = self.api.get_album("Oasis", "Supersonic")
+ self.album = self.api.get_album("Supersonic", "Oasis")
def tearDown(self):
pass
diff --git a/test/test_playlist.py b/test/test_playlist.py
new file mode 100644
index 0000000..122686c
--- /dev/null
+++ b/test/test_playlist.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+
+__author__ = "Abhinav Sarkar "
+__version__ = "0.2"
+__license__ = "GNU Lesser General Public License"
+
+import unittest
+import datetime
+import sys, os
+
+from wsgi_intercept.urllib2_intercept import install_opener
+import wsgi_intercept
+from wsgi_test_app import create_wsgi_app
+
+install_opener()
+wsgi_intercept.add_wsgi_intercept('ws.audioscrobbler.com', 80, create_wsgi_app)
+
+sys.path.append(os.path.dirname(os.path.dirname(__file__)))
+from lastfm import Api
+
+class TestPlaylist(unittest.TestCase):
+ """ A test class for the Geo module. """
+
+ def setUp(self):
+ apikey = "152a230561e72192b8b0f3e42362c6ff"
+ self.api = Api(apikey, no_cache = True)
+ venue = self.api.get_venue('tokyo dome')
+ self.playlist = self.api.get_playlist('lastfm://playlist/album/2287667')
+
+ def tearDown(self):
+ pass
+
+ def testPlaylistUrl(self):
+ self.assertEqual(self.playlist.url, 'lastfm://playlist/album/2287667')
+
+# def testPlaylistData(self):
+# data = """
+#
+#
+#Bon Jovi - Have a Nice Day
+#Previews for Bon Jovi - Have a Nice Day
+#http://www.last.fm/music/Bon+Jovi/Have+a+Nice+Day
+#2009-03-04T09:49:28
+#
+#
+#
+#
+#
+#"""
+# self.assertEqual(self.playlist.data, data)
+
+test_suite = unittest.TestLoader().loadTestsFromTestCase(TestPlaylist)
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/test/test_track.py b/test/test_track.py
new file mode 100644
index 0000000..ca5c0a4
--- /dev/null
+++ b/test/test_track.py
@@ -0,0 +1,112 @@
+#!/usr/bin/env python
+
+__author__ = "Abhinav Sarkar "
+__version__ = "0.2"
+__license__ = "GNU Lesser General Public License"
+
+import unittest
+import datetime
+import sys, os
+
+from wsgi_intercept.urllib2_intercept import install_opener
+import wsgi_intercept
+from wsgi_test_app import create_wsgi_app
+
+install_opener()
+wsgi_intercept.add_wsgi_intercept('ws.audioscrobbler.com', 80, create_wsgi_app)
+
+sys.path.append(os.path.dirname(os.path.dirname(__file__)))
+from lastfm import Api
+
+class TestTrack(unittest.TestCase):
+ """ A test class for the Geo module. """
+ def setUp(self):
+ self.track = api.get_track('Lithium', 'Evanescence')
+
+ def tearDown(self):
+ pass
+
+ def testTrackStats(self):
+ self.assertEqual(self.track.stats.listeners, 159098)
+ self.assertEqual(self.track.stats.playcount, 1281349)
+
+ def testTrackWiki(self):
+ from datetime import datetime
+ self.assertEqual(self.track.wiki.summary,
+ "Written by: A. Lee Amy Lee has been quoted saying the song is about losing the comfort of sorrow. Lithium is a mood stabilizer that would take away the sorrow that the writer holds inside and she is not ready to let go of it. She has lived with sorrow so long that losing it now would be like losing a part of herself. That is what the whole refrain is about: "Lithium, Don't want to lock myself up inside, Lithium, Don't want to forget what it feels without, Lithium, I want to stay in love with my sorrow.")
+ self.assertEqual(self.track.wiki.published, datetime(2009, 2, 4, 8, 20, 59))
+
+ def testTrackSimilar(self):
+ tracks = [('Here Without You', '3 Doors Down'),
+ ('Wicked Game', 'HIM'),
+ ('In the Shadows', 'The Rasmus'),
+ ('Driven Under', 'Seether'),
+ ('Fine Again', 'Seether'),
+ ('Rip Out the Wings of a Butterfly', 'HIM'),
+ ('Outro', 'Breaking Benjamin'),
+ ('So Far Away', 'Staind'),
+ ('Outside', 'Staind'),
+ ('Guilty', 'The Rasmus')]
+ self.assertEqual([(s.name, s.artist.name) for s in self.track.similar[:10]], tracks)
+
+ def testTrackMostSimilar(self):
+ most_similar = self.track.most_similar
+ self.assertEqual((most_similar.name, most_similar.artist.name),
+ ('Here Without You', '3 Doors Down'))
+
+ def testTrackTopFans(self):
+ fans = ['danyzinhalee_ev', 'acandec', 'hawkieye', 'Nostress1991',
+ 'jfinner1', 'mychaelbs', 'vince88enzo', 'cuate_julian',
+ 'Slempa', 'fuckin_killa']
+ self.assertEqual([f.name for f in self.track.top_fans[:10]], fans)
+
+ def testTrackTopFan(self):
+ self.assertEqual(self.track.top_fan.name, 'danyzinhalee_ev')
+
+ def testTrackTopTags(self):
+ tags = ['rock', 'Gothic Rock', 'Gothic', 'Evanescence', 'female vocalists',
+ 'alternative', 'metal', 'Gothic Metal', 'alternative rock', 'lithium']
+ self.assertEqual([t.name for t in self.track.top_tags[:10]], tags)
+
+ def testTrackTopTag(self):
+ self.assertEqual(self.track.top_tag.name, 'rock')
+
+ def testTrackSearch(self):
+ tracks = [('Plug In Baby', 'Muse'),
+ ('Tell Me Baby', 'Red Hot Chili Peppers'),
+ ('Combat Baby', 'Metric'),
+ ('Hey Baby', 'No Doubt'),
+ ('Cry Baby Cry', 'The Beatles'),
+ ('Find My Baby', 'Moby'),
+ ('Nobody Puts Baby in the Corner', 'Fall Out Boy'),
+ ('Baby Fratelli', 'The Fratellis'),
+ ("I Can't Quit You Baby", 'Led Zeppelin'),
+ ('Baby Britain', 'Elliott Smith')]
+ self.assertEqual([(t.name, t.artist.name) for t
+ in list(api.search_track('baby')[:10])],
+ tracks)
+
+apikey = "152a230561e72192b8b0f3e42362c6ff"
+api = Api(apikey, no_cache = True)
+
+data = {
+ 'name': 'Lithium',
+ 'mbid': '',
+ 'url': 'http://www.last.fm/music/Evanescence/_/Lithium',
+ 'duration': 223000,
+ 'streamable': True,
+ 'full_track': False,
+ 'artist': api.get_artist('Evanescence'),
+ 'album': api.get_album('The Open Door', 'Evanescence'),
+ 'position': 4,
+ 'image': {}
+}
+for k,v in data.iteritems():
+ def testFunc(self):
+ self.assertEqual(getattr(self.track, k), v)
+ setattr(TestTrack, "testTrack%s" % k.replace('_', ' ').title().replace(' ', ''), testFunc)
+
+test_suite = unittest.TestLoader().loadTestsFromTestCase(TestTrack)
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/test/wsgi_test_app.py b/test/wsgi_test_app.py
index 32b3685..5081ad9 100644
--- a/test/wsgi_test_app.py
+++ b/test/wsgi_test_app.py
@@ -47,6 +47,7 @@ def test_app(environ, start_response):
wsgi_intercept.remove_wsgi_intercept('ws.audioscrobbler.com', 80)
import urllib2
filedata = urllib2.urlopen(url).read()
+ wsgi_intercept.add_wsgi_intercept('ws.audioscrobbler.com', 80, create_wsgi_app)
open(data_file, "w").write(filedata)
return [filedata]