![](https://habrastorage.org/storage2/70d/ac3/cbc/70dac3cbce19ea293e4a8d2e5f9b3979.png)
この投稿では、 Last.fmでトラックをスクロブルにするプログラムについて説明しました。 次に、トラックのスクロブリングの例を使用して、C#でLast.fm APIとの対話を確立する方法を説明します。
最初に行う必要があるのは、APIアカウントを登録することです。 私たちはあなたのプロフィールに入り、 このリンクをたどります。 必要なフィールドに入力すると、いわゆるAPI Keyとsecret keyを取得します 。 サービスでクライアントを識別し、セッションキーを取得するために必要になります。 それらを取得するのに問題はありませんでした。
トラックをスクロブするにはセッションキーを取得する必要があるため、次の方法に興味があります。
- トークンの取得
- セッションキーの取得
-Scrobbleトラック
簡略化されたスキームは次のとおりです。APIキーを使用してトークンを取得し、次にトークンと秘密キーを使用してセッションキーを取得し、セッションキー、トークン、およびいくつかのパラメーターを使用してトラックをスクラブします。
また、HTTP要求を作成するために、 HttpWebRequestとHttpWebResponseの 2つのクラスを使用する必要があります。
それでは、コードのレビューに取り掛かりましょう。
まず、セッションを取得するメソッド:
// 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); // , , .
したがって、パスワードを入力せずにトラックがスクロールされます。 これは、パスワードの入力が必要になる前に更新されたAPIです(これは私のプログラムから理解できます)。 セッションキーをどこかに保存すると、毎回ユーザーにアクセスの確認を求める必要がなくなります(キーは、ユーザーがこのページのプロファイルからクライアントを「切断」するまで有効です)。
記事の冒頭で主要なリンクを提供しました。 おそらく、 APIを使用するためのLast.fmフォーラムへのリンクを追加することになるでしょう(英語のみ)。 その使用がなければ、私はほとんど終わりに達しませんでした。
それだけです 各ステップを十分詳細に説明していただければ幸いです。 質問があれば、喜んでお答えします。
ご清聴ありがとうございました。