如何使用Ruby+RestClient实现Spotify授权并解决运行报错问题
问题解决步骤
1 修复依赖兼容报错
你当前的报错核心是Ruby 3.0版本和低版本mime-types依赖语法不兼容,你安装的rest-client 2.1.0默认依赖的mime-types 2.99.3版本使用了_1/_2/_3作为普通变量名,而Ruby 2.7之后将这几个标识符作为内置编号参数保留,所以触发语法错误,后续的rest-client加载失败也是这个前置错误导致的。
修复操作:
- 执行命令卸载旧版本冲突包:
gem uninstall mime-types -v 2.99.3 - 执行命令安装兼容Ruby3的依赖版本:
gem install mime-types -v 3.4.1,随后执行gem install rest-client重新安装rest-client - 如果你使用Gemfile管理项目依赖,直接在Gemfile中添加以下配置后执行
bundle install即可:
gem 'mime-types', '~> 3.4', '>= 3.4.1' gem 'rest-client', '~> 2.1'
2 正确实现Spotify OAuth2授权流程
Spotify采用OAuth2授权码模式完成账号授权,直接GET授权链接无法直接拿到授权结果,需按以下步骤实现:
2.1 前置准备
在Spotify开发者后台完成应用创建,记录你的CLIENT_ID、CLIENT_SECRET,并配置和代码中完全一致的redirect_uri回调地址,同时按需申请对应接口权限的scope值。
2.2 生成用户授权链接
require 'rest-client' require 'json' require 'uri' CLIENT_ID = "你自己的CLIENT_ID" REDIRECT_URI = "你在开发者后台配置的回调地址" SCOPE = "user-read-private user-read-email" # 可根据你需要拉取的数据调整scope范围 # 拼接授权链接 auth_params = { client_id: CLIENT_ID, response_type: 'code', redirect_uri: REDIRECT_URI, scope: SCOPE, show_dialog: true } auth_url = "https://accounts.spotify.com/authorize?#{URI.encode_www_form(auth_params)}" puts "请访问以下链接完成账号授权:#{auth_url}"
2.3 用授权码换取access_token
用户完成授权后,Spotify会自动跳转到你配置的redirect_uri,并在地址参数中携带code授权码,拿到授权码后调用接口换取接口调用凭证:
CLIENT_SECRET = "你自己的CLIENT_SECRET" code = "回调地址中获取到的code参数值" token_params = { grant_type: 'authorization_code', code: code, redirect_uri: REDIRECT_URI, client_id: CLIENT_ID, client_secret: CLIENT_SECRET } token_resp = RestClient.post('https://accounts.spotify.com/api/token', token_params) token_data = JSON.parse(token_resp.body) access_token = token_data['access_token'] refresh_token = token_data['refresh_token']
2.4 调用接口拉取个人数据
拿到access_token后即可携带凭证调用Spotify开放接口,示例拉取当前账号基础信息:
user_resp = RestClient.get( 'https://api.spotify.com/v1/me', { Authorization: "Bearer #{access_token}" } ) puts JSON.parse(user_resp.body)
内容的提问来源于stack exchange,提问作者dreeeeeedd
相关产品推荐
相关产品推荐

