web-dev-qa-db-fra.com

Un moyen facile d'obtenir l'identifiant Vimeo à partir d'une URL Vimeo

J'essaye d'obtenir juste l'ID d'une URL vimeo. Existe-t-il un moyen plus simple que cela? Toutes les URL vidéo vimeo que je vois sont toujours:

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);
26
Wakenn

Je pense que l'utilisation de parse_url() est la meilleure option:

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

echo (int) substr(parse_url($vimeo, PHP_URL_PATH), 1);
31
Wouter J

Il existe de nombreuses URL vimeo qui sont valides. Peu d'exemples sont

Toutes les URL valides:

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

Toutes les URL non valides:

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

J'ai écrit ceci Java regex qui attrape toutes les URL valides ci-dessus et rejette les non valides. Je ne sais pas si elles vimeo a plus d'URL valides.

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

J'espère que cela t'aides...

40
user2200660

Pour ceux d'entre vous qui veulent voir le code entièrement implémenté en PHP, j'utilise l'expression régulière fournie par user2200660 et formatée pour PHP par Morgan Delaney, la voici:

$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
23
zeckdude

[Modifier] Vous pouvez maintenant tout faire via l'API!

Si vous fournissez une liste séparée par des virgules de vos URL Vimeo via le paramètre "links" au point de terminaison de la recherche ( https://developer.vimeo.com/api/endpoints/videos#GET/videos ) nous renverra ces vidéos sous forme de réponses API.

par exemple.

GET https://api.vimeo.com/videos?links=https://vimeo.com/74648232,https://vimeo.com/232323497

[Original]

Vimeo fournit de nombreux types d'URL vidéo, dont certains n'incluent pas l'ID. Pour garantir la prise en charge de toutes les URL de Vimeo, vous devez demander directement à vimeo l'ID.

Vous pouvez demander à vimeo via oEmbed endpoint .

Il existe de nombreuses options, mais l'option la plus simple consiste à faire une requête HTTP GET à l'url https://vimeo.com/api/oembed.json?url={vimeo_url}, en remplaçant {vimeo_url} avec l'URL appropriée.

Par exemple, pour obtenir l'ID de l'URL que vous avez fournie ci-dessus ( https://vimeo.com/29474908 ), effectuez une demande HTTP GET pour

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

Analysez la réponse JSON et récupérez le video_id paramètre.

13
Dashron

Cela devrait récupérer l'ID de toutes sortes d'URL vimeo.

$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];
4
Steve

Une expression rationnelle actuelle et fonctionnelle:

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.
2

Si quelqu'un en a besoin en JavaScript basé sur @ user2200660, répondez:

function getVimeoVideoId(url){

    var regex = new RegExp(/(https?:\/\/)?(www.)?(player.)?vimeo.com\/([a-z]*\/)*([0-9]{6,11})[?]?.*/);

    if ( regex.test(url) ) {
        return regex.exec(url)[5];
    }
}
1
Roy Shoa

Si vous n'avez besoin que de l'ID Vimeo, vous pouvez utiliser les groupes non capturants RegExp:

(?:https?:\/\/)?(?:www\.)?vimeo\.com\/(?:(?:[a-z0-9]*\/)*\/?)?([0-9]+)