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