【问题标题】:How to get facebook video id by preg_match如何通过 preg_match 获取 facebook 视频 ID
【发布时间】:2015-09-22 10:15:31
【问题描述】:

我的用户复制任何视频 URL 并粘贴到我的网络输入表单中以提交视频。我使用 php preg_match 从 facebook/you-tube/yahoo/vimeo 的 URL 获取视频 ID。 但是没有 facebook,每个想法都可以正常工作。我无法获得任何 Facebook 视频 ID。

现在一天 facebook 使用不同类型的 url 来播放视频,例如:

  1. https://www.facebook.com/nikololok/videos/t.100000216422619/10153335471682286/?type=2

  2. https://www.facebook.com/nikololok/videos/10153335471682286/

  3. https://www.facebook.com/videos/10153335471682286/

请帮我从这些类型的网址中获取 Facebook 视频 ID 10153335471682286

我的作品:(

$y_video = "https://www.youtube.com/watch?v=N1rethmzohw";
$f_video = "https://www.facebook.com/nikololok/videos/t.100000216422619/10153335471682286/?type=2";
$v_video = "https://vimeo.com/groups/imotional/videos/131543976";

//For facebook
if ($f_video > ''){
    if (preg_match("/(?:.*)\/([0-9]*)/i", $f_video, $matches)) {
    print 'facebook: ' . $matches[1] . '<br />';
    }
}
//For youtube
if ($y_video > ''){
    if (preg_match("/(?:.*)v=([a-zA-Z0-9]*)/i", $y_video, $matches)) {
    print 'youtube: ' . $matches[1] . '<br />';
    }
}
//For vimeo
if ($v_video > ''){
    if (preg_match("/(?:.*)\/([0-9]*)/i", $v_video, $matches)) {
    print 'vimeo: ' . $matches[1] . '<br />';
    }
}

【问题讨论】:

  • 这是什么奇怪的情况($f_video &gt; '')
  • 是您的 URL 唯一可以使用的情况吗?如果是这样,我认为preg_match("~.*?/videos/(?:t.\d+/(\d+)|(\d+))~i", $f_video, $matches); 应该这样做。演示:regex101.com/r/dB0yX4/1
  • @Casimir et Hippolyte $f_video = mysqli_real_escape_string($db, $_POST['f_video']);
  • @chris85 它适用于第一种类型的 URL,但不适用于上述第二种类型的 URL
  • 如果您将t\.\d+ 部分设为可选,则您可以拥有相同的组:/videos/(?&gt;t\.\d+/)?(\d+)

标签: php preg-match


【解决方案1】:

这是我的答案:

<?php
$videos = array('https://www.facebook.com/nikololok/videos/t.100000216422619/10153335471682286/?type=2', 'https://www.facebook.com/nikololok/videos/10153335471682286/', 'https://www.facebook.com/videos/10153335471682286/);');
foreach($videos as $f_video){
    preg_match("~/videos/(?:t\.\d+/)?(\d+)~i", $f_video, $matches);
    print_r($matches);
}

我将分隔符更改为 ~,因此 URL 中的 / 不需要转义。

这是 regex101 链接,https://regex101.com/r/qN8hK8/1,它将为您详细描述 regex 的作用。如果您有任何问题,请发布。

【讨论】:

  • 谢谢先生。我是 preg_match 的新手。所以我花时间来解决你的问题。在这里我忘了说,如果我的用户只发布上述任何一种类型的 URL,我只想获取 ID。
  • 不适用于https://www.facebook.com/something/videos/vb.100001360760001/1371428966245002/?type=2&amp;video_source=user_video_tab
【解决方案2】:
<?php

    $f_video = "https://www.facebook.com/lshokeenfilms/videos/1668437920119681/";
    $y_video = "https://www.youtube.com/watch?v=N1rethmzohw";
    $v_video = "https://vimeo.com/groups/imotional/videos/131543976";

    //For facebook
    if ($f_video > ''){
       if (preg_match("~(?:t\.\d+/)?(\d+)~i", $f_video, $matches)) {
       print 'facebook: ' . $matches[1] . '<br />';
       }
    }
    //For youtube
    if ($y_video > ''){
       if (preg_match("/(?:.*)v=([a-zA-Z0-9]*)/i", $y_video, $matches)) {
       print 'youtube: ' . $matches[1] . '<br />';
       }
    }
    //For vimeo
    if ($v_video > ''){
       if (preg_match("/(?:.*)\/([0-9]*)/i", $v_video, $matches)) {
       print 'vimeo: ' . $matches[1] . '<br />';
       }
    }

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    相关资源
    最近更新 更多