Formater un lien youtube, dailymotion ou vimeo pour l'utiliser dans shadowbox

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 779 fois - Téléchargée 16 fois

Contenu du snippet

Ce code permet de formater l'adresse d'une vidéo de la barre d'adresse du navigateur afin de pouvoir l'utiliser dans ShadowBox.
On appelle la fonction format_url_vdo avec, en paramètre, l'url de la vidéo copié de la barre d'adresse du navigateur.
On récupère l'url formaté que l'on pourra utilisé dans ShadowBox.

La seconde fonction formate le lien à mettre sur la page web afin d'avoir la miniature qui fera "pop" la shadowBox. On passe en paramètre l'url formaté par la première fonction, un titre, le nom de la classe et/ou de l'id pour se permettre plus de souplesse dans les feuilles de style.

Source / Exemple :


Formatage du lien
function format_url_vdo($url) { //initialisation des variables $host = ''; $id = ''; $parse = ''; $parse2 = ''; $formated_url = ''; //On détermine où est hebergée la vidéo (youtube, dailymotion, vimeo) et on extrait les données nécessaires au formatage du lien shadowbox $parse = parse_url($url); switch ($parse['host']) { case 'youtu.be': $host = 'youtube'; $id = substr($parse['path'], 1); break; case 'www.youtube.com': $host = 'youtube'; $parse2 = parse_str($parse['query'], $data); $id = $data['v']; break; case 'vimeo.com': $host = 'vimeo'; $id = substr($parse['path'], 1); break; case 'www.dailymotion.com': $host = 'dailymotion'; $id = substr($parse['path'], 7); break; default: break; } //On formate le lien selon l'hébergeur switch ($host) { case 'youtube': $formated_url = 'http://www.youtube.com/v/' . $id . ';hl=en&fs=1&rel=0&autoplay=1'; break; case 'vimeo': $formated_url = 'http://player.vimeo.com/video/' . $id . '?title=0&byline=0&portrait=0'; break; case 'dailymotion': $formated_url = 'http://www.dailymotion.com/swf/' . $id; break; default: break; } return $formated_url; }
Lien ShadowBox
function lnkShadowbox($url, $title, $nompic, $class, $id) { if (strlen($class) > 0) { $class = ' class="' . $class . '" '; } if (strlen($id) > 0) { $id = ' id="' . $id . '" '; } $link = '<a ' . $class . $id . 'rel="shadowbox" title="' . $title . '" href="' . $url . '">'; $link .= '<img src="../storage/pics/' . $nompic . '" alt="' . $nompic . '" style="max-width: 66px; max-height: 61px;" />'; $link .= '</a>'; return $link; }

A voir également

Ajouter un commentaire

Commentaires

cod57
Messages postés
1660
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
8 -
bonjour

un petit exemple c'est pas du luxe

echo $l=format_url_vdo('http://www.youtube.com/watch?v=1fPmA1hzs3k');
echo lnkShadowbox($l,'toto','http://i2.ytimg.com/vi/yj5UbsHT7Ws/default.jpg','',456987);

ça serait bien si on pouvait récupérer la vignette à la volée en v2 ... et mettre le titre entre ici

++
uaip
Messages postés
1470
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
-
Salut,
Je trouve ça très mauvais comme source. Non pas que je critique la qualité du code, mais la compréhension du concept.
C'est une bidouille tout à fait foireuse. Si tu veux la jouer à la Facebook en intégrant les médias via leur liens (j'ai bien compris ?), ce ne sont pas les url qu'il faut bidouiller mais les balises meta.
En parsant les balises meta, tu obtiens toutes les infos, y compris la vignette que tu désires.
De plus, ça permet de ne pas limiter à 3 sites, mais à la totalité du web (en admettant que les sites respectent les normes).
J'avais codé une fonction comme ça, "universelle", c'est pas si simple.
Regarde un exemple du rendu : http://winky.fr/!dev_linter-http%3A%252F%252Fwww.youtube.com%252Fwatch%3Fv%3DPgEi9b1EctU
(attention, youtube fait chier parfois (même sur facebook), faut recharger si le lien n'est pas pris en compte)

Bonne continuation
cs_kgb93
Messages postés
1
Date d'inscription
mercredi 29 août 2007
Statut
Membre
Dernière intervention
16 novembre 2011
-
Merci coo57, il est vrai que j'aurais dû mettre un exemple pour montrer le champ d'application de mon code. Quant au fait de récupérer la vignette à la volée, j'ai déjà vu des sources ici. De plus, lorsque j'ai codé ces deux fonctions, c'était dans le cadre d'un projet où l'utilisateur voulait choisir sa vignette et non pas la vignette par défaut de ces sites qui ne reflète pas toujours le contenu de la vidéo.

UAIP, dans ta critique (constructive et que je prends bien), je vais commencer par prendre le compliment quant à la qualité du code. Merci ^^.
Sinon, il est vrai qu'il y a plusieurs façon de faire, notamment en parsant mais je vais argumenter pourquoi ce code et pourquoi 3 sites de vidéo.
Pourquoi ce code? Comme je l'ai dit, c'est un code pour un projet précis. L'utilisateur, dans son back-office n'aura simplement qu'à copier/coller l'adresse de la vidéo. Cela vise donc un public large et parfois peu averti.
Pourquoi ces 3 sites? Comme je l'ai mis dans le titre, c'est uniquement pour shadowbox qui, sur tous les hébergeurs de vidéo, ne propose que ces 3 là (du moins dans leur doc et leur présentation sur le site).

C'est la première fois que je poste un code sur le site et je me pose maintenant la question : Faut il attendre de faire un code ultra généraliste pour en mettre un ou peut-on mettre un code qui ne conviendra que dans des cas bien précis (sans pour autant que ce soit pour usage unique)? Moi même j'ai des arguments en faveur et en défaveur. J'aurais peut être dû le poster sur le forum de ShadowBox me direz vous ^^
Mais je ferais plus attention pour le(s) prochain(s) code(s) que je posterai.

Merci.
uaip
Messages postés
1470
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
-
Etant donné ta présentation, je pensais que tu voulais poster un code généraliste, et non pas un code issu d'un projet perso. Si tel est le cas, je ne peux pas t'en vouloir ^^
Je n'ai pas dit que cette source n'avait pas sa place ici, au contraire. Et je pensais que shadowbox était un plugin jQuery (comme lightbox & co) pour simplement afficher un média en grisant l'écran, sans savoir qu'il n'acceptait que ces 3 sites.
Par contre je rectifie ton commentaire : le parsing des balises meta fonctionne aussi en filant simplement le lien du média (cf Facebook dont 90% sont des néophytes en matière d'informatique).
Ne te pose pas de question et continue de poster, c'est un exemple de code tout à fait utile. J'avais simplement mal compris l'initiative.
Par contre, même si le code est issu d'un projet perso, pense à la rendre généraliste (en supprimant par exemple "../storage/pics/" qui n'est valide que pour toi).
Enfin, le code fonctionne-t-il pour les liens youtube du genre http://www.youtube.com/user/Julielovesmac07#p/a/2E772BA2A73FD4AA/1/N3M5lG6QJK0 ? (lien pris au hasard sur google)
camillagaiaschicherie
Messages postés
58
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
28 février 2012
-
bonjour

une autre methode compatible avec beaucoup de ce genre de site :

$url = 'http://www.youtube.com/watch?v=DLZpJqi3M0k';
$url = 'http://www.dailymotion.com/video/x2lv3k_vincent-tim-burton-vostfr_creation';
$url = 'http://www.metacafe.com/watch/1085944/tim_burtons_vincent_featuring_edgar_alan_poes_the_raven/';
$url = 'http://vimeo.com/1771867';

$content = file_get_contents($url);

$pattern['title'] = '/<meta property="og:title" content="(.+?)"/smi';
$pattern['description'] = '/<meta property="og:description" content="(.+?)"/smi';
$pattern['video'] = '/<meta property="og:video" content="(.+?)"/smi';
$pattern['videoWidth'] = '/<meta property="og:video:width" content="(.+?)"/smi';
$pattern['videoHeight'] = '/<meta property="og:video:height" content="(.+?)"/smi';
$pattern['image'] = '/<meta property="og:image" content="(.+?)"/smi';
$pattern['site_name'] = '/<meta property="og:site_name" content="(.+?)"/smi';

$title = (preg_match($pattern['title'],$content,$match)) ? $match[1] : '';
$description = (preg_match($pattern['description'],$content,$match)) ? $match[1] : '';
$video = (preg_match($pattern['video'],$content,$match)) ? $match[1] : '';
$videoWidth = (preg_match($pattern['videoWidth'],$content,$match)) ? $match[1] : '';
$videoHeight = (preg_match($pattern['videoHeight'],$content,$match)) ? $match[1] : '';
$image = (preg_match($pattern['image'],$content,$match)) ? $match[1] : '';
$site_name = (preg_match($pattern['site_name'],$content,$match)) ? $match[1] : '';

apres la partie html ... voila quoi ...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.