2

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']}」は失敗するはずがありませんが、私の期待が間違っていない限り失敗します。

4

0 に答える 0