1

我希望有人可以帮助我解决这个小问题..?

我正在使用 Google 快讯将突发新闻故事拉到网站上,不幸的是,当我尝试找到原始网址(在 Google 快讯之前)时,我得到的只是一个 Google 网址,如下所示;

http://www.google.com/url?sa=X&q=

http://www.source.com/2013/04/02/title.html

&ct=ga&cad=CAcQARgAIAAoATAAOABArOXtigVIAlAAWABiBWVuLVVT&cd=ZQHHhnCXS8w&usg=AFQjCNGGGZgSyC3KvMJUW0ICYsCtRZ2uJA

我已将此网址分解为相关部分以使其更易于理解,第 1 部分始终完全相同,但第 2 和第 3 部分确实发生了变化。然而,第三部分总是以 &ct= 开头,我认为它是查询的一部分..?

在我正在使用的脚本中,整个 url 被分配为 $link 并且如果可能的话,我想做的是从 Google Alerts url 中提取原始源 url,以便归属于它应该去的地方而不是去中间那个人!

我的 php 知识非常基础,因此我们将不胜感激。

谢谢

4

1 回答 1

0

您可以使用这个函数,它基本上采用起始 URL,跟踪所有重定向并返回最后一个有效 URL。

/**
 * Get target url from a redirect
 *
 * @param string $url Source url
 * @return string
 */

function getLastEffectiveUrl($url) {

    // initialize cURL
    $curl = curl_init($url);
    curl_setopt_array($curl, array(
        CURLOPT_RETURNTRANSFER  => true,
        CURLOPT_FOLLOWLOCATION  => true,
    ));

    // execute the request
    $result = curl_exec($curl);

    // fail if the request was not successful
    if ($result === false) {
        curl_close($curl);
        return null;
    }

    // extract the target url
    $redirectUrl = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);
    curl_close($curl);

        return $redirectUrl;
    }

用法很简单。如果我们想获取 Mark Zuckerberg 的个人资料图片的最后一个有效 URL,我们可以这样调用该函数:

    $lastEffectiveUrl = getLastEffectiveUrl('http://graph.facebook.com/4/picture');

调用后的值$lastEffectiveUrl将是预期的:

    'http://profile.ak.fbcdn.net/hprofile-ak-snc4/157340_4_3955636_q.jpg';

所有的功劳都归功于写这篇文章的人,我只是做了一点挖掘:从给定 URL 的一系列重定向中获取最后一个有效 URL

于 2013-04-03T02:33:23.337 回答