3

hereから取得した以下の関数を使用して、二重短縮 URL を拡張 URL に正常に変換できませんでした。

function doShortURLDecode($url) {
        $ch = @curl_init($url);
        @curl_setopt($ch, CURLOPT_HEADER, TRUE);
        @curl_setopt($ch, CURLOPT_NOBODY, TRUE);
        @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
        @curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        $response = @curl_exec($ch);
        preg_match('/Location: (.*)\n/', $response, $a);
        if (!isset($a[1])) return $url;
        return $a[1];
    }

取得した拡張 URL が、拡張 URL を含む短縮 URL であったため、問題が発生しました。

両方の URL 短縮サービスを通過した後、最終的な拡張 URL を取得するにはどうすればよいですか?

4

4 に答える 4

1

t.coJavaScript やリダイレクトを使用して HTML リダイレクトを使用するため、最初<meta>にコンテンツを取得する必要があります。次に、そこから URL を抽出しbit.lyて HTTP ヘッダー要求を実行し、最終的な場所を取得します。このメソッドは、サーバーで cURL を有効にすることに依存せず、すべてのネイティブ PHP5 関数を使用します。

テスト済みで動作しています!

function large_url($url) 
{
    $data = file_get_contents($url); // t.co uses HTML redirection
    $url = strtok(strstr($data, 'http://bit.ly/'), '"'); // grab bit.ly URL

    stream_context_set_default(array('http' => array('method' => 'HEAD')));
    $headers = get_headers($url, 1); // get HTTP headers

    return (isset($headers['Location'])) // check if Location header set
        ? $headers['Location'] // return Location header value
        : $url; // return bit.ly URL instead
}

// DEMO
$url = 'http://t.co/dd4b3kOz';
echo large_url($url);
于 2013-01-31T07:43:28.500 に答える
0

おそらく、単にCURLOPT_FOLLOWLOCATION= true を使用してから、リダイレクト先の最終的な URL を決定する必要があります。

于 2013-01-31T07:38:18.727 に答える