· 6 years ago · Oct 23, 2019, 06:38 PM
1 private void button2_Click(object sender, EventArgs e)
2 {
3 var md5Hash = MD5.Create();
4 HttpWebRequest tokenRequest = (HttpWebRequest)WebRequest.Create("http://ws.audioscrobbler.com/2.0/?method=auth.gettoken&api_key=" + ApplicationLastFM.Default.AppToken);
5 HttpWebResponse tokenResponse = (HttpWebResponse)tokenRequest.GetResponse();
6 string tokenResult = new StreamReader(tokenResponse.GetResponseStream(), Encoding.UTF8).ReadToEnd();
7 string tmp = "api_key" + ApplicationLastFM.Default.AppToken + "methodauth.getsessiontoken" + ApplicationLastFM.Default.Token + ApplicationLastFM.Default.AppSecret;
8 string sig = GetMd5Hash(md5Hash, tmp);
9 HttpWebRequest sessionRequest = (HttpWebRequest)WebRequest.Create("http://ws.audioscrobbler.com/2.0/?method=auth.getsession&token=" + ApplicationLastFM.Default.Token + "&api_key=" + ApplicationLastFM.Default.AppToken + "&api_sig=" + sig);
10 sessionRequest.AllowAutoRedirect = true;
11 HttpWebResponse sessionResponse = (HttpWebResponse)sessionRequest.GetResponse();
12 string sessionResult = new StreamReader(sessionResponse.GetResponseStream(),Encoding.UTF8).ReadToEnd();
13 var sessionKey = sessionResult.Substring(sessionResult.IndexOf("key"), 36);
14 sessionKey = sessionKey.Replace("key>", "");
15
16 //var signature = GetMd5Hash(md5Hash, "api_key"+ ApplicationLastFM.Default.AppToken+"methodauth.getSessiontoken"+ ApplicationLastFM.Default.Token+ ApplicationLastFM.Default.AppSecret);
17 var artist = tbArtist.Text;//.Replace(" ", "+");
18 var track = tbTrack.Text;//.Replace(" ", "+");
19 string signature = String.Empty;
20
21
22 // потом API Key
23 signature += "api_key" + ApplicationLastFM.Default.AppToken;
24 signature += "artist" + artist;
25 signature += "methodtrack.lovesk" + sessionKey;
26 signature += "track" + track;
27
28 // добавляем секретный код в конец
29 signature += ApplicationLastFM.Default.AppSecret;
30
31
32 string sign = GetMd5Hash(md5Hash, signature);
33
34 // Uri uri = new Uri("http://ws.audioscrobbler.com/2.0/?method=track.love&api_key=" + ApplicationLastFM.Default.AppToken + "&artist="+ artist +"&track=" + track + "&sk=" + sessionKey);
35 //HttpWebRequest likeRequest = (HttpWebRequest)WebRequest.Create("http://ws.audioscrobbler.com/2.0/?method=track.love&api_key=" + ApplicationLastFM.Default.AppToken
36 // + "&api_sig=" + sig + "&artist=" + artist + "&track=" + track + "&sk=" + sessionKey);
37
38
39
40 var ss = "method=track.love&track=" + track + "&artist=" + artist + "&api_key=" + ApplicationLastFM.Default.AppToken
41 + "&sk=" + sessionKey + "&api_sig=" + sign;
42
43 HttpWebRequest submissionRequest = (HttpWebRequest)WebRequest.Create("http://ws.audioscrobbler.com/2.0/"); // адрес запроса без параметров
44
45 // очень важная строка. Долго я мучался, пока не выяснил, что она обязательно должна быть
46 submissionRequest.ServicePoint.Expect100Continue = false;
47
48 submissionRequest.Method = "POST";
49 // В случае с POST обязательная строка
50 submissionRequest.ContentType = "application/x-www-form-urlencoded";
51
52 // ставим таймаут, чтобы программа не повисла при неудаче обращения к серверу, а выкинула Exception
53 submissionRequest.Timeout = 6000;
54
55 // Преобразуем данные в соответствующую кодировку, получаем массив байтов из строки с параметрами (UTF8 обязательно)
56 byte[] EncodedPostParams = Encoding.UTF8.GetBytes(ss);
57 submissionRequest.ContentLength = EncodedPostParams.Length;
58
59 // Записываем данные в поток запроса (массив байтов, откуда начинаем, сколько записываем)
60 submissionRequest.GetRequestStream().Write(EncodedPostParams, 0, EncodedPostParams.Length);
61 // закрываем поток
62 submissionRequest.GetRequestStream().Close();
63
64 // получаем ответ сервера
65 HttpWebResponse submissionResponse = (HttpWebResponse)submissionRequest.GetResponse();
66
67 //var request = WebRequest.Create(uri);
68 }