32

vimeoのURLからIDだけを取得しようとしています。これより簡単な方法はありますか?私が見るすべてのvimeoビデオのURLは常に次のとおりです。

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);
4

9 に答える 9

48

有効なvimeoURLはたくさんあります。いくつかの例は

すべての有効な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

すべての無効な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

上記の有効なURLをすべてキャッチし、無効なURLを拒否するこのJava正規表現を作成しました。vimeoにもっと有効なURLがあるかどうかはわかりません。

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

お役に立てれば...

于 2013-05-30T16:12:01.380 に答える
38

私は使用することparse_url()が最良の選択肢だと思います:

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

echo (int) substr(parse_url($vimeo, PHP_URL_PATH), 1);
于 2012-05-07T20:56:08.187 に答える
26

PHPを使用して完全に実装されたコードを確認したい方のために、user2200660によって提供され、MorganDelaneyによって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
于 2015-04-25T01:45:11.287 に答える
15

[編集]これで、すべてAPIを介して実行できます。

検索エンドポイント(https://developer.vimeo.com/api/endpoints/videos#GET/videos)への「リンク」パラメーターを介してVimeo URLのコンマ区切りリストを提供すると、それらのビデオがAPI応答として返されます。

例えば

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

[オリジナル]

Vimeoはさまざまな種類のビデオURLを提供しており、その一部にはIDが含まれていません。VimeoのすべてのURLで確実にサポートするには、vimeoに直接IDを要求する必要があります。

oEmbedエンドポイントを介してvimeoに問い合わせることができます。

多くのオプションがありますが、最も簡単なオプションは、URLに対してHTTP GETリクエストを作成し、適切なURLhttps://vimeo.com/api/oembed.json?url={vimeo_url}に置き換えることです。{vimeo_url}

たとえば、上記で指定したURL(https://vimeo.com/29474908)のIDを取得するには、次のURLにHTTPGETリクエストを送信します。

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

JSON応答を解析し、video_idパラメーターを取得します。

于 2015-12-01T18:45:00.780 に答える
5

これにより、すべての種類のvimeoURLから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];
于 2015-04-14T21:19:06.143 に答える
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.

于 2018-06-01T21:48:44.420 に答える
2

@ user2200660の回答に基づいてJavaScriptで誰かがそれを必要とする場合:

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];
    }
}
于 2015-12-24T09:30:25.500 に答える
0

Vimeo IDのみが必要な場合は、RegExp非キャプチャグループを使用できます。

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

于 2019-04-09T09:11:44.387 に答える
0

ここにはたくさんの良い答えがあります。具体的には@user2200660です。

https://stackoverflow.com/a/16841070/3850405

ただし、前の回答でサポートされていないユースケースは次のとおりです。

https://vimeo.com/showcase/7008490/video/407943692

それと他の例を処理できる正規表現:

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

https://regex101.com/r/p2Kldc/1/

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

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

PHPの元のサンプルコードの@zeckdudeへのクレジット。

https://stackoverflow.com/a/29860052/3850405

于 2021-01-22T13:16:15.687 に答える