基于PHP的Telegram Bot对接Instagram账号后,如何合规获取用户点赞/关注数据并实现奖励机制?
嘿,我完全懂你的痛点——想用Telegram Bot做奖励机制,但Instagram的API权限卡得死,爬虫又怕违规被封。先给你梳理下核心逻辑,再一步步给你合规的解决方案:
一、先搞清楚官方API的权限边界
你目前用的Basic Display API是给个人用户/普通创作者设计的,权限非常有限,只能获取用户基本资料、公开发布内容这类基础数据,根本碰不到“谁关注了我”“谁点赞了我的帖子”这类涉及用户行为隐私的信息。而Graph API(针对企业/创作者账号)虽然有部分权限,但也不是随便就能拿,得先满足账号类型和权限申请要求。
二、合规检测用户是否关注你的Instagram主页
这个是可以通过官方API实现的,前提是你把账号升级为企业账号或创作者账号(免费,在Instagram设置里就能转),然后走以下步骤:
在Facebook开发者平台创建应用并关联账号
去Facebook开发者后台建一个应用,把你的Instagram企业账号绑定进去,然后申请这几个核心权限:instagram_basic、pages_read_engagement、pages_show_list。注意权限申请要如实填写用途,不然容易被拒。调用Graph API检测关注关系
你已经通过Basic Display API拿到了用户的Instagram ID,接下来可以调用Graph API的/{用户Instagram ID}/follows端点,检查返回的列表里是否包含你的Instagram主页ID。如果有,就说明用户关注了你。给你一段PHP示例代码(用Facebook官方SDK):
require_once __DIR__ . '/vendor/autoload.php'; $fb = new Facebook\Facebook([ 'app_id' => '你的应用ID', 'app_secret' => '你的应用密钥', 'default_graph_version' => 'v18.0', // 建议用最新版本号 ]); $userInstagramId = '用户的Instagram ID'; // 从Basic Display API获取 $yourPageId = '你的Instagram主页ID'; $userAccessToken = '用户授权后的access_token'; // 从Basic Display API获取 try { // 获取用户关注的账号列表 $response = $fb->get("/{$userInstagramId}/follows?fields=id", $userAccessToken); $follows = $response->getGraphEdge(); $isFollowing = false; foreach ($follows as $follow) { if ($follow['id'] === $yourPageId) { $isFollowing = true; break; } } if ($isFollowing) { // 这里写给用户加奖励积分的逻辑 echo "用户已关注,奖励积分!"; } else { echo "请先关注我们的Instagram主页哦!"; } } catch(Facebook\Exceptions\FacebookResponseException $e) { echo "Graph API调用出错: " . $e->getMessage(); } catch(Facebook\Exceptions\FacebookSDKException $e) { echo "SDK初始化出错: " . $e->getMessage(); }
三、合规检测用户是否点赞了你的帖子(重点:官方API不支持直接获取)
Instagram出于隐私保护,任何官方API都不允许获取具体哪些用户点赞了某条帖子——哪怕是企业账号也不行。所以你得换个思路,用合规的互动方式替代“点赞”检测:
替代方案1:用“评论关键词”作为参与凭证
发布帖子时,要求用户评论特定关键词(比如“我要奖励”),然后通过Graph API的/{帖子ID}/comments端点获取所有评论,检查用户的Instagram ID是否出现在评论列表里。这种方式完全合规,因为评论是公开内容,API允许获取。
PHP示例代码:
$mediaId = '你的帖子ID'; $pageAccessToken = '你的主页access_token'; // 从Facebook开发者后台获取 try { $response = $fb->get("/{$mediaId}/comments?fields=from{id}", $pageAccessToken); $comments = $response->getGraphEdge(); $userCommented = false; foreach ($comments as $comment) { if ($comment['from']['id'] === $userInstagramId) { $userCommented = true; break; } } if ($userCommented) { // 给用户加奖励积分 echo "用户已参与评论,奖励积分!"; } } catch(Exception $e) { echo "获取评论出错: " . $e->getMessage(); }
替代方案2:用Instagram互动贴纸(问答/投票)
发布帖子时添加问答或投票贴纸,用户参与后,你可以通过Graph API的/{帖子ID}/insights端点获取参与用户的数据(需要企业账号权限),然后匹配用户的Instagram ID来发奖励。这种方式体验更好,也完全合规。
替代方案3:人工审核截图(万不得已的选择)
引导用户在Telegram Bot里发送已点赞/关注的截图,然后人工审核。虽然体验差,但绝对合规,适合用户量小的场景。
四、绝对要避免的坑:不要用爬虫!
Instagram的反爬机制非常严格,哪怕是小规模的爬取,只要被检测到,你的Instagram账号(包括关联的应用账号)会被立刻封禁,甚至永久shadow ban。而且违反Instagram的服务条款,后续申诉基本没用,所以绝对不要碰爬虫。
最后总结
- 关注检测:升级为企业/创作者账号,用Graph API合规实现;
- 点赞检测:用评论、互动贴纸等替代方案绕开API限制;
- 永远不要用爬虫,否则得不偿失。
备注:内容来源于stack exchange,提问作者Cesare Diodato

