99using System . IO . Compression ;
1010using Newtonsoft . Json ;
1111using BreadPlayer . Web . Musixmatch . Models ;
12+ using RestSharp . Portable . HttpClient ;
13+ using RestSharp . Portable ;
1214
1315namespace BreadPlayer . Web . Musixmatch
1416{
1517 public class MusixmatchClient : ILyricAPI
1618 {
1719 public async Task < string > FetchLyrics ( Mediafile mediaFile )
18- {
19- HttpHelper . MusixmatchHttpClient . CancelPendingRequests ( ) ;
20- string requestURI = string . Format ( @"http://apic-desktop.musixmatch.com/ws/1.1/macro.subtitles.get?format=json&q_track={0}&q_artist={1}&q_album={2}&user_language=en&f_subtitle_length=0&f_subtitle_length_max_deviation=0&subtitle_format=lrc&app_id=web-desktop-app-v1.0&usertoken=1710149d15ba9db2a5a545aadd4f93928e90c783ab83565d105693" , mediaFile . Title , mediaFile . LeadArtist , mediaFile . Album ) ;
20+ {
21+ string requestURI = string . Format ( @"https://apic-desktop.musixmatch.com/ws/1.1/macro.subtitles.get?format=json&q_track={0}&q_artist={1}&q_album={2}&user_language=en&f_subtitle_length=0&f_subtitle_length_max_deviation=0&subtitle_format=lrc&app_id=web-desktop-app-v1.0&guid=e08e6c63-edd1-4207-86dc-d350cdf7f4bc&usertoken=1710144894f79b194e5a5866d9e084d48f227d257dcd8438261277" , mediaFile . Title , mediaFile . LeadArtist , mediaFile . Album ) ;
2122
22- //Send to the server
23- var result = await HttpHelper . MusixmatchHttpClient . GetAsync ( requestURI ) ;
24- if ( ! result . IsSuccessStatusCode )
25- return null ;
26- //Read the content of the result response from the server
27- using ( Stream stream = await result . Content . ReadAsStreamAsync ( ) )
28- using ( Stream decompressed = new GZipStream ( stream , CompressionMode . Decompress ) )
29- using ( StreamReader reader = new StreamReader ( decompressed ) )
23+ using ( var client = new RestClient ( requestURI ) )
3024 {
25+ var request = new RestRequest ( Method . GET ) ;
26+ request . AddHeader ( "connection" , "keep-alive" ) ;
27+ request . AddHeader ( "cookie" , "x-mxm-user-id=; x-mxm-token-guid=e08e6c63-edd1-4207-86dc-d350cdf7f4bc; mxm-encrypted-token=; AWSELB=55578B011601B1EF8BC274C33F9043CA947F99DCFF6AB1B746DBF1E96A6F2B997493EE03F2DD5F516C3BC8E8DE7FE9C81FF414E8E76CF57330A3F26A0D86825F74794F3C94" ) ;
28+ request . AddHeader ( "cache-control" , "no-cache" ) ;
29+ request . AddHeader ( "accept" , "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" ) ;
30+ request . AddHeader ( "user-agent" , "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36" ) ;
31+ request . AddHeader ( "upgrade-insecure-requests" , "1" ) ;
32+ request . AddHeader ( "accept-language" , "en-US,en;q=0.8" ) ;
33+ request . AddHeader ( "accept-encoding" , "gzip, deflate" ) ;
34+ request . AddHeader ( "dnt" , "1" ) ;
35+ IRestResponse response = await client . Execute ( request ) ;
3136 try
3237 {
33- var json = await reader . ReadToEndAsync ( ) . ConfigureAwait ( false ) ;
34- JsonSerializerSettings settings = new JsonSerializerSettings ( ) ;
35- settings . NullValueHandling = NullValueHandling . Ignore ;
36- settings . MissingMemberHandling = MissingMemberHandling . Ignore ;
38+ var json = response . Content ;
39+ JsonSerializerSettings settings = new JsonSerializerSettings
40+ {
41+ NullValueHandling = NullValueHandling . Ignore ,
42+ MissingMemberHandling = MissingMemberHandling . Ignore
43+ } ;
3744 var lyrics = JsonConvert . DeserializeObject < Lyrics > ( json , settings ) . Message ? . Body ? . MacroCalls ? . Subtitles ? . Message ? . Body ? . SubtitleList ;
3845 if ( lyrics ? . Any ( ) == true )
3946 {
@@ -42,11 +49,11 @@ public async Task<string> FetchLyrics(Mediafile mediaFile)
4249 else
4350 return null ;
4451 }
45- catch ( JsonSerializationException )
52+ catch ( JsonSerializationException )
4653 {
4754 return null ;
4855 }
49- }
56+ }
5057 }
5158 }
5259}
0 commit comments