Skip to content

Commit

Permalink
Merge pull request #48 from hudsonbrendon/fix/matcher-lyrics-get
Browse files Browse the repository at this point in the history
refactor method matcher_lyrics_get
  • Loading branch information
hudsonbrendon authored Jan 13, 2025
2 parents b941fab + f8aba35 commit d4baefb
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 101 deletions.
74 changes: 9 additions & 65 deletions pymusixmatch/musixmatch.py
Original file line number Diff line number Diff line change
Expand Up @@ -340,68 +340,12 @@ def track_richsync_get(
)
return data

def track_lyrics_post(self, track_id, lyrics_body, _format="json"):
"""Submit a lyrics to our database.
It may happen we don’t have the lyrics for a song,
you can ask your users to help us sending the missing
lyrics. We’ll validate every submission and in case, make
it available through our api.
Please take all the necessary precautions to avoid users
or automatic software to use your website/app to use this
commands, a captcha solution like http://www.google.com/recaptcha
or an equivalent one has to be implemented in every user
interaction that ends in a POST operation on the musixmatch api.
Parameters:
track_id - A valid country code (default US)
lyrics_body - The lyrics
formatDecide the output type json or xml (default json)
"""
data = self._request(
self._get_url(
"track.lyrics.post?track_id={}" "&lyrics_body={}&format={}".format(
track_id, lyrics_body, _format
),
),
)
return data

def track_lyrics_feedback_post(self, track_id, lyrics_id, feedback, _format="json"):
"""This API method provides you the opportunity to help
us improving our catalogue.
We aim to provide you with the best quality service imaginable,
so we are especially interested in your detailed feedback to help
us to continually improve it.
Please take all the necessary precautions to avoid users or
automatic software to use your website/app to use this commands,
a captcha solution like http://www.google.com/recaptcha or an
equivalent one has to be implemented in every user interaction that
ends in a POST operation on the musixmatch api.
Parameters:
lyrics_id - The musiXmatch lyrics id.
track_id - The musiXmatch track id.
feedback - The feedback to be reported, possible values are:
wrong_lyrics, wrong_attribution, bad_characters,
lines_too_long, wrong_verses, wrong_formatting
format - Decide the output type json or xml (default json)
"""
data = self._request(
self._get_url(
"track.lyrics.feedback.post?"
"track_id={}&lyrics_id={}"
"&feedback={}&format={}".format(track_id, lyrics_id, feedback, _format),
),
)
return data

def matcher_lyrics_get(self, q_track, q_artist, _format="json"):
def matcher_lyrics_get(
self,
q_track: str,
q_artist: str,
track_isrc: Optional[str] = "",
) -> dict:
"""Get the lyrics for track based on title and artist.
Parameters:
Expand All @@ -410,12 +354,12 @@ def matcher_lyrics_get(self, q_track, q_artist, _format="json"):
q_artist - The song artist
track_isrc - If you have an available isrc id in your catalogue
you can query using this id only (optional)
format - Decide the output type json or xml (default json)
track_isrc - If you have an available musicbrainz recording id
"""
data = self._request(
self._get_url(
"matcher.lyrics.get?" "q_track={}&q_artist={}&format={}".format(
q_track, q_artist, _format
"matcher.lyrics.get?" "q_track={}&q_artist={}&track_isrc={}".format(
q_track, q_artist, track_isrc
),
),
)
Expand Down
23 changes: 23 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,3 +155,26 @@ def track_subtitle_get() -> dict:
},
}
}


@pytest.fixture
def matcher_lyrics_get() -> dict:
return {
"message": {
"header": {"status_code": 200, "execute_time": 0.19601988792419},
"body": {
"lyrics": {
"lyrics_id": 6471198,
"restricted": 0,
"instrumental": 0,
"lyrics_body": "When I walk on by, girls be looking like damn he fly\r\nI pay to the beat, walking on the street with in my new lafreak, yeah",
"lyrics_language": "en",
"script_tracking_url": "http:\/\/tracking.musixmatch.com\/t1.0\/5RIyfJ3c",
"pixel_tracking_url": "http:\/\/tracking.musixmatch.com\/t1.0\/5RIyfJ/",
"html_tracking_url": "http:\/\/tracking.musixmatch.com\/t1.0\/5RIyfJ3cC39",
"lyrics_copyright": "Lyrics powered by www.musiXmatch.com",
"updated_time": "2011-06-30T13:31:20Z",
}
},
}
}
41 changes: 5 additions & 36 deletions tests/test_musixmatch.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,42 +169,11 @@ def test_track_richsync_get(self, requests_mock, track_richsync_get: dict) -> No
request = self.musixmatch.track_richsync_get(114837357)
assert track_richsync_get == request

@pytest.mark.skip("Refactor test")
def test_track_lyrics_post(self):
self.assertEqual(
self.musixmatch.track_lyrics_post(1471157, "test")["message"]["header"][
"status_code"
],
200,
)
self.assertEqual(
self.musixmatch.track_lyrics_post(1471157, "test")["message"]["body"],
"",
)

@pytest.mark.skip("Refactor test")
def test_track_lyrics_feedback_post(self):
self.assertEqual(
self.musixmatch.track_lyrics_post(1471157, 4193713, "wrong_verses")[
"message"
]["body"],
"",
)

@pytest.mark.skip("Refactor test")
def test_matcher_lyrics_get(self):
self.assertEqual(
self.musixmatch.matcher_lyrics_get("Sexy and I know it", "LMFAO")[
"message"
]["body"]["lyrics"]["lyrics_language_description"],
"English",
)
self.assertEqual(
self.musixmatch.matcher_lyrics_get("Sexy and I know it", "LMFAO")[
"message"
]["body"]["lyrics"]["lyrics_language"],
"en",
)
def test_matcher_lyrics_get(self, requests_mock, matcher_lyrics_get) -> None:
url = "https://api.musixmatch.com/ws/1.1/matcher.lyrics.get?q_track=Let%20Me%20Love%20You&q_artist=justinbieber"
requests_mock.get(url=url, json=matcher_lyrics_get)
request = self.musixmatch.matcher_lyrics_get("Let Me Love You", "justinbieber")
assert matcher_lyrics_get == request

@pytest.mark.skip("Refactor test")
def test_matcher_track_get(self):
Expand Down

0 comments on commit d4baefb

Please sign in to comment.