Image de l'article Utilisez une url Youtube, youtu.be, Dailymotion, dai.ly, Vimeo en PHP

Utilisez une url Youtube, youtu.be, Dailymotion, dai.ly, Vimeo en PHP

Ceci est une mise à jour de l'article que j'avais publié en 2016 : Convertir une url Youtube, Dailymotion, Vimeo en lecteur HTML avec PHP.

Dans cet article je vais vous présenter quelques fonctions PHP pour utiliser des vidéos sur votre site.

Obtenir l'identifiant d'une vidéo d'après son URL

La fonction VidProviderUrl2VideoID renvoie l'identifiant et le type d'une vidéo d'après une URL. Elle n'attend qu'un paramètre :

La fonction renvoie 0 en cas d'erreur ou un array à deux paramètres :

La fonction utilise strpos pour chercher rapidement l'origine de la vidéo. Elle utilise ensuite une expression régulière pour extraire l'identifiant.

L'URL peut avoir des paramètres comme une liste de lecture ou un démarrage à XX secondes, ça ne pertubera pas la recherche de l'identifiant.


// renvoi l'id et le type de vidéo d'après une URL
function VidProviderUrl2VideoID($aUrl){
	$vid = '';
	$type = 0;
	if(strpos($aUrl, 'youtube') !== false){
		// youtube
		if(preg_match('/(.+)youtube\.com\/watch\?v=([\w-]+)/', $aUrl, $vid)){
			$vid = $vid[2];
			$type = 'youtube';
		}

	}elseif(strpos($aUrl, 'youtu.be') !== false){
		// youtu.be
		$d = strpos($aUrl, 'youtu.be/');
		if(preg_match('/(.+)youtu.be\/([\w-]+)/', $aUrl, $vid)){
			$vid = $vid[2];
			$type = 'youtube';
		}

	}elseif(strpos($aUrl, 'vimeo') !== false){
		// vimeo
		if(preg_match('/https:\/\/vimeo.com\/([\w-]+)/', $aUrl, $vid)){
			$vid = $vid[1];
			$type = 'vimeo';
		}

	}elseif(strpos($aUrl, 'dailymotion') !== false){
		// dailymotion
		if(preg_match('/(.+)dailymotion.com\/video\/([\w-]+)/', $aUrl, $vid)){
			$vid = $vid[2];
			$type = 'dailymotion';
		}

	}elseif(strpos($aUrl, 'dai.ly') !== false){
		// dailymotion
		if(preg_match('/(.+)dai.ly\/([\w-]+)/', $aUrl, $vid)){
			$vid = $vid[2];
			$type = 'dailymotion';
		}
	}
	return empty($type) ? 0 : ['type'=>$type, 'videoId'=>$vid];
}

Utilisation


VidProviderUrl2VideoID('https://www.youtube.com/watch?v=Ra7zZTlC_T0');
// Array ( [type] => youtube [videoId] => Ra7zZTlC_T0 )

VidProviderUrl2VideoID('https://youtu.be/7yh9i0PAjck?t=6');
// Array ( [type] => youtube [videoId] => 7yh9i0PAjck )

VidProviderUrl2VideoID('https://www.dailymotion.com/video/x8cycx?playlist=x3e13x');
// Array ( [type] => dailymotion [videoId] => x8cycx )

VidProviderUrl2VideoID('https://vimeo.com/30856494');
// Array ( [type] => vimeo [videoId] => 30856494 )

Obtenir la vignette d'une vidéo d'après son URL

Une fois que vous avez obtenu l'identifiant et le type de la vidéo vous pouvez facilement charger sa vignette.

La fonction VidProviderUrl2Thumbnail renvoie un lien vers l'image de pré-visualisation d'une vidéo d'après son URL.

Pour les vidéos Youtube, elle utilise un lien direct, pour les vidéos Vimeo et Dailymotion, elle utilise les API. Je vous conseille d'utiliser l'API pour obtenir le lien de l'image et enregistrer ensuite ce lien.

La fonction renvoie 0 ou le lien vers l'image.


// renvoi un lien vers une image de preview d'après l'url
function VidProviderUrl2Thumbnail($aUrl){
	$v = VidProviderUrl2VideoID($aUrl);
	if(empty($v['videoId'])) return 0;
	$h = 0;
	switch($v['type']){
	case'youtube' :
		$h = 'https://img.youtube.com/vi/'.$v['videoId'].'/mqdefault.jpg';
		break;
	case 'vimeo' :
		$h = json_decode(@file_get_contents('https://vimeo.com/api/v2/video/'.$v['videoId'].'.json'));
		if(!empty($h)) $h = $h[0]->thumbnail_medium;
		break;
	case 'dailymotion' :
		$h = json_decode(@file_get_contents('https://api.dailymotion.com/video/'.$v['videoId'].'?fields=thumbnail_240_url'));
		if(!empty($h)) $h = $h->thumbnail_240_url;
		break;
	}
	return $h;
}

