你没看错。自 2016 年 6 月起,任何 Instagram API 调用都需要访问令牌。
在documentation 中描述了获取访问令牌。不需要应用批准。
有两种获取方式:服务器端或客户端。第二个选项(称为隐式身份验证)只能在客户端设置中启用 隐式 OAuth 时使用(管理客户端 > 编辑客户端 > 安全性 > 禁用隐式 OAuth)。默认禁用。
在任何一种情况下,您都需要将用户重定向到授权 URL 以获取访问令牌。
显式模式(服务器端)的 URL 是:
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code
隐式模式(客户端)的 URL 是:
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token
在此之后,您将被重定向到REDIRECT-URI,它将被传递一个参数。对于显式模式,这将是一个带有 code 的查询字符串,而对于隐式模式,您将直接以哈希的形式获得 访问令牌:
http://your-redirect-uri?code=CODE
http://your-redirect-uri#access_token=ACCESS-TOKEN
对于隐式模式,您可以从 Javascript 中的 window.location.hash 获取访问令牌。
然而,对于显式模式,您需要进一步处理 代码 以获得访问令牌。您可以在API Documentation 中阅读如何做到这一点。此处不再赘述。
问题在于,每个想要查看您的提要的用户都需要登录 Instagram(并拥有一个帐户)才能查看它。在您的情况下,这可能是不希望的。但是,有几个选项可以解决这个(相当烦人的)问题:
您可以重复使用自己的(已经获得的)访问令牌来为每个用户显示 Instagram 提要。您需要了解每个令牌的速率限制。对于沙盒应用程序,这是 500 个 API 调用/小时,而实时模式允许 5000 个 API 调用/小时。 [source] 您可以将令牌存储在表中并以循环方式使用它们,以允许更多的 API 调用。这涉及手动获取您的应用程序可以使用的一堆令牌(越多越好)。考虑到 Instagram 不保证访问令牌具有无限的生命周期,这可能不是理想的解决方案。
您可以通过将 /media/ 附加到用户页面 URL 来检索 JSON 数据而无需身份验证,如 this post 中所述。无需令牌或客户端 ID 即可工作。但是,这仅适用于用户,不适用于标签。此外,Instagram 没有记录此功能,因此无法保证将来可以使用。
您可以使用 Juicer 或 Dialogfeed 之类的聚合器来代替您处理访问令牌。这通常不是免费的。
我也在为我的网站制作 Instagram 供稿,这是我从研究中得出的结论。请原谅我犯的任何错误。
编辑:以下是沙盒应用的更多限制。
在沙盒模式下,您只能访问沙盒用户(即收到沙盒邀请的用户)的数据。这意味着:
- 用户检索的媒体,例如
/users/{user-id}/media/recent,如果用户不是任何沙盒用户,将返回空响应。
- 按标签检索的媒体,例如
/tags/{tag-name}/media/recent,将只包含属于沙盒用户的标记媒体。
因此,要使标签供稿发挥作用,它需要处于活动状态(经过审核和批准)。如果您不想这样做,唯一的选择是使用我上面提到的聚合器。