You need to enable JavaScript to run this app. 如何使用PHP从Twitter V2 JSON响应中提取includes下的用户名?
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP从Twitter V2 JSON响应中提取includes下的用户名?

提取Twitter V2接口返回中关联用户username的实现方法

核心逻辑说明

Twitter V2的返回结构为了减少冗余传输,会把推文基础信息放在data节点,把推文关联的作者、媒体等公共信息统一抽离到includes节点返回。
如果直接硬取includes > users数组的第一个元素拿username,在单条简单测试场景下能拿到示例中的Lionek_Gaming,但这种实现稳定性极差——只要同一个请求返回了多个用户数据(比如请求携带了@提及用户、被引用推文的作者信息),数组元素顺序没有官方保障,极易取错值。

注:你提供的示例结构中,data节点的author_id和includes > users节点的id字段值不匹配,是临时构造演示数据导致的;真实Twitter V2接口返回中,推文的author_id和includes.users里的用户id是严格一一对应的,这也是基于ID做映射匹配的逻辑基础。

生产环境可用的稳定实现

先把includes中的用户列表整理成用户ID => 用户信息的键值映射,再通过每条推文自带的author_id匹配对应作者的username,全程无嵌套循环,兼顾性能和稳定性:

$tweets = json_decode($response);
// 预先构建用户ID到用户信息的映射表
$userMap = [];
foreach ($tweets->includes->users as $userItem) {
    $userMap[$userItem->id] = $userItem;
}

foreach ($tweets->data as $tweet) {
    // 匹配当前推文对应的作者,加兜底避免接口缺失数据时报错
    $currentAuthor = $userMap[$tweet->author_id] ?? null;
    $authorUsername = $currentAuthor?->username ?? '未知作者';
    $tweetText = $tweet->text;
    // 按业务需求输出即可
    echo "推送人@{$authorUsername}:{$tweetText}\n";
}

临时调试的直连取值方式

如果只是针对提供的示例单条结构做临时调试,不需要做复杂逻辑处理,也可以直接按JSON层级取值拿到目标值:

示例结构中目标值的对应路径为:$tweets->includes->users[0]->username,执行后输出结果就是示例中的Lionek_Gaming
注意:这种直连硬取的写法仅适合固定结构的临时测试场景,生产环境禁止使用。

实现注意事项

  • 禁止硬编码取users数组的固定索引位:Twitter接口没有承诺includes数组的元素顺序,硬取索引值在多用户返回场景下会出现取值错位问题
  • 必须加空值兜底逻辑:接口偶发异常时可能缺失对应作者的返回数据,不加兜底会触发PHP的类属性不存在警告
  • 采用键值映射的匹配方式时间复杂度为O(n),比每次嵌套遍历users数组匹配author_id的写法(时间复杂度O(n²))效率更高,请求返回的数据量越大,性能优势越明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 01:27:03