2012-05-07 39 views
20

Tôi đang cố gắng lấy id từ URL vimeo. Có một cách đơn giản hơn này? Tất cả các url phim vimeo tôi thấy luôn:Cách dễ dàng để lấy id Vimeo từ url 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); 

Trả lời

21

Tôi nghĩ rằng sử dụng parse_url() là lựa chọn tốt nhất:

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

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

Lưu ý: Câu trả lời này không còn giá trị, và không bao gồm vấn đề bổ sung kết hợp với chế độ riêng tư "chưa niêm yết". Vui lòng xem http://stackoverflow.com/a/34027757/1886079 để có giải pháp chứng minh toàn diện, trong tương lai. – Dashron

33

Có rất nhiều nhiều URL vimeo rằng có giá trị. Vài ví dụ là

Tất cả các URL hợp lệ:

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 

Tất cả các URL không hợp lệ:

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 

tôi đã viết regex java này mà bắt tất cả các URL hợp lệ trên và từ chối những cái không hợp lệ. Tôi không chắc chắn nếu họ vimeo có URL hợp lệ hơn.

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

Hope this helps ...

+14

Để làm cho điều này thân thiện với preg_match của PHP, tôi chỉ đơn giản là thoát khỏi dấu gạch chéo và dấu chấm: ''/ (https?: \/\ /)? (Www \.)? (Player \.)? Vimeo \ .com \/([az] * \ /) * ([0-9] {6,11}) [?]?. */'' –

+2

Tôi đã thực hiện một bản tóm tắt các giải pháp đó để lấy id từ vimeo, và cả youtube và dailymotion, tại đây : https://github.com/lingtalfi/video-ids-and-thumbnails/blob/master/testvideo.php. – ling

+0

ví dụ trực tuyến: https://regex101.com/r/7NAAd0/2 –

1

này phải truy lục ID từ tất cả các loại của các 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

Đối với những người bạn của những người muốn xem mã thực hiện đầy đủ sử dụng PHP, Tôi đang sử dụng regex được cung cấp bởi user2200660 và định dạng cho PHP bởi Morgan Delaney, ở đây nó là:

$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

Lưu ý: Regex này không còn hợp lệ và không bao gồm các vấn đề khác liên quan đến chế độ riêng tư "không công bố". Vui lòng xem https://stackoverflow.com/a/34027757/1886079 để có giải pháp chứng minh toàn diện, trong tương lai. – Dashron

11

[Chỉnh sửa] Bây giờ bạn có thể thực hiện việc này thông qua API!

Nếu bạn cung cấp danh sách được phân tách bằng dấu phẩy cho các url Vimeo của bạn thông qua tham số "liên kết" tới điểm cuối tìm kiếm (https://developer.vimeo.com/api/endpoints/videos#GET/videos), chúng tôi sẽ trả về các video đó dưới dạng phản hồi API.

ví dụ:

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

[Original]

Vimeo cung cấp nhiều loại khác nhau của các url video, một số trong đó không bao gồm id. Để đảm bảo hỗ trợ trên tất cả các url của Vimeo, bạn nên hỏi vimeo trực tiếp cho ID.

Bạn có thể yêu cầu vimeo qua số oEmbed endpoint.

Có nhiều tùy chọn, nhưng tùy chọn dễ nhất là thực hiện yêu cầu HTTP GET tới url https://vimeo.com/api/oembed.json?url={vimeo_url}, thay thế {vimeo_url} bằng url thích hợp.

Ví dụ, để có được ID của url mà bạn cung cấp trên (https://vimeo.com/29474908) thực hiện một yêu cầu HTTP GET để

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

Phân tích các phản ứng JSON, và lấy các thông số video_id.

+0

Giải pháp bằng chứng trong tương lai tuyệt vời xứng đáng với yêu cầu bổ sung cho Vimeo. Thnx! – JurgenR

+0

Gần đây, chúng tôi đã phát hành một cách tốt hơn để giải quyết vấn đề này. Kiểm tra chỉnh sửa! – Dashron

1

Nếu ai đó cần nó trong JavaScript dựa trên @ user2200660 câu trả lời:

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]; 
    } 
} 
Các vấn đề liên quan