我正在YouTube API v3使用Google PHP client,我成功上传了视频并检索了详细信息。但是,我想知道YouTube何时完成处理上传的视频并准备好使用。
// The code is largely stripped down
$client = new Google_Client();
$youtube = new Google_Service_YouTube($client);
$listResponse = $youtube->videos->listVideos("snippet", array('id' => 'xyz'));
$listResponse
是一个只包含Google_Service_YouTube_Video
类型的视频对象(因为只需要一个视频ID)的数组,但这些属性似乎都没有关于视频处理状态的有用信息。
我认为这些是$listResponse[0]
[processingDetailsType:protected] => Google_Service_YouTube_VideoProcessingDetails (string)
[processingDetailsDataType:protected] => (empty)
[processed:protected] => Array ([snippet] => 1)
特别有趣的是processingDetailsType
,它只是一个代表类名的字符串,processed
在YouTube成功处理视频后不会改变。
$listResponse[0]['snippet']
保存视频详细信息,但仍无用于确定是否已处理。我监视了publishedAt
属性,希望它在处理视频时会改变,但它保持不变。同样,processed
属性似乎很有趣,总是空的。
[snippet] => Google_Service_YouTube_VideoSnippet Object
(
[collection_key:protected] => tags
[internal_gapi_mappings:protected] => Array
(
)
[categoryId] => 22
[channelId] => XXXYYYZZZ
[channelTitle] => Some Channel Title
[defaultLanguage] =>
[description] =>
[liveBroadcastContent] => none
[localizedType:protected] => Google_Service_YouTube_VideoLocalization
[localizedDataType:protected] =>
[publishedAt] => 2015-04-15T14:54:47.000Z
[tags] =>
[thumbnailsType:protected] => Google_Service_YouTube_ThumbnailDetails
[thumbnailsDataType:protected] =>
[title] => Some Video Title
[modelData:protected] => Array
(
[thumbnails] => Array
(
[default] => Array
(
[url] => https://i.ytimg.com/vi/xyz/default.jpg
[width] => 120
[height] => 90
)
[medium] => Array
(
[url] => https://i.ytimg.com/vi/xyz/mqdefault.jpg
[width] => 320
[height] => 180
)
[high] => Array
(
[url] => https://i.ytimg.com/vi/xyz/hqdefault.jpg
[width] => 480
[height] => 360
)
[standard] => Array
(
[url] => https://i.ytimg.com/vi/xyz/sddefault.jpg
[width] => 640
[height] => 480
)
)
[localized] => Array
(
[title] => Some Video Title
[description] =>
)
)
[processed:protected] => Array
(
)
)
答案 0 :(得分:2)
根据Google API:
" [T]他的片段属性包含channelId,title,description,tags和categoryId属性",没有任何关于处理数据的信息。
相反,如果您使用" processingDetails"你会得到:" processingStatus"," processingProgress",processingProgress.partsTotal,ect",所以最好使用
$listResponse = $youtube->videos->listVideos("processingDetails", array('id' => 'xyz'));

您将获得该数据。在此链接中,您可以看到说明:https://developers.google.com/YouTube/v3/docs/videos/list
答案 1 :(得分:0)
您必须添加此额外参数:processingDetails
我还没有测试过,但我认为它会起作用。
.patterned .container{width: 960px; margin: 0 auto; position: relative;}
.container{width: 960px; margin: 0 auto; position: relative;}
获得响应后,请检查processingStatus节点
==> status.uploadStatus节点
如果返回"已上传"(仍在上传)或"已处理"(处理已终止确定)。
至少这是Javascript端Youtube API v3的正常行为,而且我希望PHP环境的相同或相似。 我希望能帮助你 如果有效,请将其作为一个好答案报告。