C # рдХреЗ рд╕рд╛рде Last.fm API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдореИрдВ рдЖрдкрдХреЛ рдирдорд╕реНрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ, рд╣реЗрдмреНрд░рд╛рд▓реБрдбреА!

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВрдиреЗ Last.fm рдкрд░ рдкрдЯрд░рд┐рдпреЛрдВ рдХреЛ рд╕реНрдХреНрд░рдм рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА ред рдЕрдм рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЯреНрд░реИрдХ рд╕реНрдХреНрд░реЛрдмрдмреНрд▓рд┐рдВрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ C # рдореЗрдВ Last.fm рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдЕрдкрдирд╛ рдПрдкреАрдЖрдИ рдЦрд╛рддрд╛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдЖрдкрдХреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ ред рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рднрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рддрдерд╛рдХрдерд┐рдд рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдФрд░ рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдорд┐рд▓рддреА рд╣реИред рдЙрдиреНрд╣реЗрдВ рдЖрдкрдХреЗ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдкрд╣рдЪрд╛рдирдиреЗ рдФрд░ рд╕рддреНрд░ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореБрдЭреЗ рдЙрдиреНрд╣реЗрдВ рдкрд╛рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред

рдЪреВрдВрдХрд┐ рдЯреНрд░реИрдХ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рддреНрд░ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд▓реЗрдВрдЧреЗ:
- рдЯреЛрдХрди рд▓реЗрдирд╛
- рдПрдХ рд╕рддреНрд░ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
- рд╕реНрдХреНрд░рдмрдмрд▓ рдЯреНрд░реИрдХ

рд╕рд░рд▓реАрдХреГрдд рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ - рд╣рдо рдЕрдкрдиреА рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдореЗрдВ рдЯреЛрдХрди рдФрд░ рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рддреНрд░ рдХреБрдВрдЬреА рдорд┐рд▓рддреА рд╣реИ, рдлрд┐рд░ рд╣рдо рд╕рддреНрд░ рдХреБрдВрдЬреА, рдЯреЛрдХрди рдФрд░ рдХреБрдЫ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░реИрдХ рдХреЛ рд╕реНрдХреНрд░рдм рдХрд░рддреЗ рд╣реИрдВред

рд╣рдореЗрдВ HTTP рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд░реНрдЧреЛрдВ - HttpWebRequest рдФрд░ HttpWebResponse рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рддреЛ, рдЪрд▓реЛ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐:
//   HttpWebRequest    Create  WebRequest,     HttpWebRequest.    ,    API,    - method=auth.gettoken   API Key HttpWebRequest tokenRequest = (HttpWebRequest)WebRequest.Create("http://ws.audioscrobbler.com/2.0/?method=auth.gettoken&api_key=" + ApiKey); //    HttpWebResponse tokenResponse = (HttpWebResponse)tokenRequest.GetResponse(); //       string tokenResult = new StreamReader(tokenResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd(); //  ,   .      XML (,         ,    ). string token = String.Empty; for (int i = tokenResult.IndexOf("<token>") + 7; i < tokenResult.IndexOf("</token"); i++) { token += tokenResult[i]; } //       http://www.last.fm/api/auth/ c  API Key     ) Process s = Process.Start("http://www.last.fm/api/auth/?api_key=" + ApiKey + "&token=" + token); //  ,    ,        . //     DialogResult d = MessageBox.Show("  ?", "", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); //     if (d == DialogResult.OK) { //      ( API Key, ,     ,     '&'  '=' string tmp = "api_key" + ApiKey + "methodauth.getsessiontoken" + token + mySecret; //    MD5 (,         ) string sig = MD5(tmp); //     HttpWebRequest sessionRequest = (HttpWebRequest)WebRequest.Create("http://ws.audioscrobbler.com/2.0/?method=auth.getsession&token=" + token + "&api_key=" + ApiKey + "&api_sig=" + sig); //   ,      true,   . -   . sessionRequest.AllowAutoRedirect = true; //   HttpWebResponse sessionResponse = (HttpWebResponse)sessionRequest.GetResponse(); string sessionResult = new StreamReader(sessionResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd(); //   (    XML ) for (int i = sessionResult.IndexOf("<key>") + 5; i < sessionResult.IndexOf("</key>"); i++) { sessionKey += sessionResult[i]; } } 


