1

youpy の「lastfm」gem を使用して、last.fm から動的データを取得する作業を行っています。データの取得はうまくいきます。ただし、レールは動的部分が気に入らないようです。今、ヘルパー フォルダーにある "HomeHelper" というヘルパー モジュール (Rails アプリの作成中に生成されたもの) にコードを追加しました。

module HomeHelper

@@lastfm = Lastfm.new(key, secret)
@@wesRecent = @@lastfm.user.get_recent_tracks(:user => 'weskey5644')    

def _album_art_helper

    trackHash = @@wesRecent[0]
    medAlbumArt = trackHash["image"][3]

    if medAlbumArt["content"] == nil
        html = "<img src=\"/images/noArt.png\"  height=\"auto\" width=\"150\" />"
    else
        html = "<img src=#{medAlbumArt["content"]} height=\"auto\" width=\"150\" />"
    end

    html.html_safe

end

def _recent_tracks_helper

    lfartist1 = @@wesRecent[0]["artist"]["content"]
    lftrack1 = @@wesRecent[0]["name"]
    lfartist1 = @@wesRecent[1]["artist"]["content"]
    lftrack1 = @@wesRecent[1]["name"]

    htmltrack = "<div class=\"lastfm_recent_tracks\">
                <div class=\"lastfm_artist\"><p>#{lfartist1 = @@wesRecent[0]["artist"]["content"]}</p></div>
                <div class=\"lastfm_trackname\"><p>#{lftrack1 = @@wesRecent[0]["name"]}</p></div>
                <div class=\"lastfm_artist\"><p>#{lfartist2 = @@wesRecent[1]["artist"]["content"]}</p></div>
                <div class=\"lastfm_trackname\"><p>#{lftrack2 = @@wesRecent[1]["name"]}</p></div>
            </div>
    "       

    htmltrack.html_safe
end
end

それぞれのパーシャルを作成し、インデックス ページに追加しました。

<div class="album_art"><%= render "album_art" %></div>
<div id="nowplayingcontain"><%= render "recent_tracks" %></div>

これで必要なデータが取得され、希望どおりにページに表示されます。ただし、last.fm によると、サーバーを再起動しない限り、曲の変更がサイトに反映されないようです。

Phusion Gassenger と WEBrick を使用してこれをテストしましたが、両方で動作するようです。これはこの特定のページのキャッシュに問題があるのではないかと考えていたので、ページをリロードして期限切れにするためにいくつかのキャッシュ ハックを試しました。これは役に立ちませんでした。

その後、このコードをヘルパー ファイルに貼り付けることは最善の解決策ではない可能性があるという結論に達しました。ヘルパーが動的コンテンツをどの程度うまく処理できるかはわかりません。このような。誰かがこれについて何か洞察を持っているなら、素晴らしい!! みんな、ありがとう!

4

1 に答える 1

1

問題は、ヘルパーを使用していることではなく、クラス変数を使用していることです。

module HomeHelper
    @@lastfm = Lastfm.new(key, secret)
    @@wesRecent = @@lastfm.user.get_recent_tracks(:user => 'weskey5644')

モジュールが最初に読み込まれたときに初期化されます。特に、@@wesRecent一度初期化されると、サーバーを再起動するか、新しいサーバープロセスを取得するまで同じままになります。get_recent_tracks必要なときに呼び出すことができるはずです。

def _album_art_helper
    trackHash = @@lastfm.user.get_recent_tracks(:user => 'weskey5644').first
    #...

これは、2 つのヘルパーが必ずしも同じトラック リストを使用しているとは限らないことを意味することに注意してください。

「最大で 1 分間に 1 回だけトラックを更新する」ロジックを少し追加することもできます。

于 2012-07-15T03:38:17.163 に答える