Twitter API 告诉我“媒体类型无法识别”。对于始终有效的图像

问题描述 投票:0回答:2

编辑 2020-28-02:这是 Twitter 方面的一个错误(感谢有用的评论)。我保留 尽管投了反对票,但仍然提出问题,因为它可能会再次发生,这对于其他有相同错误“媒体类型无法识别”的人来说可能很有用。

我有一个小应用程序,我作为唯一的用户,每天更新我的主题推特。通过按一个按钮,它每天都会从 12 张图片中发布一张比 5MB 小得多的 jpg 图像。这样的情况持续了几个月。现在 Twitter 告诉我:“媒体类型无法识别。”

这是其中一张图片

症状:

  • 我也无法在网站上将相同的图像上传到 Twitter。所以我假设 我的图片被禁止上传。
  • 我可以将同一图像的 png 版本上传到网站,但不能通过我的 PHP 软件上传。这很奇怪。
  • 我可以从我的 PHP 脚本和 Twitter 网站上上传不同的图像。

我将 这个类 用于我的 PHP 脚本

我的日志中唯一的错误是:

[2020 年 1 月 22 日 08:45:37 UTC] PHP 注意:未定义的属性: 在线 /home/ABC/public_html/XYZ.php 中的 stdClass::$media_id_string 205

它只是意味着:上传不成功,因此 Twitter API 没有响应媒体 ID(此时为 NULL)

这是我的脚本(围绕此有逻辑来决定文本并让我登录):

require_once 'twitteroauth/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;

define('CONSUMER_KEY', 'my consumer key');
define('CONSUMER_SECRET', 'my consumer secret');
define('ACCESS_TOKEN', 'my access token');
define('ACCESS_TOKEN_SECRET', 'my access secret');

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);

$postfields = array(
    'media' => base64_encode(file_get_contents($image))
);

$media = $connection->upload('media/upload', ['media' => $image]);

$parameters = [
            'status' => 'my tweet text, never longer than 200 chars'
            'media_ids' => $media->media_id_string
];

$result = $connection->post('statuses/update', $parameters);

我再说一遍:这几个月来没有任何问题,我没有改变任何东西。它刚刚开始发布没有图像的文字。

我意识到有几个其他问题关于类似的问题和类似的错误消息,但没有一个解决方案对我有用。

  • 我重新生成了我的访问令牌和秘密:没有任何改变
  • 我尝试了分块上传:相同的结果
  • 我制作了新的 jpg 文件,尺寸小了 1 像素,所以我欺骗了 Twitter,它可能是另一张图像:它没有欺骗 Twitter
  • 我在上传行之后尝试
    sleep(1)
    :这对我来说是不合逻辑且愚蠢的(但我认为可能上传很慢,因为其中一个对javascript版本有相同问题的人解决了这个问题)
php image twitter
2个回答
0
投票

Twitter 的文档指出:

确保 POST 是多部分/表单数据请求。上传文件的原始二进制文件(media 参数)或其 base64 编码内容(media_data 参数)。尽可能使用原始二进制文件,因为 base64 编码会导致更大的文件大小

但是,您似乎正在使用 media 参数上传 base64 编码的内容。尝试将媒体参数更改为 media_data。

这可能是最近的一项更改或最近才实施的更改,因此它之前对您有效。


0
投票

我也面临同样的错误,“媒体类型无法识别”,当我们对 blob 进行编码时,我们可以使用表单数据键作为“media_data”而不是“media”。然后就可以正常工作了。

注意: 当我们尝试使用 Postman 发布媒体时,在这种情况下,我们必须使用密钥作为“媒体”。

© www.soinside.com 2019 - 2024. All rights reserved.