我们如何为客户获取实时 Instagram 位置通知?
Posted
技术标签:
【中文标题】我们如何为客户获取实时 Instagram 位置通知?【英文标题】:How can we get real-time Instagram location notifications for our customers? 【发布时间】:2015-12-30 23:33:53 【问题描述】:我正在开发一个最终用户是中小型企业主的系统。此功能的目标是获取其他人在 Instagram 上发布的带有其营业地点标签的图片(实时)。请注意,这与带有@ 标记的企业帐户的图片不同(即我们想要this feed,而不是this feed)。
我计划使用记录在 here 的实时订阅系统,因为它说明我们可以订阅位置 ID 并接收有关该位置新媒体的通知。我们推出它并立即开始失败,因为未发布的订阅限制为 30 个(我想我们应该在开始构建它之前做更多的谷歌搜索)。
这与here 概述的问题基本相同,但对话确实过时了,我不确定最终目标是否完全相同,因为建议的解决方案对我没有帮助。
客户帐户太多,无法注册更多应用以获得足够的订阅(我们将不得不注册数千个应用)。我们希望我们可以使用通过 Oauth2 工作流程获得的 Instagram 用户的访问令牌来创建更多订阅,但我的实验也没有成功。我知道其他人使用大地理区域订阅而不是位置订阅,但这对我们来说也不够大。
我对这个问题感到沮丧和困惑,因为:
-
似乎其他应用程序正在以超出 30 个订阅限制的规模实时获取这些图片。
我无法想象在很多用例中每个应用程序 30 个订阅会是一个有用的功能。
有人有解决方法吗?有没有办法使用 Instagram 用户凭据而不是应用程序凭据?我是否必须定期轮询位置信息并放弃我的实时愿望?
【问题讨论】:
【参考方案1】:回答您的问题:
web-API
有一些解决方法:cronjobs 更新您的所有 links 并将解析的数据写入您的数据库。优点:不需要API applications
。缺点:有时 web-API 会发生变化(请求和/或响应)。
您还可以自动为每个客户端注册应用程序,将它们添加到数据库,订阅实时更新。然后获取更新。
没有办法使用access-token
代替CLIENT-ID
和CLIENT-SECRET
。
请记住,"Real-time" photo updates
并不是真正的real-time
(平衡系统等)(来自文档:You should build your system to accept multiple update objects per payload
)所以 1 分钟更新就足够了。
UPD
也许有帮助,也许你已经知道这种灰色的加速方式了。
您可以通过web-API
使用直接链接按位置获取媒体。这是最简单的。您只需要从 cookie 中生成 csrftoken
即可生成 XHR request
。 Csrftoken
可能来自未经授权的用户。 request
的详细信息您可以在 Google Chrome 的Network
标签中查看。
简单示例:POST
使用参数q
和ref
查询https://instagram.com/query/
(在示例中它们的值被urldecode 解释):
q=ig_location(237630908)media.after(20000000000000000000000,2)nodesid,display_src,thumbnail_src&ref=locations::show
Content-type
应该是application/x-www-form-urlencoded; charset=UTF-8
。
XHR request
的 Web 标头:
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/36.0.1985.143 Safari/537.36
Accept: */*
Accept-Language: en-US;q=0.6,en;q=0.4
Referer: https://instagram.com/explore/locations/237630908/
Origin: https://instagram.com
X-Instagram-AJAX: 1
X-Requested-With: XMLHttpRequest
X-CSRFToken: e4e1e1eddd67b2b50b6d8ae7b49e01c0
Cookie: csrftoken=e4e1e1eddd67b2b50b6d8ae7b49e01c0
Content-type: application/x-www-form-urlencoded; charset=UTF-8
(标题示例中的csrftoken
是随机的,不要使用它)
不要太频繁使用,Instagram有时会通过IP禁用某些网络功能,请尝试更改csrftoken
。
答案是:
status: "ok",
media:
nodes: [
thumbnail_src: "https://scontent-frt3-1.cdninstagram.com/hphotos-xaf1/t51.2885-15/s640x640/sh0.08/e35/c0.135.1080.1080/12142408_1499221190404489_557984803_n.jpg",
id: "1104470761628620590",
display_src: "https://scontent-frt3-1.cdninstagram.com/hphotos-xaf1/t51.2885-15/e35/12142408_1499221190404489_557984803_n.jpg"
,
thumbnail_src: "https://scontent-frt3-1.cdninstagram.com/hphotos-xaf1/t51.2885-15/s640x640/sh0.08/e35/c0.135.1080.1080/12139611_1663826773904632_2063764196_n.jpg",
id: "1102282973026047789",
display_src: "https://scontent-frt3-1.cdninstagram.com/hphotos-xaf1/t51.2885-15/e35/12139611_1663826773904632_2063764196_n.jpg"
]
【讨论】:
感谢 CnapoB 的回答。我们已经走上了 cron 作业的路线,但这很不幸,因为它远非实时。我们曾考虑为每个用户注册一个客户端应用程序,但我们必须使用数以万计的应用程序。我无法想象 Instagram 会让我们这样做。即使他们这样做了,看起来我也必须绕过验证码才能自动完成。再次感谢。 不客气。请参阅答案的 UPD,它可能会有所帮助。 @TonyBathgate 我忘了提。对不起。请参阅答案的 UPD,它可能会有所帮助。 是的,谢谢您的解释。我以前做过这类事情的一些经验,但我很确定这违反了他们的服务条款。我希望在这项工作中保持光明正大。【参考方案2】:我认为您的问题可以通过我使用的 Data365.co Instagram API 解决。这个 API 可以在 1-5 分钟内从带有地理标记的页面中获取帖子并足够快地完成。 您只需创建一个任务来按位置更新最新出版物并检查那里是否有任何帖子,例如每 5-10 分钟一次。
使用您的位置 ID 237630908 创建每 300 秒自动更新一次的任务(POST 请求):
https://api.data365.co/v1.1/instagram/location/237630908/update?load_posts=1&max_posts=10&auto_update_interval=300&access_token=TOKEN
您可以通过回调获得答案,也可以通过以下 GET 请求自行轮询端点: https://api.data365.co/v1.1/instagram/location/237630908/posts?access_token=TOKEN
您还可以在APIs documentation. 中查看 API 响应格式
【讨论】:
以上是关于我们如何为客户获取实时 Instagram 位置通知?的主要内容,如果未能解决你的问题,请参考以下文章
我如何为我的网站用户(如 Y!)制作实时客户端聊天应用程序!信使?
如何为 Instagram 基本显示 API 实现 Instagram 或 Facebook 登录按钮的继续?