How can i create a function to get youtube video time

The following are the functions that I use to extract data from a YouTube response to wp_remote_get.

It’s just the basic stuff, you’ll have to adjust, complement and integrate into your code.

add_action( 'save_post', 'brsfl_save_postdata' );

function brsfl_save_postdata( $post_id ) 
{
    // IMPORTANT!
    // Check for DOING_AUTOSAVE and wp_verify_nonce()

    $consult = brsfl_yt_api( $_POST['yt_id'] );
    if( $consult )
    {
        $youtube['yt_time'] = $consult['yt_time'];
        $youtube['yt_likes'] = $consult['yt_likes'];
        $youtube['yt_dislikes'] = $consult['yt_dislikes'];
        $youtube['yt_average'] = $consult['yt_average'];
        $youtube['yt_raters'] = $consult['yt_raters'];
        $youtube['yt_viewcount'] = $consult['yt_viewcount'];
        $youtube['yt_title'] = $consult['yt_title'];
        $youtube['yt_thumb'] = $consult['yt_thumb'];
        update_post_meta( $post_id, 'youtube', $youtube );
    }   
}


/** 
 * Consult YouTube API
 * https://developers.google.com/youtube/2.0/developers_guide_protocol_video_entries
 */
function brsfl_yt_api( $video_id ) 
{
    // get Video Info
    $youtube = wp_remote_get( 
        'https://gdata.youtube.com/feeds/api/videos/'
        . $video_id
        . '?v=2&alt=json',

        array(
             'timeout' => 120, 
            'httpversion' => '1.1' 
        ) 
    );

    // Full response: https://gist.github.com/e5a8cda8141b10711ad2
    if ( $youtube['response']['code'] == '200' )
    {
        $youtube_array = json_decode( $youtube['body'], true );
        $mediagroup = $youtube_array['entry']['media$group'];
        $yt_rating  = $youtube_array['entry']['yt$rating'];
        $yt_stats   = $youtube_array['entry']['yt$statistics'];
        $gd_rating  = $youtube_array['entry']['gd$rating'];

        $return['yt_time']      = brsfl_secondsToTime( $mediagroup['yt$duration']['seconds'] );
        $return['yt_likes']     = $yt_rating['numLikes'];
        $return['yt_dislikes']  = $yt_rating['numDislikes'];
        $return['yt_average']   = $gd_rating['average'];
        $return['yt_raters']    = $gd_rating['numRaters'];
        $return['yt_viewcount'] = $yt_stats['viewCount'];
        $return['yt_title']     = $youtube_array['entry']['title']['$t'];
        $return['yt_thumb']     = $mediagroup['media$thumbnail'][1]['url'];

        return $return;
    }   
    return false;
}


/** 
 * Convert seconds to timecode
 * http://stackoverflow.com/q/8273804
 */
function brsfl_secondsToTime($inputSeconds) 
{

    $secondsInAMinute = 60;
    $secondsInAnHour  = 60 * $secondsInAMinute;
    $secondsInADay    = 24 * $secondsInAnHour;

    // extract days
    $days = floor($inputSeconds / $secondsInADay);

    // extract hours
    $hourSeconds = $inputSeconds % $secondsInADay;
    $hours = floor($hourSeconds / $secondsInAnHour);

    // extract minutes
    $minuteSeconds = $hourSeconds % $secondsInAnHour;
    $minutes = floor($minuteSeconds / $secondsInAMinute);

    // extract the remaining seconds
    $remainingSeconds = $minuteSeconds % $secondsInAMinute;
    $seconds = ceil($remainingSeconds);

    // DAYS
    if( (int)$days == 0 )
        $days="";
    elseif( (int)$days < 10 )
        $days="0" . (int)$days . ':';
    else
        $days = (int)$days . ':';

    // HOURS
    if( (int)$hours == 0 )
        $hours="";
    elseif( (int)$hours < 10 )
        $hours="0" . (int)$hours . ':';
    else 
        $hours = (int)$hours . ':';

    // MINUTES
    if( (int)$minutes == 0 )
        $minutes="";
    elseif( (int)$minutes < 10 )
        $minutes="0" . (int)$minutes . ':';
    else 
        $minutes = (int)$minutes . ':';

    // SECONDS
    if( (int)$seconds == 0 )
        $seconds="00";
    elseif( (int)$seconds < 10 )
        $seconds="0" . (int)$seconds;

    return $days . $hours . $minutes . $seconds;
}

Leave a Comment