Usar Tin Can para registrar la visualización de un video en YouTube

image_thumb.png

 

 

 

 

 

 

Hasta ahora podíamos registrar la interacción de un usuario sobre un vídeo con Scorm pero el seguimiento era un poco difuso, no era completo y, sobre todo, requería que el usuario lanzara el video desde un LMS. Con Tin Can, registrar las interacciones de un usuario es mucho más sencillo siguiendo el modelo de statements basado en Activity stream, es mucho más completo y no requiere que el usuario lance el contenido desde un LMS

He preparado un prototipo para ilustrar este post. Este prototipo se basa en el framework xAPIWrapper de ADL, en el API Javascript de Youtube  y usa LRS público de Scorm Cloud de Rustici, para poder usar su Statement Viewer pero puedes introducir los datos del LRS que prefieras.

youtube_tincan_prototipo

A través del API Javascript de Youtube puedes obtener información sobre el vídeo que te resultará útil a la hora de enviar statements. Por ejemplo, con JQuery obtienes el nombre y la descripción del vídeo:

$.getJSON(‘https://gdata.youtube.com/feeds/api/videos/’ + videoID + ‘?v=2&alt=json’,
function (data) {
console.log(data);
videoTitle = data.entry.title.$t;
videoDescription = data.entry.media$group.media$description.$t;
}
);

Y con esta función (gracias) puedes controlar el estado del vídeo:

function onPlayerStateChange(newState) {
switch (newState) {
case (1):
videoStarted();
break;
case (2):
if (lastPlayerState == 1) {
videoWatched(lastPlayerTime, ytplayer.getCurrentTime());
} else if (lastPlayerState == 2) {
videoSkipped(lastPlayerTime, ytplayer.getCurrentTime());
}
videoPaused();
break;
case (0):
videoEnded();
break;
}
lastPlayerTime = ytplayer.getCurrentTime();
lastPlayerState = newState;
}

Una vez que has controlado el estado actual del video solamente necesitas enviar los statements. Por ejemplo:

/*video statements*/
function videoStarted()

sendstatement (“played”,false,false);
}

function videoPaused(){
sendstatement (“paused”,false,false);
}
function videoEnded(){
sendstatement (“terminated”,false,false);
}

function videoWatched(start, finish) {//start and finish in seconds
sendstatement (“watched”,seconds2time(parseInt(start)),seconds2time(parseInt(finish)));
}
function videoSkipped(start, finish) {//start and finish in seconds
sendstatement (“skipped”,seconds2time(start),seconds2time(finish));
}

Como ves en esta imagen, la calidad del seguimiento es bastante buena y, además es amigable, semántica para un humano:

youtube_tincan_statementviewer

 

Share This:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *