Ruby Instagram access\u令牌返回BadRequest错误
我正在使用Instagram gem,在调用Instagram.user\u recent\u media时,收到一个意外的错误请求Ruby Instagram access\u令牌返回BadRequest错误,ruby,sinatra,instagram,instagram-api,Ruby,Sinatra,Instagram,Instagram Api,我正在使用Instagram gem,在调用Instagram.user\u recent\u media时,收到一个意外的错误请求 get '/api/photos' do client = Instagram.client(:access_token => session[:access_token]) puts 'access token: ' << session[:access_token].inspect id = params[:id]
get '/api/photos' do
client = Instagram.client(:access_token => session[:access_token])
puts 'access token: ' << session[:access_token].inspect
id = params[:id]
photos = Instagram.user_recent_media(id, {:max_id => params[:max_id]})
end
在我放置access_令牌的行中,它正在打印一个access令牌,以便它清楚地存在。当我卷曲请求时,我得到了相同的错误
{"meta":{"error_type":"APINotAllowedError","code":400,"error_message":"you cannot view this resource"}}
但当我将请求粘贴到Instagram API控制台时,我得到了预期的结果(用户照片数据的JSON)。这是一个我关注的用户。有一段时间,我的access_令牌似乎立即过期,并抛出了一个特定的“access token not valid”(访问令牌无效)错误,但该错误已经消失,因此我不确定还有什么可能导致此错误 您在Ruby代码中使用的
access\u令牌
或客户端id
必须与您在测试Instagram API控制台时在web浏览器中使用的令牌不同。这是唯一的解释
您在问题中使用的ID(35099128)用于私人Instagram帐户。它在Instagram API控制台中工作的原因是您已经在使用Instagram帐户跟踪私人帐户
编辑
为了100%确保您的代码中有正确的access\u令牌
,您可以尝试直接进行查询,而不使用额外的变量。使用以下格式(摘自):
将用户id和access\u令牌
替换为您正在代码中打印的标识
编辑2
由于access\u令牌
绝对有效,因此Ruby代码中形成的请求显然缺少access\u令牌
。问题在于这一行:
photos = Instagram.user_recent_media(id, {:max_id => params[:max_id]})
不知道您的访问\u令牌
,可能是因为您没有使用先前定义的客户端
对象。尝试将其更改为以下值(或相应的值):
只是出于时兴,在api控制台中是否放置了
max\u id=
?是的,我尝试过使用max\u id
和不使用max\u id
,在api控制台中都可以。我在我的应用程序中使用它来不断循环浏览用户的媒体,因为您一次最多只能抓取20个项目。在API中,我在控制台中的身份验证与在我的应用程序中的身份验证相同,因此我应该根据我跟踪的私人用户拥有相同的权限…否?我不明白为什么我会有一个不同的访问令牌。另外,re:client_id,我正在从我的终端复制请求,因此它直接来自我的Ruby代码。@thisanem查看对我答案的编辑。我认为您的代码和API控制台之间一定有些不同。尽管如此,我认为Instagram不允许您进行任何API调用来查询私人用户的信息。将我登录的access\u令牌粘贴到请求中的效果与浏览器和curl中的预期一样。这意味着您在Ruby代码中形成的请求缺少access\u令牌
。再次查看我的编辑。非常感谢!我将令牌添加到选项散列中(在此提交中找到:)photos=Instagram.user_recent_media(id,{:access_token=>session[:access_token],:max_id=>params[:max_id]})
photos = Instagram.user_recent_media(id, {:max_id => params[:max_id]})
photos = client.user_recent_media(id, {:max_id => params[:max_id]})