Vous vous êtes sans doute rendu compte que lorsque vous cherchez quelque chose sur Google et que votre résultat remontre des vidéos, ils sont présentés comme tels et affichent une miniature, un petit bouton play et, lorsqu’elle est disponible, la durée de la vidéo. Vous avez également sans doute remarqué que cela n’arrive pas seulement pour les sites de vidéos que nous connaissons tous tels que Youtube, Daylimotion ou Vimeo, mais aussi pour d’autres sites… c’est justement là que je veux en venir.


2014-06-11_195846

Voici le résultat de recherche d’une des vidéos postées sur mon site Gumdust -> recherche

Pour augmenter le taux de cliques sur les résultats de recherches qui pointent vers vos pages, et si vous avez des vidéos dans vos pages, vous pouvez le préciser à Google grâce à un ensemble d’informations structurées selon schema.org. Je ne m’attarderai pas sur la structure des informations en question, ça serait bien trop long d’en parler ici et google vous explique tout ça sur son blog.

Maintenant que vous avez découvert la structure de ces informations, vous avez sans doute remarqué la ligne « duration » dont la forme du contenu est assez étrange…

<meta itemprop="duration" content="T1M33S" />

Comme précisé dans la documentation, la durée de la vidéo doit être renseignée au format format ISO 8601, et c’est là que ça se complique…

Après pas mal de recherches et quelques bidouilles, j’ai réussi à rendre opérationnelle (mais très certainement perfectible) la fonction qui suit. Elle est capable de convertir une durée (en secondes) au format ISO 8601.

function convert_duration_to_ISO_8601($duration) {
		if (strlen($duration)>5){
			list($hours, $mins, $secs) = explode(':', $duration);
			$duration = ($hours * 3600 ) + ($mins * 60 ) + $secs;
		} else {
			list($mins, $secs) = explode(':', $duration);
			$duration = ($mins * 60 ) + $secs;
		}
		//convertit les secondes en heures
		function secs_to_h($secs) {
				$units = array(
						"week"   => 7*24*3600,
						"day"    =>   24*3600,
						"hour"   =>      3600,
						"minute" =>        60,
						"second" =>         1,
				);
		
				//retourne spécifiquement 0
				if ( $secs == 0 ) return "0 seconds";
				$s = "";
				foreach ( $units as $name => $divisor ) {
						if ( $quot = intval($secs / $divisor) ) {
								$s .= "$quot $name";
								$s .= (abs($quot) > 1 ? "s" : "") . ", ";
								$secs -= $quot * $divisor;
						}
				}
				return substr($s, 0, -2);
		}			
		
		//convertit les heures au format iso8601
		function time_to_iso8601_duration($time) {
			$units = array(
				"Y" => 365*24*3600,
				"D" =>     24*3600,
				"H" =>        3600,
				"M" =>          60,
				"S" =>           1,
			);
	
			$str = "P";
			$istime = false;
	
			foreach ($units as $unitName => &$unit) {
				$quot  = intval($time / $unit);
				$time -= $quot * $unit;
				$unit  = $quot;
				if ($unit > 0) {
					if (!$istime && in_array($unitName, array("H", "M", "S"))) {
						$str .= "T";
						$istime = true;
					}
					$str .= strval($unit) . $unitName;
				}
			}
			return $str;
		}
		$duration =time_to_iso8601_duration(strtotime(secs_to_h($duration), 0));
		return $duration;
}

Après avoir consulté le blog de Google, et mis en place tous les éléments nécessaires, faites un test grâce à l’outil de debug Google, le Google Rich Snippets Testing Tools, vous devez voir figurer tous les éléments figurant dans le schéma vidéo (je ne sais pas pourquoi mais la miniature n’apparaît pas dans mon cas, donc no panic).

Voici la page de debug de la vidéo présentée plus haut

 

Les petits snippets en plus…

Convertir des secondes en durée (Heure : Minutes : Secondes)

function seconds_converter($seconds) {
	$hours = floor($seconds/3600);
	$remainder_1 = ($seconds % 3600);
	$minutes = floor($remainder_1 / 60);
	$seconds = ($remainder_1 % 60);
	if(strlen($hours) == 1) {
		$hours = "0".$hours;
	}
	if(strlen($minutes) == 1) {
		$minutes = "0".$minutes;
	}
	if(strlen($seconds) == 1) {
		$seconds = "0".$seconds;
	}
	if ($hours>0) {
		return $hours.":".$minutes.":".$seconds;
	} else {
		return $minutes.":".$seconds;
	}
}

 

Convertir un format ISO 8601 en secondes

$delta = new DateInterval($isoDuration);
$seconds = 	($delta->s)
			+ ($delta->i * 60)
			+ ($delta->h * 60 * 60)
			+ ($delta->d * 60 * 60 * 24)
			+ ($delta->m * 60 * 60 * 24 * 30)
			+ ($delta->y * 60 * 60 * 24 * 365);
$duration = seconds_converter($seconds);

 

Article rédigé parBrice CAPOBIANCO

Autodidacte passionné par WordPress. J'aime apprendre et créer pour ensuite partager !

Coorganisateur des Meetups WordPress Rennes et fondateur de bweb.
Partager cet article

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Afficher les 2 commentaires

2 commentaires

  1. Merci pour cet article.
    Comme je ne suis pas développeur j’ai un peu cherché dans d’autres directions et voilà un petit truc. Attention, ce n’est valable que pour les vidéos déjà disponibles chez Youtube et consorts.
    En fait il suffit de copier l’url de la vidéo choisie et de la coller dans l’outil de test de GG (accessible ici : developers.google.com/struc…ting-tool/) ; sur la droite de la page vous verrez dans l’onglet « VideoObject » une ligne dédiée : « Duration ».
    GG a fait le travail pour vous et vous obtenez la durée de la vidéo au format ISO-8601.
    J’ai testé avec Dailymotion et Vimeo et cela fonctionne.

    • Salut Sylvain,
      Merci pour l’astuce qui devrait en aider plus d’un, moi compris 😉
      A bientôt !