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

Twitter API 1.1发布推文时图片未在信息流显示问题求助

问题结论

首先可以明确:Twitter API v1.1的statuses/update、media/upload.json接口并未完全废弃,你遇到的图片不显示问题不是v2版本上线直接导致的,核心原因是接口返回的推文实体没有识别到你传递的media_ids参数,从你贴出的响应内容可以看到,推文entities字段仅包含hashtags、symbols、user_mentions、urls四个子项,没有media相关字段,说明媒体ID根本没有和推文成功绑定。

排查思路

  • 先排查参数传递逻辑:打印你调用statuses/update时实际传递的完整参数数组,确认当存在媒体ID时,media_ids字段确实存在、值为正确的逗号分隔字符串,没有被其他参数覆盖或者被框架过滤掉
  • 检查开发者账号权限层级:2023年Twitter调整了API收费策略后,免费层级的开发者账号已经不支持通过v1.1的statuses/update接口绑定媒体资源,接口会直接忽略请求中的media_ids参数,且不会返回任何错误,这是目前这类问题最常见的诱因
  • 确认媒体上传后的有效性:可以调用GET media/upload接口传入你获取到的media_id_string,确认媒体资源没有被平台判定为违规、没有过期
  • 可选迁移方案:如果是权限限制导致的问题,可以直接迁移到v2版本的发推接口,媒体上传仍然可以使用原有v1.1的media/upload.json接口,发推时调用https://api.twitter.com/2/tweets,在请求体中传入media.media_ids数组即可,该逻辑对免费层级账号开放

代码优化参考

你可以在原逻辑基础上调整发推部分的请求即可适配v2接口:

public function send($message, $media = null, $options = [])
{
    $mediaIds = [];
    foreach ((array) $media as $item) {
        $res = $this->request(
            'https://upload.twitter.com/1.1/media/upload.json',
            'POST',
            null,
            ['media' => $item]
        );
        $mediaIds[] = $res->media_id_string;
    }
    // 调整为v2发推接口
    $postData = $options + ['text' => $message];
    if (!empty($mediaIds)) {
        $postData['media'] = [
            'media_ids' => $mediaIds
        ];
    }
    return $this->request(
        'https://api.twitter.com/2/tweets',
        'POST',
        null,
        json_encode($postData), // v2接口要求传JSON格式请求体
        ['Content-Type: application/json']
    );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:24:11