рддреЛ, рдЖрдзрд╛ рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЖрдЧреЗ рдмрдврд╝реЗрдВред рдЕрдм рдЖрдкрдХреЛ рдЯреНрд░реИрдХ рдХреЛ рд╕реНрдХреНрд░рд┐рдмрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 //  UNIX-    TimeSpan rtime = DateTime.Now - (new DateTime(1970, 1, 1, 0, 0, 0)); TimeSpan t1 = new TimeSpan(3, 0, 0); rtime -= t1; //   ,     -     //    int timestamp = (int)rtime.TotalSeconds; //    string submissionReqString = String.Empty; //  ( ,   API Key): submissionReqString += "method=track.scrobble&sk=" + sessionKey + "&api_key=" + ApiKey; //       (, ,  , ),       UrlEncode  HttpUtility. submissionReqString += "&artist=" + HttpUtility.UrlEncode(artist); submissionReqString += "&track=" + HttpUtility.UrlEncode(track); submissionReqString += "& timestamp=" + timestamp.ToString(); //         &  t.  -     ,   . submissionReqString += "&album=" + HttpUtility.UrlEncode(album); //   (    (  '&'  '='    ): string signature = String.Empty; //    signature += "album" + album; //  API Key signature += "api_key" + ApiKey; //  signature += "artist" + artist; //     signature += "methodtrack.scrobblesk" + sessionKey; //  signature += "timestamp" + timestamp; //   signature += "track" + track; //      signature += mySecret; //     MD5     submissionReqString += "&api_sig=" + MD5(signature); //      POST     HttpWebRequest submissionRequest = (HttpWebRequest)WebRequest.Create("http://ws.audioscrobbler.com/2.0/"); //     //   .   ,   ,      submissionRequest.ServicePoint.Expect100Continue = false; //    submissionRequest.UserAgent = "Mozilla/5.0"; //     ,    POST  submissionRequest.Method = "POST"; //    POST   submissionRequest.ContentType = "application/x-www-form-urlencoded"; //  ,         ,   Exception submissionRequest.Timeout = 6000; //     ,        (UTF8 ) byte[] EncodedPostParams = Encoding.UTF8.GetBytes(submissionReqString); submissionRequest.ContentLength = EncodedPostParams.Length; //      ( ,  ,  ) submissionRequest.GetRequestStream().Write(EncodedPostParams, 0, EncodedPostParams.Length); //   submissionRequest.GetRequestStream().Close(); //    HttpWebResponse submissionResponse = (HttpWebResponse)submissionRequest.GetResponse(); //    string submissionResult = new StreamReader(submissionResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd(); //  .     status="ok",   ,  Exception  -  . if (!submissionResult.Contains("status=\"ok\"")) throw new Exception("  !  - " + submissionResult); //   ,      ,   . 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд┐рдП рдмрд┐рдирд╛ рдкрдЯрд░рд┐рдпреЛрдВ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрджреНрдпрддрди рдПрдкреАрдЖрдИ рд╣реИ, рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрд╡рд╢реНрдпрдХ рдерд╛ (рдпрд╣ рдореЗрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рд╕рддреНрд░ рдХреБрдВрдЬреА рдХреЛ рдХрд╣реАрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╣рд░ рдмрд╛рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА (рдХреБрдВрдЬреА рддрдм рддрдХ рдорд╛рдиреНрдп рд╣реЛрдЧреА рдЬрдм рддрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рдЕрдкрдиреЗ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЖрдкрдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ "рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ" рдирд╣реАрдВ рдХрд░рддрд╛)ред

рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдореБрдЦреНрдп рд▓рд┐рдВрдХ рджрд┐рдПред рд╢рд╛рдпрдж рдпрд╣ рдПрдкреАрдЖрдИ (рдХреЗрд╡рд▓ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Last.fm рдлреЛрд░рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛, рдореИрдВ рд╢рд╛рдпрдж рд╣реА рдЕрдВрдд рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реВрдВред

рд╡рд╣ рд╕рдм рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА, рдпрджрд┐ рдХреЛрдИ рд╣реЛред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/In143143/


All Articles