1

好的,这是一个有趣的。

在将复制和粘贴的 Vimeo URL 输入到输入框中时,我需要弄清楚用户引用的是什么来源。对于那些不熟悉的人,Vimeo 目前有 4 个不同的来源,可通过其简单的 API 访问:

属于用户的视频

有效的 URL 结构:http: //vimeo.com/user3825208https://vimeo.com/davekiss

属于某个组的视频

有效的 URL 结构:http: //vimeo.com/groups/eos550dhttps://vimeo.com/groups/162

属于某个频道的视频

有效的 URL 结构:http: //vimeo.com/channels/hdhttps://vimeo.com/channels/201

属于相册的视频

有效的 URL 结构:http: //vimeo.com/album/1919683https://vimeo.com/album/mycustomname

所以基本上,我希望能够将 URL 运行到一个函数中,该函数将告诉我 URL 属于哪个源。

我一直将它用于属于用户的视频,但现在我需要扩展到所有来源。

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

也许我应该这样做四次?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;
}

以下将返回一个数组,带有一个 indexid和另一个 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 回答