Получить идентификатор видео с Vimeo url
Я пытаюсь найти лучшее regexp для получения идентификатора видео vimeo из URL.
Пример 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
Текущее текущее регулярное выражение, которое не работает:
/http:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/
Игровая площадка и тест здесь: http://jsbin.com/asuqic/1/edit?javascript,live
Ответы
Ответ 1
С 2016. И @Martin Ender сказал no longer up to date
Итак, вот решение API: (без regexp, но вызывающего API-адреса и безопасно!)
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;
}
Minify:
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}
Pure/Native JS: (IE9 + и современные браузеры)
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;
}
Minify:
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}
Демо: https://jsbin.com/mevejoxudo/1/edit?js,output
Некоторый тип URL-адреса не поддерживается?: https://vimeo.com/help/contact#tech-api (Скажите им, не говорите мне, хе-хе: D)
Ответ 2
Обновление: Я замечаю, что этот ответ получает некоторое время от времени (через голоса или комментарии). Ответ более двух лет, и, вероятно, поддерживаемые типы URL-адресов более не актуальны. Я не буду активно поддерживать это регулярное выражение - он просто предназначен для ответа на вопрос и, следовательно, только заботится о форматах, перечисленных там. Используйте это на свой страх и риск, или, что еще лучше, используйте его только как отправную точку для разработки собственного регулярного выражения на основе современного и полного списка форматов URL.
См. ответ @l2aelba для решения API fooobar.com/questions/208893/...
Это будет полное регулярное выражение, которое также гарантирует правильность формата:
/https?:\/\/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|video\/|)(\d+)(?:$|\/|\?)/
Теперь вы можете получить имя группы в группе захвата 1
(если имеется), идентификатор альбома в группе захвата 2
(если есть) и идентификатор видео в группе захвата 3
(всегда).
Демо
Ответ 3
var r = /(videos|video|channels|\.com)\/([\d]+)/,
a = "https://vimeo.com/album/2222222/video/11111111";
console.log(a.match(r)[2]); // 11111111;
http://jsbin.com/asuqic/7/edit
Ответ 4
Следующее regex вернет идентификатор в группе 1 для тех, кто хочет получить эту информацию только. Он работает со всеми примерами URL-адресов, заданными в вопросе.
Он также работает без http://
и https://
.
Он также работает с такими URL-адресами, как player.vimeo.com/...
/^.*(?:vimeo.com)\\/(?:channels\\/|groups\\/[^\\/]*\\/videos\\/|album\\/\\d+\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)/
Ответ 5
Для php ниже код работает для следующих URL-адресов
то есть.:
http://vimeo.com/88888888
http://player.vimeo.com/video/88888888
http://vimeo.com/channels/staffpicks/88888888
http://vimeo.com/groups/groupsname/88888888
Код PHP:
$vimeoUrl = 'http://vimeo.com/channels/channelsName/11111111';
$fetchVimeoIdArr = explode('/', $vimeoUrl);
$idCounter = count($fetchVimeoIdArr) - 1;
$vimeoId = $fetchVimeoIdArr[$idCounter];