2012-05-07 9 views
20

Próbuję uzyskać tylko identyfikator z adresu URL vimeo. Czy istnieje prostszy sposób niż to? Wszystkie Vimeo URL wideo widzę zawsze:Łatwy sposób na uzyskanie identyfikatora Vimeo z adresu 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); 

Odpowiedz

21

myślę użyciu parse_url() jest najlepszym rozwiązaniem:

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

echo (int) substr(parse_url($vimeo, PHP_URL_PATH), 1); 
+0

Uwaga: Ta odpowiedź nie jest już ważny, i nie obejmuje dodatkowych problemów związanych z „zastrzeżony” trybie prywatności. Proszę zapoznać się z http://stackoverflow.com/a/34027757/1886079 dla dokładnego, przyszłościowego rozwiązania. – Dashron

33

Istnieje wiele wiele adresów URL Vimeo że są ważne. Kilka przykładów

Wszystkie ważne adresy:

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 

Wszystkie nieprawidłowe adresy URL:

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 

Napisałem ten java regex że łapie wszystkie powyższe ważne adresy i odrzuca te nieprawidłowe. Nie jestem jednak pewien, czy vimeo ma bardziej poprawne adresy URL.

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

Nadzieja to pomaga ...

+14

Aby było to przyjazne dla PHP preg_match, po prostu uciekłem z przednich ukośników i kropek: ''/ (https?: \/\ /)? (Www \.)? (Player \.)? Vimeo \ .pl \/([az] * \ /) * ([0-9] {6,11}) [?]?. */'' –

+2

Zrobiłem podsumowanie tych rozwiązań, aby uzyskać identyfikatory z Vimeo, a także youtube i dailymotion, tutaj : https://github.com/lingtalfi/video-ids-and-thumbnails/blob/master/testvideo.php. – ling

+0

przykład online: https://regex101.com/r/7NAAd0/2 –

1

Należy pobrać identyfikator ze wszystkich rodzajów 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]; 
18

Dla tych z Was, którzy chcą zobaczyć kod pełni realizowane za pomocą PHP, używam regex dostarczone przez user2200660 i sformatowanego dla PHP Morgan Delaney, to jest tutaj:

$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 
+0

Uwaga: To wyrażenie regularne nie jest już poprawne i nie obejmuje dodatkowych problemów związanych z trybem prywatności "niepubliczny". Zajrzyj na https://stackoverflow.com/a/34027757/1886079, aby uzyskać dokładne i przyszłościowe rozwiązanie. – Dashron

11

[Edytuj] Możesz teraz zrobić to wszystko za pośrednictwem interfejsu API!

Jeśli udostępnisz listę adresów URL Vimeo oddzieloną przecinkami za pomocą parametru "linki" do punktu końcowego wyszukiwania (https://developer.vimeo.com/api/endpoints/videos#GET/videos), zwrócimy te filmy jako odpowiedzi interfejsu API.

np.

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

[Original]

Vimeo zapewnia wiele różnego rodzaju adresów URL wideo, z których niektóre nie zawierają identyfikator. Aby zapewnić wsparcie dla wszystkich adresów URL Vimeo, powinieneś poprosić vimeo bezpośrednio o identyfikator.

Możesz poprosić vimeo za pośrednictwem oEmbed endpoint.

Istnieje wiele opcji, ale najprostszym rozwiązaniem jest, aby żądanie HTTP GET do URL https://vimeo.com/api/oembed.json?url={vimeo_url}, zastępując {vimeo_url} z odpowiedniego adresu URL.

Na przykład, aby uzyskać identyfikator adresu URL podany powyżej (https://vimeo.com/29474908) dokonanie żądania HTTP GET do

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

Przetwarza odpowiedź JSON, i chwycić parametr video_id.

+0

Ładne, przyszłościowe rozwiązanie, które jest warte dodatkowej prośby do Vimeo. Thnx! – JurgenR

+0

Niedawno wydaliśmy lepszy sposób rozwiązania tego problemu. Sprawdź edycję! – Dashron

1

Jeśli ktoś potrzebować go w JavaScript na podstawie @ user2200660 odpowiedź:

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]; 
    } 
}