Mostrar Videos de mi Canal de Youtube mediante la API v3 y jQuery.

Demo Github

Con la ultima actualización de la versión de la API de Google, v2 a la v3, se cayeron muchas aplicaciones que listaban los vídeos de nuestro canal de Youtube, mostrando la siguiente imagen:

Bueno, en esta oportunidad usaremos uno de los Frameworks de Javascript mas populares, para obtener un listado de todos nuestros vídeos subidos a nuestro canal de Youtube.

Primero creamos el siguiente archivo:

script.js

var channels_name='GoogleDevelopers', // Solo la parte del nombre de mi canal, Ejemplo: --> https://www.youtube.com/user/GoogleDevelopers
channels_title='Un titulo que quiera mostrar',
apikey='API KEY';

$.ajax({
    url: 'https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=' + channels_name + '&key=' + apikey,
    crossDomain: true,
    dataType: 'json'
}).done(function(a) {
    var b = a.items[0].contentDetails.relatedPlaylists.uploads,
        chid = a.items[0].id,
        nekpag = '';
    youtube_video_list(b, apikey, nekpag, channels_title, chid, channels_name)
});

function youtube_video_list(f, g, h, j, k, l) {
    $.ajax({
        url: 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=' + f + '&key=' + g + '&pageToken=' + h,
        dataType: 'json'
    }).done(function(c) {
        var d = '';
        /*
        d += '<div class="ibacordotcom-vid-top"><span class="ibacordotcom-nav-title">' + j + '</span><br><span class="ibacordotcom-vid-by">por <a href="https://www.youtube.com/user/' + l + '" target="_BLANK">' + l + '</a></span><hr>';
        */
        d += 'Selecciona otro video para visualizarlo:<br>';
        d += '<i class="fa fa-fast-backward ibacordotcom_vid_prev" title="Videos anteriores"></i> ';
        d += '<i class="fa fa-fast-forward ibacordotcom_vid_next" title="Siguientes videos"></i></div><div class="ibacordotcom-vid-bottom">';
        $.each(c.items, function(i, a) {
            var b = c.items[i].snippet.resourceId.videoId;
            getwaktu(b, i, g);
            d += '<div class="col-md-2">'
            d += '<a href="#">'
            d += '<div class="ibacordotcom-play" data-vvv="' + b + '"><div class="ibacordotcom_youtube_thumb"><amp-img src="' + c.items[i].snippet.thumbnails.default.url + '" alt="ibacor" class="preViewTube"><span class="ibacordotcom-vid-tm' + i + '"></span></div>';
            d += c.items[i].snippet.title + '</div>'
            d += '</a>'
            d += '</div>'
        });
        d += '</div>';
        $('.ibacordotcom_youtube_channels').html(d);
        if (c.prevPageToken == null) {
            var e = $(".ibacordotcom-play").attr("data-vvv");
            youtube_det(e, k, l, g)
        }
        if (c.prevPageToken != null) {
            $('.ibacordotcom_vid_prev').click(function() {
                var a = c.prevPageToken;
                youtube_video_list(f, g, a, j, k, l);
                return false
            })
        }
        $('.ibacordotcom_vid_next').click(function() {
            var a = c.nextPageToken;
            youtube_video_list(f, g, a, j, k, l);
            return false
        });
        $(".ibacordotcom-play").each(function() {
            $(this).click(function() {
                var a = $(this).attr("data-vvv");
                $('div').removeClass('ibacordotcom-vid-active');
                $(this).addClass('ibacordotcom-vid-active');
                youtube_det(a, k, l, g);
                return false
            })
        })
    })
}

function youtube_det(c, d, e, g) {
    $.ajax({
        url: 'https://www.googleapis.com/youtube/v3/videos?id=' + c + '&key=' + g + '&part=snippet,statistics',
        dataType: 'json'
    }).done(function(a) {
        var b = '',
            viewc = a.items[0].statistics.viewCount,
            likc = a.items[0].statistics.likeCount,
            likd = a.items[0].statistics.dislikeCount,
            category = '',
            judul = a.items[0].snippet.localized.title,
            desc = a.items[0].snippet.localized.description;
        b += 'Ultimo Video subido:<br>';
        b += '<div class="embed-responsive embed-responsive-4by3">'
        b += '<iframe src="https://www.youtube.com/embed/' + c + '" allowfullscreen="true" width="100%" height="30%" frameborder="0" class="embed-responsive-item"></iframe>';
        b += '</div>';
        b += '<div class="ibacordotcom-vid-box"><h3>' + judul + '</h3><hr>';
        /*
        b += '<div class="ibacordotcom-vid-box-user"><a href="https://www.youtube.com/channel/' + d + '" target="_BLANK"><span id="ibacordotcom-user-amp-img"></span> <span class="ibacordotcom-uploader">' + a.items[0].snippet.channelTitle + '</span></a><h4 class="pull-right"> ' + addCommas(viewc) + '</h4></div></div>';
        b += '<div class="ibacordotcom-vid-box"><i class="fa fa-clock-o"> <span>' + _timeSince(new Date(a.items[0].snippet.publishedAt).getTime()) + '</span></i><i class="fa fa-thumbs-down pull-right"> ' + addCommas(likd) + '</i><i class="fa fa-thumbs-up pull-right"> ' + addCommas(likc) + '</i><hr>' + urlify(desc).replace(/\n/g, '<br>') + '<br></div>';
        gplus(e, g);
        */
        $('.ibacordotcom_vid_play').html(b)
    })
}

