已更新
我正在使用Spotify api根据用户在我的网站上关注的艺术家获取有关相关艺术家的信息。我想知道,为了以某种方式显示事物,我怎样才能对我得到的反应进行排序。
对于我网站上关注的每位艺术家,我想按照从最大到最低的关注者对相关艺术家的回应进行排序。如果我网站上的用户关注的是超过1位艺术家,我希望相关艺术家信息的完整回复由关注者订购。例如,如果我网站上的某人关注了Metallica和Oasis,我希望Metallica和Oasis的相关艺术家可以跟随者订购。现在,如果用户只关注一位艺术家,我的代码只能以我想要的方式正常工作。
我该怎么做呢?我也不希望在我的回复中有任何重复的艺术家,因为有时某些艺术家会有相同的相关艺术家。
当我在我的网站(Metallica和Oasis)上关注2位艺术家时,我得到相关艺术家的回复。不得不把它放在一个要点上,因为这里的反应很大。
https://gist.github.com/jlquaccia/07998975d3f11324ab0d
Controller - users_controller.rb:
def show
@user = User.find(params[:id])
@hash_version_array = []
@user.follows.each do |follow|
response = HTTParty.get("https://api.spotify.com/v1/artists/#{follow.artist_id}/related-artists")
@hash_version = JSON.parse(response.body)
@artist_name = follow.artist_name
@hash_version_array << @hash_version
end
sorted = @hash_version_array.first["artists"].sort_by { |a| a["followers"]["total"] }
@most_to_least_followers_version_array = sorted.reverse
end
查看 - users / show.html.erb:
<div class="row">
<div class="col-md-12 text-center">
<h3>Recommendations</h3>
<% if current_user.follows.count == 0 %>
<p>Recommendations based on who you follow will appear here..</p>
<% else %>
<p>Based on your follows you might also like..</p>
<% @most_to_least_followers_version_array.each do |item| %>
<div class="artist_recommendation_wrapper">
<div class="artist_recommendation artist_name newsfeed_artist">
<%= item['name'] %>
</div>
<%= number_with_delimiter(item['followers']['total'], delimiter: ',') %> followers
<%= link_to(image_tag(item['images'][0]['url'], class: 'img-responsive artist_recommendation_img', width: 200, height: 200), artists_path) rescue image_tag("microphone.png", class: 'img-responsive artist_img mic_bg', width: 200, height: 200) %>
<br>
</div>
<% end %>
<% end %>
</div>
</div>
答案 0 :(得分:1)
对于散列,你可以做到这一点:
hash.first["artists"].sort { |a| a["followers"]["total"] }
当hash
包含解析的JSON响应时。
答案 1 :(得分:0)
您需要创建一个包含所有后续艺术家的数组。改变这一行:
@hash_version_array << @hash_version
到
@hash_version_array << @hash_version["artists"]
并按
排序@hash_version_array.sort { |a| a["followers"]["total"] }
顺便说一句:你不需要所有这些变量都是全局的(用'@'表示)。这应保留在模板中所需的数据中。将这样的东西放入模型中可能也是一个好主意,并且可能将Spotify API响应写入数据库 - 这样您可以使用ActiveRecord及其所有魔法。
在此处提问时,您还应尝试尽可能多地抽象出信息。 I. e。数据来自spotify API并不是真正相关的,你可以通过使用较小的数据集来简化你的生活和这个问题。