Veuillez noter que si la fonction récupère des formats d'images moyennes, mais vous pouvez facilement choisir le format que vous préférez.

Voici les formats de vignette existant (en Mai 2019).

Service Format de la fonction Autres formats
Youtube mqdefault.jpg (320 x 180) default.jpg (120 x 90)
hqdefault.jpg (480 x 360)
sddefault.jpg (640 x 480)
maxresdefault.jpg (dépand de la vidéo)
Vimeo thumbnail_medium (100 x 75) thumbnail_small (200 x 150)
thumbnail_large (640 x 360)
Dailymotion urlthumbnail_240_url (240 pixels de haut) urlthumbnail_60_url (60 pixels de haut)
urlthumbnail_120_url (120 pixels de haut)
urlthumbnail_180_url (180 pixels de haut)
urlthumbnail_240_url (240 pixels de haut)
urlthumbnail_360_url (360 pixels de haut)
urlthumbnail_480_url (480 pixels de haut)
urlthumbnail_720_url (720 pixels de haut)
urlthumbnail_1080_url (1080 pixels de haut)

Obtenir le titre d'une vidéo d'après son URL

L'idée de cette fonction est la même que pour récupérer la vignette. Une fois l'identifiant de la vidéo trouvé, on utilise soit un fichier JSON (Youtube), soit les API.

La fonction renvoie 0 ou le titre trouvé.


// renvoi le titre d'une vidéo d'après l'URL
function VidProviderUrl2Title($aUrl){
	$v = VidProviderUrl2VideoID($aUrl);
	if(empty($v)) return 0;
	$h = 0;
	switch($v['type']){
	case'youtube' :
		$v = json_decode(@file_get_contents('https://www.youtube.com/oembed?url='.$aUrl.'&format=json'), true);
		$h = $v['title'];
		break;
	case 'vimeo' :
		$h = json_decode(@file_get_contents('https://vimeo.com/api/v2/video/'.$v['videoId'].'.json'));
		if(!empty($h)) $h = $h[0]->title;
		break;
	case 'dailymotion' :
		$h = json_decode(@file_get_contents('https://api.dailymotion.com/video/'.$v['videoId'].'?fields=title'));
		if(!empty($h)) $h = $h->title;
		break;
	}
	return $h;		
}

Obtenir le lecteur HTML d'une vidéo d'après son URL

Pour finir cet article, je vous propose la fonction VidProviderUrl2Player renvoi le code HTML pour un lecteur vidéo basique. Elle était déjà dans l'article de 2016, mais voici une version allégée.

Elle peut recevoir 4 paramètres :

La fonction renvoie l'URL ou le lecteur HTML.


// renvoi un lecteur d'après l'url
function VidProviderUrl2Player($aUrl, $aWidth = 640, $aHeight = 360, $aAutoplay = true){
	$v = VidProviderUrl2VideoID($aUrl);
	if(empty($v)) return $aUrl;
	$h = $aUrl;
	switch($v['type']){
	case'youtube' :
		$h = '<iframe width="'.$aWidth.'" height="'.$aHeight.'" src="https://www.youtube.com/embed/'.$v['videoId'].($aAutoplay ? '?autoplay=1' : '').'" frameborder="0" allowfullscreen autoplay="1"></iframe>';
		break;
	case 'vimeo' :
		$h = '<iframe src="https://player.vimeo.com/video/'.$v['videoId'].($aAutoplay ? '?autoplay=1' : '').'" width="'.$aWidth.'" height="'.$aHeight.'" frameborder="0"  webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>';
		break;
	case 'dailymotion' :
		$h = '<iframe frameborder="0" width="'.$aWidth.'" height="'.$aHeight.'" src="//www.dailymotion.com/embed/video/'.$v['videoId'].($aAutoplay ? '?autoplay=1' : '').'" allowfullscreen></iframe>';
		break;
	}
	return $h;
}

Vous pouvez utiliser les CSS pour avoir un lecteur vidéo en design adaptatif. Il suffit de placer le lecteur dans un bloc div avec un identifiant ou une classe.


<?php
echo '<div id="video">'.VidProviderUrl2Player('https://www.youtube.com/watch?v=0N_RO-jL-90').'</div>';
?>

En CSS pour que la vidéo prenne le maximum de place disponible, en 720p mais pas plus de 80 % de la hauteur de la fenêtre.


#video iframe{
	width: 100%;
	max-width: 100%;
	height: 720px;
	max-height: 80vh;
}
 

Image Viewer