为什么Spotify响应不允许我在收到错误时过去?

时间:2017-04-22 19:13:05

标签: ruby api http error-handling spotify

我只是想查找一个用户,如果用户存在,那么很好,如果没有,我想说明......

# Install if you haven't already
require 'twilio-ruby'
require 'rspotify'

# Twilio Security Access
account_sid = 'enter_your_sid'
auth_token = 'enter_your_auth_token'

# Spotify User Lookup
def user_lookup(user_search)
    spotify_user = RSpotify::User.find(user_search)
end

# Crafted text message using Twilio
def text(account_sid, auth_token, message)
    client = Twilio::REST::Client.new account_sid, auth_token

    client.messages.create(
        from: '+twilio_number', # I guess you can use my number for testing
        to: '+personal_number', # Feel free to enter your number to get the messages
        body: message
    )
end

# Ask who you should lookup on Spotify
puts "Who would you like to look up? "
user_input_1 = gets.chomp

# Make sure the user exists
if user_lookup(user_input_1).id != user_input_1 # Test with "zxz122"
    msg = "Could not find that Spotify user!"
    text(account_sid, auth_token, msg)
    puts "Spotify user details send failure!"
else
    user_exist = user_lookup(user_input_1)
    user_profile_url = "https://open.spotify.com/user/#{user_input_1}"
    msg = "Check out #{user_input_1} on Spotify: #{user_profile_url}"
    text(account_sid, auth_token, msg)
    puts "Spotify user details have been sent!"
end

我一直得到的回应是......

`return!': 404 Resource Not Found (RestClient::ResourceNotFound)

那么为什么它没有命中我的if语句并触发“找不到Spotify用户!”??

1 个答案:

答案 0 :(得分:0)

为什么呢? RestClient的创建者设计了gem,以便在资源不存在时引发异常(也就是返回404 not found)。

要解决此问题,只需将方法更改为:

def user_lookup(user_search)
  RSpotify::User.find(user_search) rescue false
end

将您的if ... else块更改为:

if user_lookup(user_input_1)
  user_profile_url = "https://open.spotify.com/user/#{user_input_1}"
  msg = "Check out #{user_input_1} on Spotify: #{user_profile_url}"
  text(account_sid, auth_token, msg)
  puts "Spotify user details have been sent!"
else
  msg = "Could not find that Spotify user!"
  text(account_sid, auth_token, msg)
  puts "Spotify user details send failure!"
end