Rails多个第三方API请求

时间:2014-01-29 01:59:29

标签: ruby-on-rails

我的Rails操作相对于我的应用程序的其余部分非常慢。它要求来自两个不同来源的数据。一旦从每个源中提取了数据,我就会遍历数据并与当前数据库进行比较,如果不存在类似的记录则创建记录。

我下面有几个型号。歌曲模型通常有一个RdioMeta或一个SoundcloudMeta,每个都包含分别从Rdio和Soundcloud中提取的信息。

def搜索     @search = []

rdio_client  = RdioApi.new consumer_key: 'consumer_key', consumer_secret: 'consumer_secret'
rdio_results = rdio_client.search(query: params[:query], types: "track", count: 25)

sc_client  = Soundcloud.new client_id: 'client_id'
sc_results = sc_client.get('/tracks', q: "%#{params[:query]}%")

rdio_results.results.each do |result|
  song = Song.includes(:rdio_meta).where(name: result[:name], artist: result[:artist]).first_or_initialize do |song|
    rdio_meta = RdioMeta.new url: result[:key], duration: result[:duration]
    song.rdio_meta = rdio_meta
  end
  song.save
  @search << song
end

sc_results.each do |result|
  song = Song.includes(:soundcloud_meta).where(name: result[:title], artist: result[:user][:username]).first_or_initialize do |song|
    rdio_meta = SoundcloudMeta.new url: result[:stream_url], duration: result[:duration]
    song.rdio_meta = rdio_meta
  end
  song.save
  @search << song
end

render json: @search, root: 'songs'

我的问题是双重的。一,我习惯了JavaScript和异步请求/承诺,那么在Ruby / Rails中处理异步的最佳方法是什么?第二,我对原始代码进行了大量重构,但我认为它可能会更好。我可以对代码进行任何优化吗?

0 个答案:

没有答案