编辑 2020-28-02:这是 Twitter 方面的一个错误(感谢有用的评论)。我保留 尽管投了反对票,但仍然提出问题,因为它可能会再次发生,这对于其他有相同错误“媒体类型无法识别”的人来说可能很有用。
我有一个小应用程序,我作为唯一的用户,每天更新我的主题推特。通过按一个按钮,它每天都会从 12 张图片中发布一张比 5MB 小得多的 jpg 图像。这样的情况持续了几个月。现在 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);
我再说一遍:这几个月来没有任何问题,我没有改变任何东西。它刚刚开始发布没有图像的文字。
我意识到有几个其他问题关于类似的问题和类似的错误消息,但没有一个解决方案对我有用。
sleep(1)
:这对我来说是不合逻辑且愚蠢的(但我认为可能上传很慢,因为其中一个对javascript版本有相同问题的人解决了这个问题) Twitter 的文档指出:
确保 POST 是多部分/表单数据请求。上传文件的原始二进制文件(media 参数)或其 base64 编码内容(media_data 参数)。尽可能使用原始二进制文件,因为 base64 编码会导致更大的文件大小
但是,您似乎正在使用 media 参数上传 base64 编码的内容。尝试将媒体参数更改为 media_data。
这可能是最近的一项更改或最近才实施的更改,因此它之前对您有效。
我也面临同样的错误,“媒体类型无法识别”,当我们对 blob 进行编码时,我们可以使用表单数据键作为“media_data”而不是“media”。然后就可以正常工作了。
注意: 当我们尝试使用 Postman 发布媒体时,在这种情况下,我们必须使用密钥作为“媒体”。