J'essaie de trouver la meilleure expression rationnelle pour récupérer l'ID vidéo vimeo à partir de l'URL.
Exemples d'URL:
https://vimeo.com/11111111
http://vimeo.com/11111111
https://www.vimeo.com/11111111
http://www.vimeo.com/11111111
https://vimeo.com/channels/11111111
http://vimeo.com/channels/11111111
https://vimeo.com/groups/name/videos/11111111
http://vimeo.com/groups/name/videos/11111111
https://vimeo.com/album/2222222/video/11111111
http://vimeo.com/album/2222222/video/11111111
https://vimeo.com/11111111?param=test
http://vimeo.com/11111111?param=test
Mon expression régulière actuelle qui ne fonctionne pas:
/http:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/
Playground & Test ici: http://jsbin.com/asuqic/1/edit?javascript,live
Depuis 2016. Et @ Martin Ender a dit no longer up to date
Voici donc une solution API: (sans expression régulière mais appelant API et sûr!)
jQuery:
function GetVimeoIDbyUrl(url) {
var id = false;
$.ajax({
url: 'https://vimeo.com/api/oembed.json?url='+url,
async: false,
success: function(response) {
if(response.video_id) {
id = response.video_id;
}
}
});
return id;
}
Minifier:
function GetVimeoIDbyUrl(e){var i=!1;return $.ajax({url:"https://vimeo.com/api/oembed.json?url="+e,async:!1,success:function(e){e.video_id&&(i=e.video_id)}}),i}
JS pur/natif: (IE9 + & navigateurs modernes)
function GetVimeoIDbyUrl(url) {
var id = false;
var request = new XMLHttpRequest();
request.open('GET', 'https://vimeo.com/api/oembed.json?url='+url , false);
request.onload = function() {
if (request.status >= 200 && request.status < 400) {
var response = JSON.parse(request.responseText);
if(response.video_id) {
id = response.video_id;
}
}
};
request.send();
return id;
}
Minifier:
function GetVimeoIDbyUrl(e){var t=!1,o=new XMLHttpRequest;return o.open("GET","https://vimeo.com/api/oembed.json?url="+e,!1),o.onload=function(){if(o.status>=200&&o.status<400){var e=JSON.parse(o.responseText);e.video_id&&(t=e.video_id)}},o.send(),t}
Démo: https://jsbin.com/mevejoxudo/1/edit?js,output
Certains types d'URL ne prennent pas en charge? : https://vimeo.com/help/contact#tech-api (Dites-leur, ne me dites pas hehe: D)
Mise à jour: Je remarque que cette réponse retient de temps en temps l'attention (par le biais de votes ou de commentaires). La réponse date de plus de deux ans , et les types d'URL pris en charge ne sont probablement plus à jour. Je ne maintiendrai pas activement cette expression régulière - elle est simplement conçue comme une réponse à la question et ne prend donc en charge que les formats énumérés ici. Utilisez-le à vos propres risques ou, mieux encore, utilisez-le simplement comme point de départ pour développer votre propre regex sur la base d'une liste à jour et complète de formats d'URL.
Voir la réponse de @ l2aelba pour la solution API https://stackoverflow.com/a/37695721/62281
Ce serait le regex complet, qui garantit également que le format est correct:
/https?:\/\/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|video\/|)(\d+)(?:$|\/|\?)/
Vous pouvez maintenant récupérer le nom du groupe dans le groupe de capture 1
(si présent), l'identifiant de l'album dans le groupe de capture 2
(si présent) et l'ID vidéo dans le groupe de capture 3
(toujours).
L'expression régulière suivante renverra l'id sur le groupe 1 pour ceux qui ne veulent récupérer que ces informations. Cela fonctionne avec tous les exemples d'URL donnés dans la question. Cela fonctionne également sans http://
et https://
. Il fonctionne également avec des URL telles que player.vimeo.com/...
/^.*(?:vimeo.com)\\/(?:channels\\/|groups\\/[^\\/]*\\/videos\\/|album\\/\\d+\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)/
var r = /(videos|video|channels|\.com)\/([\d]+)/,
a = "https://vimeo.com/album/2222222/video/11111111";
console.log(a.match(r)[2]); // 11111111;
Pour php, le code ci-dessous fonctionne pour les URL suivantes
c'est à dire. :
http://vimeo.com/88888888
http://player.vimeo.com/video/88888888
http://vimeo.com/channels/staffpicks/88888888
http://vimeo.com/groups/groupsname/88888888
Code PHP:
$vimeoUrl = 'http://vimeo.com/channels/channelsName/11111111';
$fetchVimeoIdArr = explode('/', $vimeoUrl);
$idCounter = count($fetchVimeoIdArr) - 1;
$vimeoId = $fetchVimeoIdArr[$idCounter];