从vimeo网址获取Vimeo id的简便方法

Wak*_*enn 25 php regex vimeo

我试图从vimeo URL获取id.有比这更简单的方法吗?我看到的所有vimeo视频网址总是:

https://vimeo.com/29474908

https://vimeo.com/38648446

// VIMEO


$vimeo = $_POST['vimeo'];

function getVimeoInfo($vimeo)
{
    $url = parse_url($vimeo);
    if($url['host'] !== 'vimeo.com' &&
            $url['host'] !== 'www.vimeo.com')
        return false;
   if (preg_match('~^http://(?:www\.)?vimeo\.com/(?:clip:)?(\d+)~', $vimeo, $match)) 
   {
       $id = $match[1];
   }
   else
   {
       $id = substr($link,10,strlen($link));
   }

   if (!function_exists('curl_init')) die('CURL is not installed!');
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, "http://vimeo.com/api/v2/video/$id.php");
   curl_setopt($ch, CURLOPT_HEADER, 0);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_TIMEOUT, 10);
   $output = unserialize(curl_exec($ch));
   $output = $output[0];
   curl_close($ch);
   return $output['id'];
}

$vimeo_id = getVimeoInfo($vimeo);
Run Code Online (Sandbox Code Playgroud)

use*_*660 39

有许多有效的vimeo URL.很少有例子

所有有效的网址:

http://vimeo.com/6701902
http://vimeo.com/670190233
http://player.vimeo.com/video/67019023
http://player.vimeo.com/video/6701902
http://player.vimeo.com/video/67019022?title=0&byline=0&portrait=0
http://player.vimeo.com/video/6719022?title=0&byline=0&portrait=0
http://vimeo.com/channels/vimeogirls/6701902
http://vimeo.com/channels/vimeogirls/67019023
http://vimeo.com/channels/staffpicks/67019026
http://vimeo.com/15414122
http://vimeo.com/channels/vimeogirls/66882931
Run Code Online (Sandbox Code Playgroud)

所有无效网址:

http://vimeo.com/videoschool
http://vimeo.com/videoschool/archive/behind_the_scenes
http://vimeo.com/forums/screening_room
http://vimeo.com/forums/screening_room/topic:42708
Run Code Online (Sandbox Code Playgroud)

我写了这个java正则表达式,它捕获了所有上述有效的URL并拒绝了无效的URL.我不确定他们是否有更多有效的URL.

(https?://)?(www.)?(player.)?vimeo.com/([a-z]*/)*([0-9]{6,11})[?]?.*
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...

  • 为了使这个友好的PHP的preg_match,我只是转义正斜杠和点:`'/(https?:\ /\/)?(www \.)?(播放器\.)?vimeo\.com\/([ AZ]*\/)*([0-9] {6,11})[?]?*/"` (16认同)
  • 我回顾了那些从vimeo获取ID的解决方案,以及youtube和dailymotion,这里:https://github.com/lingtalfi/video-ids-and-thumbnails/blob/master/testvideo.php. (2认同)

Wou*_*r J 30

我认为使用parse_url()是最好的选择:

$vimeo = 'https://vimeo.com/29474908';

echo (int) substr(parse_url($vimeo, PHP_URL_PATH), 1);
Run Code Online (Sandbox Code Playgroud)


zec*_*ude 22

对于那些想要看到使用PHP完全实现的代码的人,我使用的是user2200660提供的正则表达式,并由Morgan Delaney格式化为PHP,这里是:

$vimeo = 'http://player.vimeo.com/video/67019023';

if(preg_match("/(https?:\/\/)?(www\.)?(player\.)?vimeo\.com\/([a-z]*\/)*([0-9]{6,11})[?]?.*/", $vimeo, $output_array)) {
    echo "Vimeo ID: $output_array[5]";
}

//outputs: Vimeo ID: 67019023
Run Code Online (Sandbox Code Playgroud)


Das*_*ron 12

[编辑]您现在可以通过API完成所有操作!

如果您通过"links"参数向搜索端点(https://developer.vimeo.com/api/endpoints/videos#GET/videos)提供逗号分隔的Vimeo网址列表,我们会将这些视频作为API响应返回.

例如

GET https://api.vimeo.com/videos?links=https://vimeo.com/74648232,https://vimeo.com/232323497
Run Code Online (Sandbox Code Playgroud)

[原版的]

Vimeo提供了许多不同类型的视频网址,其中一些不包含id.为了确保所有Vimeo网址的支持,您应该直接向vimeo索取ID.

您可以通过oEmbed端点询问vimeo.

有很多选项,但最简单的选择是向URL发出HTTP GET请求https://vimeo.com/api/oembed.json?url={vimeo_url},替换{vimeo_url}为相应的URL.

例如,要获取上面提供的URL(https://vimeo.com/29474908)的ID,发出HTTP GET请求

https://vimeo.com/api/oembed.json?url=https://vimeo.com/29474908

解析JSON响应,并获取video_id参数.


小智 5

这应该从各种 vimeo url 中检索 ID。

$url = 'https://vimeo.com/cool/29474908?title=0&byline=0&portrait=0';
$urlParts = explode("/", parse_url($url, PHP_URL_PATH));
$videoId = (int)$urlParts[count($urlParts)-1];
Run Code Online (Sandbox Code Playgroud)


Rap*_*nah 5

当前有效的正则表达式:

function getIdFromVimeoURL(url) {
  return /(vimeo(pro)?\.com)\/(?:[^\d]+)?(\d+)\??(.*)?$/.exec(url)[3];
}

console.log(getIdFromVimeoURL("https://vimeo.com/channels/staffpicks/272053388"))
console.log(getIdFromVimeoURL("https://vimeo.com/272053388"))
console.log(getIdFromVimeoURL("https://player.vimeo.com/video/272053388"))

// ...etc.
Run Code Online (Sandbox Code Playgroud)