FORMATER UN LIEN YOUTUBE, DAILYMOTION OU VIMEO POUR L'UTILISER DANS SHADOWBOX

cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 - 16 nov. 2011 à 11:15
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011 - 18 nov. 2011 à 16:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53761-formater-un-lien-youtube-dailymotion-ou-vimeo-pour-l-utiliser-dans-shadowbox

uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
18 nov. 2011 à 16:48
cod57, 7 regexp pour parser un lien, c'est BEAUCOUP trop lourd. 1 regexp suffit (tu as des centaines de tutos là dessus).
Imagine un mec qui écrit 10 liens 10 appels à la fonction 70 regexp (en sachant qu'une regexp est recompilée à chaque fois), c'est bien trop gourmand.
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
18 nov. 2011 à 15:03
ex

<?php
echo '';
var_dump(get_meta_tags('http://www.youtube.com/watch?v=DLZpJqi3M0k'));
echo '

';

function meta($url){

$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] : '';

return(array($title,$description,$video,$videoWidth,$videoHeight,$image,$site_name));

}

echo '';
var_dump(meta('http://www.youtube.com/watch?v=DLZpJqi3M0k'));
echo '

';

?>
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
18 nov. 2011 à 14:57
@camillagaiaschicherie

oui tu as raison ma méthode est pas bonne
on ne récupère pas tout avec get-meta-tags
$content = file_get_contents($url); c'est mieux

++
camillagaiaschicherie Messages postés 58 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 28 février 2012
18 nov. 2011 à 12:03
COD57

http://php.net/manual/en/function.get-meta-tags.php

"Note:

Seules les balises méta avec un attribut name seront parsées. "
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
18 nov. 2011 à 09:49
bonjour

@camillagaiaschicherie
$content = file_get_contents($url);
il y a http://php.net/manual/en/function.get-meta-tags.php

++
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
18 nov. 2011 à 03:59
1 seule regex suffit, donc 7fois plus rapide
camillagaiaschicherie Messages postés 58 Date d'inscription vendredi 23 mai 2008 Statut Membre Dernière intervention 28 février 2012
18 nov. 2011 à 02:37
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 ...
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
16 nov. 2011 à 22:59
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)
cs_kgb93 Messages postés 1 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 16 novembre 2011
16 nov. 2011 à 21:57
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 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
16 nov. 2011 à 20:37
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
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
16 nov. 2011 à 11:15
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

++
Rejoignez-nous