【发布时间】:2021-12-17 12:00:04
【问题描述】:
我在领英视频测试版中,正在尝试通过 API 上传视频。 https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/videos-api-beta?tabs=http#upload-the-video
由于文件超过 4mb,我将根据要求将其拆分,并且据我所知,我的视频的所有部分都已成功上传。我还记录了每个部分的 etag,以便完成上传。
端点videos?action=finalizeUpload 将返回一个 504 和消息网关超时。我在内部使用的客户端使用 Guzzle,我试图增加超时,但我相信这不是问题。这样做的原因是,如果我使用 urlencoded 视频 URN 加载视频,我将收到带有内部服务器错误消息的 500 状态。
$userUrn = 'urn:li:person:[urn]';
// register the upload, returns the upload urls
$registerResult = $client->post(
'videos?action=initializeUpload',
[
"initializeUploadRequest" => [
'owner' => $userUrn,
"purpose" => 'FEED_VIDEO',
"fileSizeBytes" => filesize($videoFile),
"uploadCaptions" => false,
"uploadThumbnail" => false
]
]
);
$videoUrn = $registerResult['value']['video'];
$uploadToken = $registerResult['value']['uploadToken'];
// split the video file into parts
exec('split -b 4194303 "' . $videoFile . '"');
$file = 'xaa';
$etags = [];
foreach($registerResult['value']['uploadInstructions'] as $i => $uploadInstructions)
{
$filePath = __DIR__ . '/' . $file;
// upload the part
$shellCmd = 'curl -v -H "Content-Type:application/octet-stream" --upload-file "' . $filePath . '" "' . $uploadInstructions['uploadUrl'] . '" 2>&1';
exec($shellCmd, $o);
$matches = [];
preg_match('/(etag:)(\s?)(.*)(\n)/', implode("\n", $o), $matches);
$etags[] = $matches[3]
$file++;
}
// in this prototype just remove all of these files
exec("rm xa*");
$videoStatus = $client->post(
"videos?action=finalizeUpload",
[
"finalizeUploadRequest" => [
"video" => $videoUrn,
"uploadToken" => $uploadToken,
"uploadedPartIds" => $etags
]
]
);
我还手动验证了在我的视频中使用 split 和 cat 确实会生成与原始视频完全相同的副本。 (虽然我不能确定 LinkedIn 在做什么)
第一个请求initializeUpload 将返回包含视频骨灰盒、上传令牌(通常是空的,但我一直在抓取它)和上传说明的数据。所以我知道客户工作。上传视频部分的 curl 命令也似乎可以工作。它返回 etag,我将其放入数组中以发送回。
正如标题所示,此功能目前是 Beta,但我没有被告知要在任何特定的地方提供有关 Beta 的反馈,并且 API 帮助确实表明要发布问题。
【问题讨论】:
标签: php linkedin linkedin-api