diff --git a/pylast/__init__.py b/pylast/__init__.py index f7fe250..c4cabd7 100644 --- a/pylast/__init__.py +++ b/pylast/__init__.py @@ -404,6 +404,32 @@ class _Network(object): return seq + def get_top_tracks_by_tag(self, tag, limit=None, cacheable=True): + """Returns the top tracks by tag as a sequence of TopItem objects. + Parameters: + tag (Required) : A country name, as defined by the ISO 3166-1 + limit (Optional) : The number of results to fetch per page.Defaults to 50. + """ + + params = {"tag":tag} + + if limit: + params["limit"] = limit + + doc = _Request(self,"tag.getTopTracks",params).execute(cacheable) + seq = [] + + for node in doc.getElementsByTagName("track"): + title = _extract(node,"name") + artist = _extract(node,"name",1) + track = Track(artist,title,self) + weight = _number(_extract(node, "playcount")) + + seq.append(TopItem(track,weight)) + + return seq + + def get_geo_events( self, longitude=None, latitude=None, location=None, distance=None, tag=None, festivalsonly=None, limit=None, cacheable=True): diff --git a/tests/test_pylast.py b/tests/test_pylast.py index 8962ef3..c67dee0 100755 --- a/tests/test_pylast.py +++ b/tests/test_pylast.py @@ -985,6 +985,17 @@ class TestPyLast(unittest.TestCase): self.assertIsInstance(tracks[0], pylast.TopItem) self.assertIsInstance(tracks[0].item, pylast.Track) + def test_tag_get_top_tracks(self): + # Arrange + # Act + tags = self.network.get_top_tracks_by_tag( + tag="happy", limit=1) + + # Assert + self.assertEqual(len(tags), 1) + self.assertIsInstance(tags[0], pylast.TopItem) + self.assertIsInstance(tags[0].item, pylast.Track) + def test_metro_class(self): # Arrange # Act