我正在使用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似乎立即过期并抛出一个特定的“访问令牌无效”错误但是已经消失了,所以我不确定还有什么可能导致这个错误。
答案 0 :(得分:1)
您在Ruby代码中使用的access_token
或client_id
必须与您在测试Instagram API控制台时在Web浏览器中使用的不同。这是唯一的解释。
您在问题中使用的ID( 35099128 )适用于私人Instagram帐户。它在Instagram API控制台中工作的原因是因为您已经使用Instagram帐户关注了私人帐户。
修改
要100%确定代码中有正确的access_token
,您可以尝试直接进行查询,而无需使用无关的变量。使用以下格式(取自this question):
将用户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]})