【问题标题】:Get a Tiny URL's real URL and store as PHP variable获取 Tiny URL 的真实 URL 并存储为 PHP 变量
【发布时间】:2013-10-02 22:36:28
【问题描述】:

我想获取一个 Youtube URL 的视频 ID,但是在分享的时候这个 URL 经常被压缩成一个 Tiny URL。

例如,我有一个脚本可以根据视频 ID 获取 Youtube 视频的缩略图 =

<?php $vlog = "OeqlkEymQ94"; ?>
<img src="http://img.youtube.com/vi/<?=$vlog;?>/0.jpg" alt="" />

当我从中提取的 URL 是

时,这很容易得到
http://www.youtube.com/watch?v=OeqlkEymQ94

但有时 URL 是一个很小的 ​​URL,所以我必须弄清楚如何返回真实的 URL 以便我可以使用它。

http://tinyurl.com/kmx9zt6

是否可以通过 PHP 检索 URL 的真实 URL?

【问题讨论】:

  • 您可以将 CURL 与 CURLOPT_FOLLOWLOCATION = TRUE 一起使用,然后解析响应头。
  • @Marcel,将其设置为 true 将使 cURL 自动遵循该重定向,并且仅传递最终结果 - 它应该为 false,以便您获得第一个请求的结果,该结果将包含响应中的位置标头……
  • 没错,但人们可能会争论这是否是想要的结果。对我来说,你会想要遵循所有的重定向,就像浏览器一样。虽然我明白你的意思。

标签: php url youtube


【解决方案1】:

您可以使用get_headers() 或cURL 来获取Location 标头:

function getFullURL($url) {
    $headers = get_headers($url);
    $headers = array_reverse($headers);
    foreach($headers as $header) {
        if (strpos($header, 'Location: ') === FALSE) {
            $url = str_replace('Location: ', '', $header);
            break;
        }
    }    
    return $url;
}

用法:

echo getFullURL('http://tinyurl.com/kmx9zt6');

注意:这是要点here 的略微修改版本。

【讨论】:

    【解决方案2】:

    为了将来参考,我使用了一个更简单的函数,因为我的 Tiny URL 总是会解析为 Youtube,并且标题几乎总是相同的:

    function getFullURL($url) {
        $headers = get_headers($url);
        $url = $headers[4]; //This is the location part of the array
        $url = str_replace('Location: ', '', $url);
        $url = str_replace('location: ', '', $url);  //in my case the location was lowercase, but it can't hurt to have both
        return $url;
    }
    

    用法-

    echo getFullURL('http://tinyurl.com/kmx9zt6');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 2014-02-02
      • 2011-07-18
      • 1970-01-01
      • 2019-06-25
      • 2012-07-27
      相关资源
      最近更新 更多