Ruby 用公式 SoundCloud API ラッパー ( https://github.com/soundcloud/soundcloud-rubysoundcloud
から) を使用して、SoundCloud API にアクセスしています。Oauth が使用されており、正しく設定されている。およびその他のリソースにアクセスできます。サウンド、クエリ トラック、コメントなどを正常にアップロードします。/me/activities
/me/...
ただし、次の API 呼び出しを使用して特定の次の (ID による) アクセスを試みると、401 Unauthorized エラーが発生します。
api_response = @soundcloud.get("/me/followings/#{params[:id]}")
以下のリストのクエリは正常に機能します。
api_response = @soundcloud.get("/me/followings")
なぜこれが起こっているのかについての洞察はありますか? 他のリソースの場合と同様に、soundcloud gem が oauth_token/client_id を API 呼び出しに適切にアタッチすると仮定します。
追加:
https://github.com/soundcloud/soundcloud-rubyのクローンでは、これは次のRSpec
テストで再現できます。
require 'helper'
RSpec.configure do |config|
WebMock.allow_net_connect!
end
describe SoundCloud do
context 'initialized with access_token' do
subject {
SoundCloud.new(:access_token => ENV['ACCESS_TOKEN'],
:client_id => ENV['CLIENT_ID'],
:client_secret => ENV['CLIENT_SECRET'])}
describe "#get /me" do
it "returns authenticated user details" do
resp = subject.send(:get, '/me')
# pp resp.inspect
expect(resp.kind).to eq('user')
end
end
describe "#get /me/followings" do
it "returns authenticated user followings" do
resp = subject.send(:get, '/me/followings')
# pp resp.inspect
expect(resp).to be_an Array
expect(resp[0].kind).to eq('user')
end
end
describe "#get /me/followings/#{ENV['TEST_ID']}" do
it "returns authenticated user following for id #{ENV['TEST_ID']}" do
resp = subject.send(:get, "/me/followings/#{ENV['TEST_ID']}")
# pp resp.inspect
expect(resp.kind).to eq('user')
end
end
end
end
次のスクリプトを使用してテストを実行します。
#!/bin/bash
export CLIENT_ID='Your Client ID'
export CLIENT_SECRET='Your Client Secret'
export ACCESS_TOKEN='Your Access Token'
export TEST_ID='Id of someone you follow'
echo CLIENT_ID: $CLIENT_ID
echo CLIENT_SECRET: $CLIENT_SECRET
echo ACCESS_TOKEN: $ACCESS_TOKEN
echo TEST_ID: $TEST_ID
echo '------'
ruby -S rspec spec/followings_spec.rb
テストの実行後、最後のテスト「#get /me/followings/#{ENV['TEST_ID']}」は失敗するはずがありませんが、私の期待が間違っていない限り失敗します。