Youtube PHP APi Check VIdeo Is Duplicate Or Not

前端 未结 2 1946
天命终不由人
天命终不由人 2021-01-01 11:26

Hi I am using Google PHP API to upload video in PHP. I have followed this tutorial to implement this and it is working fine. But there is a problem if video is already exist

2条回答
  •  攒了一身酷
    2021-01-01 11:54

    The only solution I could come up with to check the video status is to use a field in the table to mark the video as processed or not. Then set a cron to run every hour (or however often you want) to check the video status.

    The field in my videos table is processed. NULL for not processed, 0 if it's processed. My api field stores the YouTube's video ID in json format.

    Here's my cron script:

    # 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');
            }
        }
    }
    

提交回复
热议问题