Instagram access_token返回BadRequest错误

时间:2015-05-05 04:50:23

标签: ruby sinatra instagram instagram-api

我正在使用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似乎立即过期并抛出一个特定的“访问令牌无效”错误但是已经消失了,所以我不确定还有什么可能导致这个错误。

1 个答案:

答案 0 :(得分:1)

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

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

修改

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

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

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

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

EDIT2

由于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]})