【问题标题】:Determining the Vimeo source by URL (regex)通过 URL 确定 Vimeo 源(正则表达式)
【发布时间】:2012-07-03 11:30:32
【问题描述】:

好的,这是一个有趣的。

在将复制粘贴的 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);

感谢您的帮助!

【问题讨论】:

  • 显示你目前拥有的正则表达式
  • 我的方法是让用户告诉我他们在另一个下拉框(组、专辑、频道或用户名)中使用了什么,但我想简化它。我的正则表达式很差,但我之前得到了/^(http|https):\/\/(www\.)?vimeo\.com\/(clip\:)?(\d+).*$/ 处理单个剪辑。

标签: php regex vimeo


【解决方案1】:

你不需要正则表达式:

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,另一个索引为type,这将是以下之一:

  • user
  • album
  • channel
  • group

【讨论】:

  • 这需要我一点时间来测试,但我会回来报告的。感谢您的宝贵时间!
  • 两件事:我注意到要检查的 $url 的索引应该是 $url[1] 而不是 $url[0]。此外,如果用户省略了http://https://,则会失败。有什么方法可以解决这个问题吗?
  • @DaveKiss:你确定索引吗?您是否尝试过我使用array_filter 的最新版本?因为它应该是0...关于协议,你可以在parse_url调用之前做$url = sprintf('http://%s', preg_replace('~^https?://~i', '', $url));
  • @DaveKiss:关于协议,你也可以使用stackoverflow.com/a/2762083/89771
【解决方案2】:

我会 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...

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2021-02-02
    • 2023-03-17
    • 2013-02-24
    • 2019-07-26
    • 2020-10-12
    • 1970-01-01
    相关资源
    最近更新 更多