1

さて、これは楽しいものです。

コピーして貼り付けた Vimeo URL を入力ボックスに入力するときに、ユーザーが参照しているソースを把握する必要があります。なじみのない方のために説明すると、Vimeo には現在、シンプルな API を介してアクセスできる 4 つの異なるソースがあります。

ユーザーに属する動画

有効な URL 構造: http://vimeo.com/user3825208またはhttps://vimeo.com/davekiss

グループに属する動画

有効な URL 構造: http://vimeo.com/groups/eos550dまたはhttps://vimeo.com/groups/162

チャンネルに属する動画

有効な URL 構造: http://vimeo.com/channels/hdまたはhttps://vimeo.com/channels/201

アルバムに属するビデオ

有効な URL 構造: http://vimeo.com/album/1919683またはhttps://vimeo.com/album/mycustomname

したがって、基本的には、URL がどのソースに属するかを教えてくれる関数に URL を実行できるようにしたいと考えています。

ユーザーに属するビデオにこれを使用してきましたが、すべてのソースに展開する必要があります。

sscanf(parse_url($url, PHP_URL_PATH), '/%d', $video_id);

これを4回やればいいのでは?preg_match('???', $url);

ご協力いただきありがとうございます!

4

2 に答える 2

3

正規表現は必要ありません:

function discoverVimeo($url)
{
    if ((($url = parse_url($url)) !== false) && (preg_match('~vimeo[.]com$~', $url['host']) > 0))
    {
        $url = array_filter(explode('/', $url['path']), 'strlen');

        if (in_array($url[0], array('album', 'channels', 'groups')) !== true)
        {
            array_unshift($url, 'users');
        }

        return array('type' => rtrim(array_shift($url), 's'), 'id' => array_shift($url));
    }

    return false;
}

id以下は、次のいずれかになる indexと別の indexを持つ配列を返しますtype

  • user
  • album
  • channel
  • group
于 2012-07-03T03:43:17.910 に答える
1

次の正規表現パターンを (この順序で) preg_match() します。

$channel_regex = '%vimeo\.com/channels/([a-zA-Z0-9]+)%/i';
$group_regex = '%vimeo\.com/groups/([a-zA-Z0-9]+)%/i';
$album_regex = '%vimeo\.com/album/([a-zA-Z0-9]+)%/i';
$user_regex = '%vimeo\.com/([a-zA-Z0-9]+)%/i';

これは次の正規表現に一致します。

vimeo.com/channels/...grab_this_data...
vimeo.com/groups/...grab_this_data...
vimeo.com/albums/...grab_this_data...

これらの preg_matches がすべて失敗した場合 (したがってユーザー URL)、URL にあるものは何でも取得します。

vimeo.com/...grab_this_data...

幸運を。

于 2012-07-03T03:33:22.123 に答える