JavaScriptでlast.fm APIを使用する

時間の経過とともに、著者は以下が完全な愚かさであることを認識しました



読みたくない人のために



例で以下のすべてが行われているページ (アラートをオンにする)。

このトピックに到達したオンラインプレーヤー



はじめに



良い一日! 少し前に「オンラインプレーヤー」などのトピックに触れました。 たくさんあります。 主に自分用にアナログを作りたかった。 vk.comベース、last.fm scrobbling(後の最後)、それからのアルバム、プレイリスト、ハートなど、標準で求められています。 問題はすぐに発生しました-私のホスティングは、それに対する絶え間ない要求に対して非常に悪いです。 ほぼ完全にJavaScript(後のjs)に切り替える以外に選択肢はありませんでした。 ですから、ロシア語の「last.fm api javascriptの操作方法」という説明は見つかりませんでしたが、この問題の解決に多くの神経と時間を費やしたので、始めましょう。



scrobblingの例を使用して、last.fm APIの動作を調べてみましょう。 JavaScriptを使用して、セッション、認証、および関数呼び出しに触れます。 はい、私たちはそれを誰もが理解できる言語で分析し、若者と老人の両方が理解できるようにします。



作業進捗



1. last.fm apiのアカウントがない場合は、 実行して実行します 。 アカウントとそのキーをお持ちの場合は、読み進めてください。



2.最後のフリッパーから、javascript APIを操作するためのjsライブラリ [github.com]へのリンクがあります。 かなり良いです、グーグルで検索しませんでした。動作するので、使用します。 そのため、このライブラリを「標準」と呼びましょう。ライブラリはすべて「標準」です。



3.最初に行う必要があるのは、標準のmd hash ... torus?!を置き換えることです。 それをmd5エンコーダーと呼びましょう。 なんらかの理由でキリル文字を使用した標準のmd5暗号化機能であるDuckは機能しません(または機能しますが、フリッパーは暴動し、ハッシュを受け入れません)。 実績のあるバージョンは、 ここ [pajhome.org.uk]にあります。 (現在のバージョン2.2を書いている時点で)ダウンロードセクションでzipをダウンロードし、その中のmd5-min.jsを見つけて、標準のlastfm.api.md5.jsに置き換えます。



4.標準のlastfm.api.jsでは、841行をmd5(文字列)返すように変更します。 戻り時にhex_md5(文字列); 。 新しいエンコーダー。



5.素晴らしい、ハッシングはこれからです。 スクリプトの接続を開始します。

<script type="text/javascript" src="md5-min.js"></script> <script type="text/javascript" src="lastfm.api.js"></script>
      
      





標準のlastfm.api.md5.jsをmd5-min.jsに変更しました。標準の内容を変更しただけでなく、注意してください。 そして、順序を守ることを忘れないでください。



6.フリッパーで簡単なJavaScriptコードを使用してWebサイトを認証します

 var lastfm = new LastFM({ apiKey : '96d047d302a8707f3a7410873466dbfd', apiSecret : '3afdcf3ccad058a82202544549cb141b' });
      
      





はい、javascriptとlast.fmを使用する主な欠点は、キーが開いていることです。 apiKey-フリッパーのAPIキー、apiSecret-シークレット。 スクリプトを接続した後のこのコードは、忘れないでください。



7.さらに、標準のlastfm.api.jsには、再びスクロブリングに関する小さな欠陥があります。 659-674行が見つかりました(余分な行、タブ、コメントをカットします)

 scrobble : function(params, callbacks){ if(params.constructor.toString().indexOf("Array") != -1){ var p = {}; for(i in params){ for(j in params[i]){ p[j + '[' + i + ']'] = params[i][j]; } } params = p; } signedCall('track.scrobble', params, session, callbacks, 'POST'); }
      
      







入力にはセッションはありませんが、出力にはセッションがあります。 奇妙なことですが、他のどこにも言葉がないセッションについて。 最初の行を書き換えます。

