Instagram access_token返回BadRequest错误



我正在使用Instagram gem,但在调用Instagram.user_recent_media时收到意外的错误请求错误。

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

它抛出此错误:

Instagram::BadRequest - GET https://api.instagram.com/v1/users/35099128/media/recent.json?client_id=12345&max_id=: 400: you cannot view this resource:

在我放置access_token的行中,它正在打印出访问令牌,因此它清楚地存在。当我卷曲请求时,我收到相同的错误,

{"meta":{"error_type":"APINotAllowedError","code":400,"error_message":"you cannot view this resource"}}

但是当我将请求粘贴到 Instagram API 控制台时,我得到了预期的结果(用户照片数据的 JSON)。这是我关注的用户。有一段时间,我的access_token似乎立即过期并抛出一个特定的"访问令牌无效"错误,但该错误已经消失,所以我不确定还有什么可能导致此错误。

您在Ruby 代码中使用的access_tokenclient_id必须与您在测试 Instagram API 控制台时在 Web 浏览器中使用的或不同。这是唯一的解释。

您在问题 (35099128) 中使用的 ID 适用于私人 Instagram 帐户。它在Instagram API控制台中工作的原因是,您已经使用Instagram帐户关注了私人帐户。

编辑

为了 100% 确定代码中具有正确的access_token,您可以尝试直接进行查询,而无需使用无关变量。使用以下格式(取自此问题):

https://api.instagram.com/v1/users/20282699/media/recent?access_token=510573486.ab7d4b6.d8b155be5d1a47c78f72616b4d942e8d

将用户 ID 和access_token替换为要在代码中打印的用户 ID 和 ID。

https://api.instagram.com/v1/users/35099128/media/recent?access_token=ACCESS_TOKEN_HERE

编辑2

由于access_token肯定有效,因此很明显您在 Ruby 代码中形成的请求缺少access_token.问题是这一行:

photos = Instagram.user_recent_media(id, {:max_id => params[:max_id]})

不知道你的access_token,可能是因为你没有使用你之前定义的client对象。尝试将其更改为此(或适当的等效项):

photos = client.user_recent_media(id, {:max_id => params[:max_id]})