Youtube PHP APi Check VIdeo дублируется или нет

Привет, я использую API Google PHP для загрузки видео на PHP. Я выполнил этот урок, чтобы реализовать это, и он работает нормально. Но есть проблема, если видео уже существует в моем канале, оно также возвращает детали видео, и я не могу найти, что это отклонено для дубликата.

Поэтому я не могу найти это дублирующее видео или нет, и если это дубликат, то каково основное видео. Означает видеообъявления основного видео, с которого оно сравнивается как дублирующее.

Пожалуйста, помогите мне найти это дублирующее видео или нет?

Единственное решение, которое я мог бы проверить, чтобы проверить статус видео, – использовать поле в таблице, чтобы пометить видео как обработанное или нет. Затем установите cron для запуска каждый час (или, как вы часто хотите), чтобы проверить статус видео.

Поле в моей таблице videos processed . NULL для не обрабатываемых, 0, если он обработан. В моем поле api хранится идентификатор видео YouTube в формате json.

Вот мой cron-скрипт:

 # Starts the YouTubeService. $youtube_obj=new Google_Service_YouTube($client); # Get new uploaded videos from the database. $unprocessed_videos=$db->get_results('SELECT `id`, `file_name`, `contributor`, `api` FROM `'.DBPREFIX.'videos` WHERE `processed` IS NULL'); # If there are new videos... if($unprocessed_videos>0) { # Loop through the new videos foreach($unprocessed_videos as $new_video) { # Has the video been processed? Default is TRUE. will be changed to FALSE if the video still has "uploaded" status. $video_processed=TRUE; # Decode the `api` field. $api_decoded=json_decode($new_video->api); # Get the YouTube Video ID. $video_yt_id=$api_decoded->youtube_id; if(isset($new_video->file_name)) { # Set the path to the video on the server. $video_path='videos'.DS.$new_video->file_name; } $to='uploaders email'; $reply_to='whomever'; $subject="Video status from ".DOMAIN_NAME; $body=''; # Check the video status. $check_status=$youtube_obj->videos->listVideos('status', array('id' => $video_yt_id)); # Did YouTube return results? if(!empty($check_status['items'])) { # Loop through the videos from YouTube. foreach($check_status['items'] as $status) { if($status['status']['uploadStatus']=="uploaded") { # The video has not been processed yet so do not send an email. $video_processed=FALSE; } # Check to see if the YouTube upload was a success. elseif($status['status']['uploadStatus']=="processed") { # Tell the user the video was uploaded. $body.='Your video has been uploaded to YouTube and can be viewed at http://'.FULL_DOMAIN.'media/videos/?video='.$new_video->id; } # Check if the uploaded video status is rejected. elseif($status['status']['uploadStatus']=="rejected") { if(isset($new_video->file_name)) { # Get the Upload class. require_once 'Form'.DS.'Upload.php'); # Instantiate an Upload object. $upload_obj=new Upload($video_path); # Delete video file from server. $upload_obj->deleteFile($video_path); # Delete rejected video from YouTube $delete_response=$youtube_obj->videos->delete($video_yt_id); } # Need to delete the entry from the database as well. $db->query('DELETE FROM `'.DBPREFIX.'videos` WHERE `id` = '.$db->quote($new_video->id).' LIMIT 1'); # Check if the rejection status was a duplicate. if($status['status']['rejectionReason']=="duplicate") { # Tell the user the video was a duplicate. $body.='Your video was rejected because it was a duplicate video'; } } } } else { $body.='Your video was not found on YouTube'; $video_processed=TRUE; } # Update database if the video has been "processed". if($video_processed===TRUE) { # Get the Email class. require_once 'Email'.DS.'Email.php'); # Instantiate a new Email object. $mail_obj=new Email(); $mail_obj->sendEmail($subject, $to, $body, $reply_to); # Set video to processed. $db->query('UPDATE `'.DBPREFIX.'videos` SET `processed` = 0 WHERE `id` = '.$db->quote($new_video->id).' LIMIT 1'); } } } 

Без возможности запуска задания cron вам, вероятно, придется проверить, является ли это дубликат при следующем попытке доступа к видео.

В качестве альтернативы, после загрузки видеоролика вы можете запустить другой скрипт php, который периодически проверяет статус (спящий на некоторое время, прежде чем делать другой запрос API для проверки).

 do { $videos = $youtubeClient->videos->listVideos('status', ['id' => $videoId]); $video = $videos['items'][0]; // assuming you want one video. Iterate over the items array otherwise if($video['status']['uploadStatus'] == 'rejected' && $video['status']['rejectionReason'] == 'duplicate') { // Notify user of duplicate and/or note failed upload in DB } else { sleep(180); } } while ($video['status']['uploadStatus'] == 'processing') 

Вам нужно убедиться, что сценарий можно запустить из командной строки и может принимать аргументы, чтобы получить идентификатор видео из исходного сценария загрузки. http://php.net/manual/en/function.getopt.php

Лично мне не нравится идея запуска дополнительных скриптов с такими петлями, как вы можете в конечном итоге с rouge процессов, если вы не проверяете все свои случаи краев, но без заданий cron ваши варианты ограничены.