C#でLast.fm APIを使用する

ハブラリュディ、おめでとうございます!



この投稿では、 Last.fmでトラックをスクロブルにするプログラムについて説明しました 次に、トラックのスクロブリングの例を使用して、C#でLast.fm APIとの対話を確立する方法を説明します。



最初に行う必要があるのは、APIアカウントを登録することです。 私たちはあなたのプロフィールに入り、 このリンクをたどります。 必要なフィールドに入力すると、いわゆるAPI Keysecret keyを取得します 。 サービスでクライアントを識別し、セッションキーを取得するために必要になります。 それらを取得するのに問題はありませんでした。



トラックをスクロブするにはセッションキーを取得する必要があるため、次の方法に興味があります。

- トークンの取得

- セッションキーの取得

-Scrobbleトラック



簡略化されたスキームは次のとおりです。APIキーを使用してトークンを取得し、次にトークンと秘密キーを使用してセッションキーを取得し、セッションキー、トークン、およびいくつかのパラメーターを使用してトラックをスクラブします。



また、HTTP要求を作成するために、 HttpWebRequestHttpWebResponseの 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フォーラムへのリンクを追加することになるでしょう(英語のみ)。 その使用がなければ、私はほとんど終わりに達しませんでした。



それだけです 各ステップを十分詳細に説明していただければ幸いです。 質問があれば、喜んでお答えします。

ご清聴ありがとうございました。



All Articles