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;
}