1

「Your Life in Music」という Web アプリを作成しています。このアプリでは、ユーザーが生年月日を入力すると、生まれたときからの各誕生日のトップ ビルボード ヒットが表示されます。アプリは Last.fm API と通信して、各曲のアルバム アートを取得します。現在、アプリがすべてのアルバム アートをコンパイルするにはしばらく時間がかかります。誰かが、すべての API 呼び出しを 1 つのリクエストにまとめることで処理を高速化することを提案しました。私は少し初心者ですが、これができるかどうかはわかりません。私の質問: 複数の呼び出しを単一の要求に結合するにはどうすればよいですか?

アプリはこちら: http://www.dailyspiro.com

そして重要なコード:

function compileDisplay(birthDays) {
// create an HTML list that for each birthday displays top song, artist, and album art
htmlObj = {}
for (i = 0; i < birthDays.length; i++) {
    var age = birthDays[i][0]; // age isn't equal to i if user was born before 1958
    var date = birthDays[i][1];
    var track = billboard[date]['song'];
    var artist = billboard[date]['artist'];
    getAlbumArt(age, track, artist, birthDays);
  }
}

function getAlbumArt(age, track, artist, birthDays) {
$.getJSON("http://ws.audioscrobbler.com/2.0/?method=track.getInfo&api_key=(myApiKey)&artist=" + artist + "&track=" + track + "&format=json&callback=?", function (data) {
    try {
        var image = data.track.album.image[2]['#text'];
        if (image == 'http://cdn.last.fm/flatness/catalogue/noimage/2/default_album_medium.png') {
            throw 'generic image';
        }
    } catch (err) {
        var image = 'images/' + track + '.jpg';
    }
    compileHtml(age, track, artist, image, birthDays)
  })
}
4

1 に答える 1

3

API 呼び出しをまとめてバッチ処理できるかどうかは、API 自体次第です。API をざっと見てみたところ、複数の操作をバッチ処理できるものは見つかりませんでした。また、一度に複数のトラック情報を取得できる方法を確認しましたが、成功しませんでした。あなたは運が悪いようです。

ただし、これらのリクエストを常に実行することを避けるために、ある種のキャッシュを実装することができます。たとえば、lastfm API とクライアント アプリケーションの間の中間層として機能する独自のサーバー側サービスを持つことができます。そのサーバー側 API は、キャッシュやその他の最適化ロジックを実装します。

于 2013-08-13T23:40:31.453 に答える