2012-06-18 109 views
0

我已經成功地進行使用代碼線沿線的API調用到Facebook,Twitter以及LastFM等檢索喜歡,關注者和聽衆多行:的Rails 3 - 檢索JSON響應

def get_twitter 
    @artist = Artist.accessible_by(current_ability).find(params[:id]) 
    if @artist.twitter_screen_name.present? 
     require 'open-uri' 
     require 'json' 
     result = JSON.parse(open("https://api.twitter.com/1/users/show.json?screen_name="<<@artist.twitter_screen_name<<"&include_entities=true").read) 
     @followers = result["followers_count"] 
    end 
    end  

這工作細如只有一個數據集返回並且很容易訪問我想要的位。 LastFM等的響應嵌套而它扔我,我成功地訪問了聽衆數幾乎完全一樣,但上面只使用了線:

@listeners = result["artist"]["stats"]["listeners"].to_i 

現在,我試圖從Songkick的檢索事件列表。顯然,一個響應包含多個事件,所以我在知道如何循環響應時遇到了麻煩。

他們的開發者指南是在這裏:http://www.songkick.com/developer/upcoming-events-for-artist

樣品迴應如下,但是這僅僅是爲了單個事件:

{ 
    "resultsPage:" { 
    "results": { "event": [ 
     { 
     "id":11129128, 
     "type":"Concert", 
     "uri":"http://www.songkick.com/concerts/11129128-wild-flag-at-fillmore?utm_source=PARTNER_ID&utm_medium=partner", 
     "displayName":"Wild Flag at The Fillmore (April 18, 2012)", 
     "start":{"time":"20:00:00", 
       "date":"2012-04-18", 
       "datetime":"2012-04-18T20:00:00-0800"}, 
     "performance":[{"artist":{"uri":"http://www.songkick.com/artists/29835-wild-flag?utm_source=PARTNER_ID&utm_medium=partner", 
            "displayName":"Wild Flag","id":29835,"identifier":[]}, 
         "displayName":"Wild Flag", 
         "billingIndex":1, 
         "id":21579303, 
         "billing":"headline"}], 
     "location":{"city":"San Francisco, CA, US","lng":-122.4332937,"lat":37.7842398}, 
     "venue":{"id":6239, 
       "displayName":"The Fillmore", 
       "uri":"http://www.songkick.com/venues/6239-fillmore?utm_source=PARTNER_ID&utm_medium=partner", 
       "lng":-122.4332937, "lat":37.7842398, 
       "metroArea":{"uri":"http://www.songkick.com/metro_areas/26330-us-sf-bay-area?utm_source=PARTNER_ID&utm_medium=partner", 
           "displayName":"SF Bay Area","country":{"displayName":"US"},"id":26330,"state":{"displayName":"CA"}}}, 
     "status":"ok", 
     "popularity":0.012763 
     }, .... 
    ]}, 
    "totalEntries":24, 
    "perPage":50, 
    "page":1, 
    "status":"ok" 
    } 
} 

沒有人有任何指針?

回答

1

你只需要得到數組&迭代:

parsed = JSON.parse(some_json) 
events = parsed['resultsPage']['results']['event'] 
events.each do |event| 
    puts event["type"] 
    #access other parts of the event 
end 
+0

非常好,謝謝! – Raoot