【问题标题】:Instagram access_token returning BadRequest errorInstagram access_token 返回 BadRequest 错误
【发布时间】:2015-05-05 04:50:22
【问题描述】:

我正在使用 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 的行中,它打印出一个访问令牌,因此它显然存在。当我 curl 请求时,我得到了同样的错误,

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

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

【问题讨论】:

  • 只是出于好奇,你在 api 控制台中输入max_id=
  • 是的,我在有和没有 max_id 的情况下都试过了,它在 API 控制台中的任何一种方式都可以工作。我在我的应用中使用它来循环浏览用户的媒体,因为您一次最多只能抓取 20 个项目。

标签: ruby sinatra instagram instagram-api


【解决方案1】:

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

您在问题中使用的 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]})

【讨论】:

  • 在 API 中,我在控制台中的身份验证与我的应用程序中的用户相同。因此,根据我关注的私人用户,我应该拥有相同的权限...不是吗?我不明白为什么我会有不同的访问令牌。另外,回复:client_id,我正在从终端复制请求,因此它直接来自我的 Ruby 代码。
  • @thisAnneM 看到我的答案的编辑。我认为您的代码和 API 控制台之间一定有所不同。不过,我认为 Instagram 不允许您进行任何 API 调用来查询私人用户的信息是可以想象的。
  • 将我记录的 access_token 粘贴到请求中按预期在浏览器和 curl 中工作。
  • 这意味着您在 Ruby 代码中形成的请求缺少 access_token。再次查看我的编辑。
  • 感谢一百万!我将令牌添加到选项哈希中(在此提交中找到:github.com/Instagram/instagram-ruby-gem/commit/…)。 photos = Instagram.user_recent_media(id, {:access_token =&gt; session[:access_token], :max_id =&gt; params[:max_id]})
猜你喜欢
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多