php - 在 PHP 中使用 RegEx 从 URL 获取 Facebook 视频 ID 的多种变体

标签 php regex facebook facebook-graph-api video

这个问题已经在 Stack Overflow 上被问过很多次了,我也看了很多次,但我找到的所有答案都只能找到 Facebook URL 的一种变体,但我需要确保你可以使用可以使用的任何变体。

  • https://www.facebook.com/username2/videos/100000000000000
  • http://www.facebook.com/photo.php?v=107084586333124
  • http://www.facebook.com/photo.php?more=difficult&v=107084586333124
  • http://www.facebook.com/?v=107084586333124

这是我目前得到的结果,但它并不像我预期的那样有效, https://regex101.com/r/sC6oR2/6

^https?://www.facebook.com/(\?v=\d+)|(.*?/videos/(\d+))$

我不太熟悉 RegEx,但在四处搜索时,我试图充分利用它。我也研究过使用 parse_url() 并且我听说它会比 RegEx 更好,但是因为 Facebook 有许多不同类型的 URL:s。

我非常感谢对此提供一些帮助,因为我一天中的大部分时间都在努力让它工作,当我让一个部分工作时,我却没有得到另一个 - 它让我轻微的头痛

最佳答案

<?php

/**
* Get video id from any facebook video URL
* funcion by Mohamed Elbahja
*/
 function fbvideoid($url) {
    // delete space in url
    $url =  str_replace(' ', '', $url);
    // parse url
    $pars = parse_url($url);
    $path = $pars['path'];

    // delete end slashe
    if($path[strlen($path) - 1] == '/'):
        $path = rtrim($path, '/');
    endif;

    $count = count(explode("/", $path));
    // type url
    $urltype = "";
    if ($pars['path'] == "/photo.php" || $pars['path'] == "/video.php" || $pars['path'] == "/"):
        $urltype = 2;
    elseif($count == 4):
      $urltype = 3;
    elseif($count == 5):
        $urltype = 1;
    endif;

   // get id
    if ($urltype == 1) {

        $ex = explode("/", $path);
        $videoid = $ex[4];

    } else if ($urltype == 2) {

        parse_str($pars['query'], $e);
        $videoid = $e['v'];

    } else if ($urltype == 3) {

        $ex = explode("/", $path);
        $videoid = $ex[3];

    } else {
        $videoid = null;
    }

   return $videoid;
}

    // example :) 

echo fbvideoid('https://www.facebook.com/username2/videos/107084586333124'); 

echo "<br>";

echo fbvideoid('http://www.facebook.com/photo.php?v=107084586333124');

echo "<br>";

echo fbvideoid('http://www.facebook.com/photo.php?more=diffictult&v=107084586333124');

echo "<br>";

echo fbvideoid('http://www.facebook.com/?v=107084586333124');

echo "<br>";

echo fbvideoid('http://www.facebook.com/video.php?v=107084586333124');

echo "<br>";

echo fbvideoid('https://www.facebook.com/LovehelloU/videos/vb.172573132808153/107084586333124/?type=2&theater');

关于php - 在 PHP 中使用 RegEx 从 URL 获取 Facebook 视频 ID 的多种变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31323555/

相关文章:

php - 出现 fatal error : Call to undefined method

javascript - 如何使用javascript递归替换单个正则表达式中文本字符串中的重复逗号

regex - 使用查询参数限制对URL的访问

jquery - 添加 Facebook 点赞按钮

facebook - 如何使用 yesod-auth-fb 从 Facebook 登录获取用户的电子邮件地址?

php - CakePHP 中调试和代码完成的最佳 IDE

php - 内容中显示的 html 标签

php - MySQL 表结构的拇指 UP 和 DOWN 评论系统?

regex - 从R中的字符串中提取特定模式(4位数字, '-',1位数字)

Firefox : "Couldn' t parse invalid source chrome-extension"中的 Facebook JS API 初始化错误