好的,这是一个有趣的。
我需要弄清楚用户在输入副本并将Vimeo URL粘贴到输入框中时引用的来源。对于那些不熟悉的人,Vimeo 目前有 4 种不同的来源可以通过其简单的 API 访问:
属于用户的视频
有效的网址结构:http://vimeo.com/user3825208 或 https://vimeo.com/davekiss
属于群组的视频
有效的网址结构:http://vimeo.com/groups/eos550d 或 https://vimeo.com/groups/162
属于某个频道的视频
有效的网址结构:http://vimeo.com/channels/hd 或 https://vimeo.com/channels/201
属于相册的视频
有效的网址结构:http://vimeo.com/album/1919683 或 https://vimeo.com/album/mycustomname
所以基本上,我希望能够将URL运行到一个函数中,该函数将告诉我URL属于哪个来源。
我一直在将其用于属于用户的视频,但现在我需要扩展到所有来源。
sscanf(parse_url($url, PHP_URL_PATH), '/%d', $video_id);
也许我应该这样做四次? preg_match('???', $url);
感谢您的帮助!
你不需要正则表达式:
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
我会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...
祝你好运。