scrobble:function(params、callbacks){ => scrobble:function(params、session、callbacks){



8.私たちの主な目標はスクロブリングであることを忘れないでください。 ここで、パスは分岐します。 セッションキーがないと仮定します。次に読み進めて、その取得方法を簡単に説明します。 セッションキーがある場合は、手順11に進みます。読むことはできますが。



9.セッションキーの取得は、2つの段階で構成されます。 1つ目は、一時トークンを取得することです。 練習が示すように、それは安全にセッションのキーになることができますが、60分間だけです。 2番目の段階は、セッションキーを取得するプロセスです。



10.でトークンを取得できます

 http://www.lastfm.ru/api/auth?api_key=96d047d302a8707f3a7410873466dbfd
      
      





「=」記号の後にフリッパーからのAPIキーが続きます。 たとえば、ユーザーがクリックしてこのページに移動することにより、簡単なリンクを作成できます。 fins APIアカウントにコールバックURLフィールドがあります 。 ユーザーは、認証後にこのフィールドで指定されたアドレスを離れますか?トークン= XXXXXがアドレスに割り当てられます。 さらに、2つの実装オプションがあります。



最初のオプション


サーバー側 コールバックURLは、サーバー側の処理スクリプトがあるページにつながります。 つまり 消しゴムを操作するためのある種のライブラリが接続され、アドレスから受け取ったトークンを処理し、すでに受け取ったセッションキーをデータベース内の特定のユーザーに割り当てます。 そして、このキーをデータベースからダウンロードして使用します。 私にとっては簡単でしたが、私はそうしましたが、私の目標はこの方法について詳しく説明することではありません。



2番目のオプション


クライアント jsによってアドレスからトークンを取得し、トークン変数に条件付きでプルします。 私たちにはトークンがあります-私たちの人生で初めて最後のAPIに目を向けます:

 lastfm.auth.getSession({token: token}, {success: function(data){ alert(", "+data.session.name+"!\n\r  ,    "+data.session.key); //   sk = data.session.key; //       . }, error: function(code, message){ if (code == 4) alert(" .   "); }});
      
      





これは、セッションキーの呼び出しがどのように見えるかです。 答えはjson形式です。 ここで、ニュアンスを考慮する必要があります。一度セッションキーが必要な場合は、サードパーティは必要ありません。 フリッパーと長時間通信したい場合、サイトへの各入り口を再接続するようユーザーに依頼するのは愚かなことです。 この場合、あなたの心が望むように、クッキーまたはデータベースを使用する必要があります。

auth.getSessionは、 すべての最後のメソッドの他のメソッドに置き換えられ、最初の波括弧の下に、渡す必要のあるすべての変数を入力します。 さて、大胆にtrack.scrobleに変更しましょう



11. Skrobblim。 必須パラメーター(最後に要求される )は、トラックの名前、アーティスト、およびUNIX時間です。

 var ts = Math.floor(new Date().getTime()/1000); lastfm.track.scrobble({artist: "Linkin Park", track: "Numb", timestamp: ts}, {key: sk}, {success: function(data){ alert(" !"); }, error: function(code, message){ alert("  ..."); }});
      
      





{key:sk}これはセッションキーです。 これはその神秘的なセッションです。



12.非常に重要な発言:突然1秒でフリッパーの2つのリクエストがすり抜けると、トラブルが発生します。 標準のlast.fm APIの93行: var jsonp = 'jsonp' + new Date()。GetTime(); =>

var jsonp = 'jsonp' +新しい日付()。getTime()+ '' + Math.round(1000000 * Math.random());



おわりに



それがすべてのようです。 他に言わなければならないこと:出力は常に異なるオブジェクトであり、次にdata.resultまたはdata.artistmatchesなので、注意を払ってください。 良い仕事をしてください!



参照資料



例で上記のすべてが行われるページ (アラートをオンにする)。

このトピックに到達したオンラインプレーヤー



オフトピック:モニターを見ながらプレイヤーをサポートしますが、トピックはプレイヤーに関するものではなく、プレイヤーは開発中です。突然誰かがトピックのトピックに興味を持っているので、彼はそれを理解したいので、誓わないでください。 これについては別のトピックがあります。 後で。



All Articles