У меня есть пример использования, который работал почти 2 года:
- Видео загружено на канал YouTube пользователей.
- После загрузки мы получаемназад идентификатор видео с YouTube.
- Сразу же после этого мы пытаемся установить видео. Миниатюра
Этот процесс работал некоторое время, и пока мы столкнулись с проблемой, прежде чем мы 'Мы не сталкивались с этой проблемой.(Последняя проблема, с которой мы столкнулись, была связана с использованием библиотеки PHP YouTube для установки миниатюры, поэтому мы переключились на cURL, который решил эту проблему.)
Видео загружается, поэтому я не собираюсь публиковать этот кодкак это работает нормально.Вот как устанавливается миниатюра:
$thumbnail_path = realpath($PathToImage);
$data = [
'filedata' => new CURLFile($thumbnail_path, 'image/jpeg', basename($thumbnail_path)),
];
$curl = curl_init();
// This just us the token data that the cURL requests uses, don't think too hard about it
$token = $CustomYouTubeCredenetialsClass->BuildClientAccessTokenArray();
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Authorization: Bearer '.$token['access_token'],
]);
// Here $VideoId is set by the video upload process, we store this value so i can assure you that it is set and set correctly
curl_setopt($curl, CURLOPT_URL, 'https://www.googleapis.com/upload/youtube/v3/thumbnails/set?videoId='.$VideoId.'&key='.GOOGLE_CLIENT_SECRET);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($curl);
curl_close($curl);
$response_json = json_decode($response, true);
Это вернет ошибку notFound (404) из документации по API миниатюр YouTube.
Кроме того, выполняются такие запросы, как
// This is a valid YouTube client using the users access token
$YouTubeClient->videos->listVideos("processingDetails,status", array('id' => $VideoId));
Не будет возвращать идентификатор видео, соответствующий указанному нами, и
$response = $YouTubeClient->channels->listChannels(
'contentDetails',
[
'mine' => true
]
);
$uploads_playlist = $response['items'][0]['contentDetails']['relatedPlaylists']['uploads'];
$response = $YouTubeClient->playlistItems->listPlaylistItems(
'snippet,status,processingDetails',
[
'pageToken' => null,
'maxResults' => 10,
'playlistId' => $uploads_playlist
]
);
В нем будут перечислены последние 10 видео, загруженных на этот канал, однако это также не будет включать видео, только что загруженное через API.
У меня сложилось впечатление, что даже результаты обработки ДОЛЖНЫ быть возвращены в этих результатах, тем более что processDetails - это часть, которую вы можете запросить.Поскольку это не так, другие обработанные нами, которые предназначены для периодической проверки состояния видео YouTube (например, чтобы их можно было публиковать на других платформах), теперь могут потерпеть неудачу, поскольку оно не находит видео.
Если вы будете ждать около 5 секунд, видео будет возвращено во всех запросах (и вы также можете установить миниатюру), однако такая задержка вообще не задокументирована и была оченьнедавно представленный как проблема.