Получить идентификатор видео с URL Vimeo

Я пытаюсь найти лучшее регулярное выражение для получения идентификатора видео 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

5 ответов

Решение

С 2016 года. И сказал Мартин Эндер no longer up to date


Итак, вот API-решение: (без регулярного выражения, но 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 (Скажи им, не говори мне, хе-хе:D)

Обновление: я замечаю, что этот ответ время от времени привлекает некоторое внимание (посредством голосов или комментариев). Ответу более двух лет, и, вероятно, поддерживаемые типы URL уже не актуальны. Я не буду активно поддерживать это регулярное выражение - оно просто предназначено как ответ на вопрос и, следовательно, заботится только о форматах, перечисленных там. Используйте это на свой страх и риск, или, что еще лучше, используйте это просто в качестве отправной точки для разработки собственного регулярного выражения на основе современного и полного списка форматов URL.

См. Ответ @l2aelba для решения API /questions/15063207/poluchit-identifikator-video-s-url-vimeo/15063221#15063221


Это будет полное регулярное выражение, которое также гарантирует, что формат правильный:

/https?:\/\/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|video\/|)(\d+)(?:$|\/|\?)/

Теперь вы можете получить имя группы в группе захвата 1 (если присутствует), идентификатор альбома в группе захвата 2 (если есть) и идентификатор видео в группе захвата 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

Следующее регулярное выражение вернет идентификатор группы 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/88888888

PHP-код:

    $vimeoUrl = 'http://vimeo.com/channels/channelsName/11111111';
    $fetchVimeoIdArr = explode('/', $vimeoUrl);
    $idCounter = count($fetchVimeoIdArr) - 1;
    $vimeoId = $fetchVimeoIdArr[$idCounter];
Другие вопросы по тегам