You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Instagram API访问令牌获取及PHP hashtag帖子XML开发求助

解决Instagram API本地开发与Access Token获取问题

看起来你在开发PHP应用调用Instagram API时遇到了两个关键问题:本地开发的重定向URI设置,以及Access Token的获取。我来一步步帮你解决:

一、本地开发的Valid Redirect URIs设置

因为你是在本地开发,直接填http://localhost:你的端口号就可以了——比如用PHP内置服务器的话默认是http://localhost:8000,如果用XAMPP/WAMP这类工具,默认端口是80,填http://localhost就行。注意:

  • 必须和你本地服务器的地址完全匹配,包括HTTP/HTTPS(本地开发一般用HTTP,除非你手动配置了SSL)
  • 端口号不能错,比如你用的是8080,就必须填http://localhost:8080
  • 后续授权请求里的redirect_uri参数要和这里填的一模一样,否则会触发授权错误

二、获取Access Token的步骤

Instagram现在分两种API体系,对应不同的Token获取方式,你需要根据需求选择:

情况1:使用Instagram Basic Display API(针对个人账号,仅能获取授权用户自己的媒体)

如果你的需求是获取自己账号下带特定话题的帖子,用这个API就足够了:

  1. 构造授权URL,替换成你的应用信息:
    https://api.instagram.com/oauth/authorize?client_id=你的CLIENT_ID&redirect_uri=你填的重定向URI&scope=user_profile,user_media&response_type=code
    
  2. 在浏览器打开这个URL,登录你的Instagram账号,授权你的应用。授权成功后会跳转到你设置的重定向URI,URL里会附带一个code参数
  3. 用PHP发送POST请求换取Access Token:
    $client_id = '你的CLIENT_ID';
    $client_secret = '你的CLIENT_SECRET';
    $redirect_uri = '你填的重定向URI';
    $code = $_GET['code']; // 从跳转后的URL中提取code参数
    
    $token_url = 'https://api.instagram.com/oauth/access_token';
    $post_data = http_build_query([
        'client_id' => $client_id,
        'client_secret' => $client_secret,
        'redirect_uri' => $redirect_uri,
        'code' => $code,
        'grant_type' => 'authorization_code'
    ]);
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $token_url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
    
    $token_data = json_decode($response, true);
    $access_token = $token_data['access_token']; // 这就是你需要的Access Token
    

情况2:使用Instagram Graph API(获取公开话题帖子,需Business/Creator账号)

如果你需要获取全平台公开的、带特定话题的帖子,必须用这个API,而且需要满足前置条件:

  • 你的Instagram账号是Business或Creator类型
  • 账号已关联一个Facebook Page
  • 已申请并通过相应权限审核(比如pages_show_list、instagram_basic)

获取Token的核心逻辑和Basic Display类似,但需要先通过Facebook完成授权,再将Page的Access Token转换为Instagram Business Account的Token,流程相对复杂一些。

三、获取话题帖子并生成XML数据

拿到Access Token后,就可以调用API获取目标帖子,再转换成XML格式:
比如用Basic Display API获取自己的媒体后筛选带目标话题的内容,或者用Graph API的/ig_hashtag/media/recent端点直接获取话题帖子,然后用PHP的SimpleXMLElement生成XML:

// 假设已经获取到access_token,并且拿到了帖子数据
$posts = [
    ['id' => '12345', 'caption' => '周末出游#春日打卡', 'media_url' => 'https://example.com/photo1.jpg'],
    ['id' => '67890', 'caption' => '美食分享#吃货日常', 'media_url' => 'https://example.com/photo2.jpg'],
    // 更多帖子数据
];

// 创建XML根节点
$xml = new SimpleXMLElement('<posts/>');
foreach ($posts as $post) {
    $post_node = $xml->addChild('post');
    $post_node->addChild('id', $post['id']);
    $post_node->addChild('caption', htmlspecialchars($post['caption'])); // 转义特殊字符避免XML报错
    $post_node->addChild('media_url', $post['media_url']);
}

// 输出XML内容
header('Content-Type: application/xml');
echo $xml->asXML();

注意事项

  • Instagram API有严格的调用频率限制,开发时注意不要超过限额,否则会被临时封禁请求
  • 公开话题数据的获取权限现在管控很严,个人账号无法获取非自身的公开帖子,必须升级为Business/Creator账号并通过权限审核
  • Access Token有有效期:Basic Display API的短期Token有效期为1小时,需要定期刷新;Graph API的Token可以配置为长期有效

内容的提问来源于stack exchange,提问作者Felipe Maynard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:44:55