更新发布错误无效视频元数据- YOUTUBE v3 API PHP

hsvhsicv  于 2023-01-29  发布在  PHP
关注(0)|答案(3)|浏览(198)

我使用YouTube API更新YouTube上的视频,问题是我想更新视频Publishat状态时从YouTube上得到了这个错误。

[2017-11-29 12:19:39] local.ERROR: Google_Service_Exception: {
 "error": {
  "errors": [
   {
    "domain": "youtube.video",
    "reason": "invalidVideoMetadata",
    "message": "The request metadata is invalid.",
    "locationType": "other",
    "location": "body"
   }
  ],
  "code": 400,
  "message": "The request metadata is invalid."
 }
}

但奇怪的是,只有当我设置了publishAt值(我已经将privacyStatus更新为'private')时,我才会得到这个错误。

$params     = array();
$part       = 'snippet,contentDetails,player,status'; 

$properties = [
    'snippet.categoryId'            => $this->video->youtube_category_id,
    'snippet.defaultLanguage'       => '',
    'snippet.description'           => $this->video->video_description,
    'snippet.tags[]'                => !empty($this->video->tags->pluck('tag_value')->toArray())?implode(',',$this->video->tags->pluck('tag_value')->toArray()):'',
    'snippet.title'                 => $this->video->video_title,
    'status.embeddable'             => true,
    'status.license'                => '',
    'status.privacyStatus'          => !empty($this->video->privacy_status) ? $this->video->privacy_status : 'private',
    'status.publishAt'		    => empty($this->video->video_release_date) ? "" : date('Y-m-d\TH:i:s.sP',strtotime($this->video->video_release_date)),
    'status.publicStatsViewable'    => ''
];

if(!empty($this->video->youtube_id)){
  $properties['id'] = $this->video->youtube_id;
}

$service    = new \Google_Service_YouTube($client);
$propertyObject = $this->createResource($properties);
$resource = new \Google_Service_YouTube_Video($propertyObject);

if($this->upload) $client->setDefer(true);

if(!empty($this->video->youtube_id))
{
  $request = $service->videos->update($part, $resource, $params);
}
elseif($this->upload) 
{
  $request = $service->videos->insert($part, $resource, $params);
}
else
{
   exit;
}

我在网上搜索了这个问题,但没有找到任何解决方案。请帮助,谢谢。
注:使用此代码,上传视频成功。

6mw9ycah

6mw9ycah1#

根据我的研究,以下是可能导致错误的几种可能性-

  • 仅当视频的隐私状态为私人且视频从未发布过时,才能设置status.publishAt属性。
  • status.publishAt设置得太接近当前时间。请尝试60分钟。Reference
tcbh2hod

tcbh2hod2#

以下内容直接来自文档PublishedAt
计划发布视频的日期和时间。* 仅当视频的隐私状态为私人时才能设置。* 该值以ISO 8601(YYYY-MM-DDThh:mm:ss.sZ)格式指定。请注意有关此属性行为的以下两点:
1.如果在调用
videos.update
方法时设置此属性的值,则还必须将status.privacyStatus属性值设置为private,即使视频已经是私有的。
1.如果您的请求将视频安排在过去的某个时间发布,则该视频将立即发布。因此,将status.publishAt属性设置为过去的日期和时间的效果与将视频的privacyStatus从private更改为public的效果相同。

ovfsdjhp

ovfsdjhp3#

这是Youtube API上一个非常令人失望的错误。你可以把任何视频设置为私有状态,然后通过Youtube的网站安排它在未来公开。无论视频以前是公开的、私有的还是未列出的。

相关问题