首页 > 解决方案 > 通过 RestClient 处理 API 调用时出错

问题描述

我正在使用rspotify从专辑名称中收集数据列表。一直以来,我都达到了 Spotify 的 api 速率限制,现在想创建一些后备方案,等到我可以搜索并重试搜索,以免丢失我已经检索到的 (x) 数据量。

gem 使用 RestClient 但不幸的是,当我达到速率限制时,我没有得到等到我可以拨打另一个电话所需的时间:

.rvm/gems/ruby-2.5.1/gems/rest-client 2.0.2/lib/restclient/abstract_response.rb:223:in 'exception_with_response': 429 Too Many Requests (RestClient::TooManyRequests)

以上就是我给的全部了。下面的begin/rescue语句不起作用,因为当代码失败时,它完全失败而不重试。我在这里做错了什么?

begin
  search = RSpotify::Album.search(album[:title])
rescue RestClient::ExceptionWithResponse, RestClient::TooManyRequests, Exception => e
  puts e
  retry
rescue e
  puts e
  retry
end

以下是他们建议错误处理的方式:

https://github.com/rest-client/rest-client#response-callbacks-error-handling

标签: rubyhttpspotifyrest-clientrescue

解决方案


我在考虑可能会限制,所以在例外情况下,将 RSpotify::authenticate("id", "token")与我拥有的多个 Spotify 帐户中的一些一起使用,然后重试

所以像这样的东西放在一起

begin
   album = RSpotify::Album.find(track.first.album.id)
rescue RestClient::ExceptionWithResponse, RestClient::TooManyRequests, Exception => e            
   RSpotify::authenticate("id2", "token2")
   retry
end  

推荐阅读