Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor method matcher_lyrics_get #48

Merged
merged 1 commit into from
Jan 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading