我们有一个客户在网站上有一个简单的Instagram功能,可以通过某个标签来提取照片。他们只是注意到它不起作用。获取错误 - 访问令牌无效。我想自1日起因为更新。我们之前并不需要访问令牌,因为我们没有对用户做任何事情 - 只是标签。
现在看起来我们需要一个,文档对如何获得一个没有任何意义。他们似乎并不接受大多数应用。该应用程序也处于沙盒模式。所以我假设它是因为它已切换到那个?没有发生这种情况的通知。
获取访问令牌的文档的第一步是"将用户引导到我们的授权URL。"那有什么意思?没有提供链接或任何东西。它还说"公司名称,联系电子邮件和隐私政策URL是开始提交所必需的。"我们的应用没有隐私政策......它只是一个简单的标记Feed。我不明白为什么一切都如此复杂,以便有一个简单的标签供稿。
是否有等待时间让应用程序获得批准..如果它获得批准......在获取访问令牌之前,我是否必须获得批准?这在任何地方都没有概述。
答案 0 :(得分:9)
你做对了。截至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
,这将传递一个参数。对于显式模式,这将是一个带有代码的查询字符串,而对于隐式模式,您将直接将访问令牌作为哈希:
http://your-redirect-uri?code=CODE
http://your-redirect-uri#access_token=ACCESS-TOKEN
对于隐式模式,您可以从Javascript中的window.location.hash
获取访问令牌。
但是,对于显式模式,您需要进一步处理代码以获取访问令牌。您可以在API Documentation中了解如何执行此操作。我不会在这里继续这一点。
问题在于每个用户都希望看到您的Feed需要登录Instagram(并拥有一个帐户)才能查看。在您的情况下,这可能不是所希望的。但是,有一些选项可以解决这个问题(相当烦人):
您可以重复使用自己的(已获得的)访问令牌来显示每个用户的Instagram Feed。您需要了解每个令牌的速率限制。对于沙盒应用程序,这是500个API调用/小时,而实时模式允许5000个API调用/小时。 [source] 您可以在表中存储令牌并以循环方式使用它们,以允许更多的API调用。这涉及手动获取应用程序可以使用的一堆令牌(越多越好)。考虑到Instagram不保证访问令牌具有无限的生命周期,这可能不是理想的解决方案。
您可以通过将/media/
附加到用户页面网址来检索未经身份验证的JSON数据,如this post中所述。此操作无需令牌或客户端ID。但是,这仅适用于用户,不适用于标签。此外,Instagram没有记录此功能,因此未来无法保证。
您可以使用Juicer或Dialogfeed等聚合器来代替您处理访问令牌。这通常不是免费的。
我也正在为我的网站制作Instagram Feed,这是我从研究中得出的结论。如果我犯了任何错误,请光顾。
修改:以下是沙盒应用的一些限制。
在沙盒模式下,您只能访问沙箱用户(因此收到沙箱邀请的用户)的数据。这意味着:
/users/{user-id}/media/recent
将返回空响应。/tags/{tag-name}/media/recent
,仅包含属于沙盒用户的已标记媒体。因此,要使标记Feed生效,需要才能生效(已审核并批准)。如果您不想这样做,唯一的选择是使用我上面提到的聚合器。