获取 Instagram 访问令牌
Obtaining Instagram Access Token
我们有一个客户在网站上有一个简单的 Instagram 功能,可以通过特定标签提取照片。他们只是注意到它不起作用。收到错误 - 无效的访问令牌。我猜是因为更新从 1 号开始。我们过去不需要访问令牌,因为我们不对用户做任何事情——只是标签。
现在看来我们需要一个,而文档对如何获取一个毫无意义。而且他们似乎不接受大多数应用程序。该应用程序也处于沙盒模式。所以我假设这是因为它已经切换到那个?没有收到有关此事件的通知。
获取访问令牌的文档中的第一步是"Direct the user to our authorization url."这到底是什么意思?没有提供 link 或任何东西。它还说 "Company Name, Contact Email and Privacy Policy URL are required to start a submission." 我们的应用程序没有隐私政策...它只是一个简单的标签提要。我不明白为什么一切都如此复杂以至于只有一个简单的标签提要。
是否需要等待应用程序获得批准...如果获得批准...我是否必须在获得访问令牌之前获得批准?这在任何地方都没有概述。
你没看错。自 2016 年 6 月起,任何 Instagram API 调用都需要访问令牌。
documentation 中描述了如何获取访问令牌。不需要应用批准。
有两种获取方法:服务器端或客户端。第二个选项(称为隐式身份验证)只能在客户端设置中启用 隐式 OAuth 时使用(Manage Clients > Edit Client > Security > Disable implicit 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 的查询字符串,而对于隐式模式,您将直接获得 access token 作为散列:
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] 您可以将令牌存储在 table 中并以循环方式使用它们,以允许更多 API 调用。这涉及手动获取您的应用程序可以使用的一堆令牌(越多越好)。考虑到 Instagram 不保证访问令牌的生命周期不受限制,这可能不是理想的解决方案。
您可以通过将 /media/
附加到用户页面 URL 来检索 JSON 数据而无需身份验证,如 this post 中所述。这不需要令牌或客户端 ID 即可工作。但是,这仅适用于用户,不适用于标签。此外,Instagram 没有记录此功能,因此不能保证将来可以使用。
您可以使用像 Juicer or Dialogfeed 这样的聚合器,它会为您处理访问令牌。这通常不是免费的。
我也在为我的网站制作 Instagram 提要,这是我从研究中得出的结论。请原谅我犯的任何错误。
编辑:以下是沙盒应用程序的更多限制。
在沙盒模式下,您只能访问沙盒用户(即收到沙盒邀请的用户)的数据。这意味着:
- 用户检索的媒体,例如
/users/{user-id}/media/recent
,如果用户不是任何沙盒用户,将 return 为空响应。
- 按标签检索的媒体,例如
/tags/{tag-name}/media/recent
,将仅包含属于沙盒用户的标记媒体。
因此,要使标签提要起作用,需要 生效(已审核并批准)。如果您不想这样做,唯一的选择是使用我上面提到的聚合器。
我们有一个客户在网站上有一个简单的 Instagram 功能,可以通过特定标签提取照片。他们只是注意到它不起作用。收到错误 - 无效的访问令牌。我猜是因为更新从 1 号开始。我们过去不需要访问令牌,因为我们不对用户做任何事情——只是标签。
现在看来我们需要一个,而文档对如何获取一个毫无意义。而且他们似乎不接受大多数应用程序。该应用程序也处于沙盒模式。所以我假设这是因为它已经切换到那个?没有收到有关此事件的通知。
获取访问令牌的文档中的第一步是"Direct the user to our authorization url."这到底是什么意思?没有提供 link 或任何东西。它还说 "Company Name, Contact Email and Privacy Policy URL are required to start a submission." 我们的应用程序没有隐私政策...它只是一个简单的标签提要。我不明白为什么一切都如此复杂以至于只有一个简单的标签提要。
是否需要等待应用程序获得批准...如果获得批准...我是否必须在获得访问令牌之前获得批准?这在任何地方都没有概述。
你没看错。自 2016 年 6 月起,任何 Instagram API 调用都需要访问令牌。
documentation 中描述了如何获取访问令牌。不需要应用批准。
有两种获取方法:服务器端或客户端。第二个选项(称为隐式身份验证)只能在客户端设置中启用 隐式 OAuth 时使用(Manage Clients > Edit Client > Security > Disable implicit 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 的查询字符串,而对于隐式模式,您将直接获得 access token 作为散列:
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] 您可以将令牌存储在 table 中并以循环方式使用它们,以允许更多 API 调用。这涉及手动获取您的应用程序可以使用的一堆令牌(越多越好)。考虑到 Instagram 不保证访问令牌的生命周期不受限制,这可能不是理想的解决方案。
您可以通过将
/media/
附加到用户页面 URL 来检索 JSON 数据而无需身份验证,如 this post 中所述。这不需要令牌或客户端 ID 即可工作。但是,这仅适用于用户,不适用于标签。此外,Instagram 没有记录此功能,因此不能保证将来可以使用。您可以使用像 Juicer or Dialogfeed 这样的聚合器,它会为您处理访问令牌。这通常不是免费的。
我也在为我的网站制作 Instagram 提要,这是我从研究中得出的结论。请原谅我犯的任何错误。
编辑:以下是沙盒应用程序的更多限制。
在沙盒模式下,您只能访问沙盒用户(即收到沙盒邀请的用户)的数据。这意味着:
- 用户检索的媒体,例如
/users/{user-id}/media/recent
,如果用户不是任何沙盒用户,将 return 为空响应。 - 按标签检索的媒体,例如
/tags/{tag-name}/media/recent
,将仅包含属于沙盒用户的标记媒体。
因此,要使标签提要起作用,需要 生效(已审核并批准)。如果您不想这样做,唯一的选择是使用我上面提到的聚合器。