【问题标题】:Get vine video id using php使用 php 获取 vine 视频 id
【发布时间】:2013-06-21 14:20:15
【问题描述】:

我需要从 url 中获取 vine 视频 id

所以链接的输出是这样的

https://vine.co/v/bXidIgMnIPJ

像这样

bXidIgMnIPJ

我尝试在此处为 Vimeo 使用其他问题的代码 (NOT VINE) Get img thumbnails from Vimeo?

这是我尝试使用但我没有成功

$url = 'https://vine.co/v/bXidIgMnIPJ';

preg_replace('~^https://(?:www\.)?vine\.co/(?:clip:)?(\d+)~','$1',$url)

【问题讨论】:

  • 正则表达式太过分了。您只需要最后一个斜线之后的所有内容。
  • 当然,如果您不需要验证链接是否正确

标签: php


【解决方案1】:

这是我正在使用的:

function getVineId($url) {
  preg_match("#(?<=vine.co/v/)[0-9A-Za-z]+#", $url, $matches);
  if (isset($matches[0])) {
    return $matches[0];
  }
  return false;
}

我使用look-behind 来确保“vine.co/v/”始终位于 ID 之前,同时忽略 url 是 HTTP 还是 HTTPS(或者它完全没有协议)。它假定 ID 是任意长度的字母数字。它将忽略 id 之后的任何字符或参数(如 Google 广告系列跟踪参数等)。

我使用了"#" delimiter,这样我就不必转义正斜杠 (/),以获得更清晰的外观。

【讨论】:

    【解决方案2】:
    $url = 'https://vine.co/v/b2PFre2auF5';
    $regex = '/^http(?:s?):\/\/(?:www\.)?vine\.co\/v\/([a-zA-Z0-9]{1,13})$/';
    preg_match($regex,$url,$m);
    print_r($m);
    
    1. b2PFre2auF5
    

    【讨论】:

      【解决方案3】:

      这里提到的问题是preg_replace的解决方案:

      $s = 'https://vine.co/v/bXidIgMnIPJ';
      $new_s = preg_replace('/^.*\//','',$s);
      echo $new_s;
      // => bXidIgMnIPJ
      

      或者如果您需要验证输入字符串确实是 vine.co 的链接:

      $new_s = preg_replace('/^(https?:\/\/)?(www\.)?vine\.co.*\//','',$s);
      

      我不知道 /v/ 部分是否始终存在,还是始终存在 v... 如果是,那么它也可以添加到正则表达式以进行更严格的验证:

      $new_s = preg_replace('/^(https?:\/\/)?(www\.)?vine\.co\/v\//','',$s);
      

      【讨论】:

        【解决方案4】:

        basename 可能吗?

        <?php
        $url = 'https://vine.co/v/bXidIgMnIPJ';
        var_dump(basename($url));    
        

        http://codepad.org/vZiFP27y

        【讨论】:

        • 对不起,如果我的问题很愚蠢,为什么输出不只是视频 ID?
        • 我只是使用 var_dump 来显示 basename 函数的结果。你可以只说$id = basename($url);,你就会有这个ID。
        • 您指的是输出中额外的string(11)...etc 吗?那是来自 var_dump。 var_dump 将转储一些有关变量的信息。在这种情况下,变量是一个“字符串”,长度为“11”个字符,值为“bXidIgMnIPJ”。 var_dump 是一种非常有用的输出变量数据的方法。如果字符串为空,则 echo 或 print 将不输出任何内容。 var_dump 实际上会说 string(0) "" 这告诉我更多。 var_dump 也适用于所有变量类型(布尔、对象、数组...等)。
        • 谢谢你,祝你一切顺利:)
        【解决方案5】:

        假设它总是采用这种格式,您可以用/ 分隔符分割网址。像这样的简单网址不需要正则表达式。

        $id = end(explode('/', $url));
        

        【讨论】:

          【解决方案6】:

          用'/'分解字符串,最后一个字符串就是你要找的:)代码:

          $vars = explode("/",$url);
          echo $vars[count($vars)-1];
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-01-11
            • 1970-01-01
            • 2015-06-04
            • 1970-01-01
            • 2020-11-05
            • 1970-01-01
            • 2011-11-05
            • 2012-04-15
            相关资源
            最近更新 更多