function getwaktu(c, i, g) {
    $.ajax({
        url: 'https://www.googleapis.com/youtube/v3/videos?id=' + c + '&key=' + g + '&part=contentDetails',
        dataType: 'json'
    }).done(function(a) {
        var b = a.items[0].contentDetails.duration,
            dataw = '',
            menit = '',
            detik = '';
		if(b.match(/M/g)){
            dataw = b.split('M');
            menit = dataw[0].replace('PT','');
			if(dataw[1] != ''){
				detik = dataw[1].replace('S','');
			}else{
				detik = '00';
			}
		}else{
            dataw = b.split('PT');
			menit = '00';
			detik = dataw[1].replace('S','');
		}
        $('.ibacordotcom-vid-tm' + i).html(menit + ':' + detik)
    })
}

function urlify(b) {
    var c = /(https?:\/\/[^\s]+)/g;
    return b.replace(c, function(a) {
        return '<a href="' + a + '" rel="nofollow" target="_BLANK">' + a + '</a>'
    })
}

function gplus(c, g) {
    var d = 'https://www.googleapis.com/plus/v1/people/',
        apiend = '/activities/public',
        fields = 'items(actor(image(url)))';
    $.ajax({
        url: d + '+' + c + apiend + '?key=' + g + '&fields=' + fields + '&maxResults=1',
        crossDomain: true,
        dataType: 'jsonp'
    }).done(function(a) {
        var b = a.items,
            i = 0,
            html = '';
        for (i = 0; i < b.length; i += 1) {
            html += '<amp-img src="' + b[i].actor.image.url + '" alt="" />'
        }
        $('#ibacordotcom-user-amp-img').html(html)
    })
}

function _timeSince(a) {
    var s = Math.floor((new Date() - a) / 1000),
        i = Math.floor(s / 31536000);
    if (i > 1) {
        return i + " years ago"
    }
    i = Math.floor(s / 2592000);
    if (i > 1) {
        return i + " months ago"
    }
    i = Math.floor(s / 86400);
    if (i > 1) {
        return i + " days ago"
    }
    i = Math.floor(s / 3600);
    if (i > 1) {
        return i + " hours ago"
    }
    i = Math.floor(s / 60);
    if (i > 1) {
        return i + " minutes ago"
    }
    return Math.floor(s) + " seconds ago"
}

function addCommas(nStr){
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

Ahora creamos nuestra Vista para visualizar los resultados:

index.html

<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="content-type" content="text/html;charset=utf-8" />
		<meta name="viewport" content="width=device-width initial-scale=1.0 maximum-scale=1.0 user-scalable=yes" />
		
		<title>Mostrar Videos de mi Canal de Youtube mediante la API v3 con jQuery y Bootstrap</title>

		<script src="//code.jquery.com/jquery-2.1.1.min.js"></script>

		<link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet">

		<script src="script.js"></script>

		<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
		<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">
		<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>

	</head>
	<body>
		<div class="container">

			<h1>Mostrar Videos de mi Canal de Youtube mediante la API v3 con jQuery y Bootstrap.</h1>

			    <div class="row">


					<div id="ibacordotcom-content">						
						<div class="ibacordotcom-unit ibacordotcom-vid-kenca">
							<div class="ibacordotcom_vid_play"></div>
						</div>
						<div class = "ibacordotcom-unit ibacordotcom-vid-katuhu">
							<div class="ibacordotcom_youtube_channels"></div>
						</div>
					</div>

				</div>

		</div>


		<br><br>		

				
			<footer>
				<div class="container text-center">
					<p class="text-muted credit">
						Desarrollado por <a href="https://www.collectivecloudperu.com" target="blank">Collective Cloud Peru</a>
					</p>
			  	</div>				
			</footer>


	</body>
</html>

Listo eso es todo

Notas

  • Puedes ver la Demo que esta al inicio de este tutorial
  • Las funciones de jQuery que usamos en este tutorial pueden cambiar en un futuro, esto no depende de nosotros si no de los Desarrolladores que dan soporte a jQuery.

 

Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.