Как лучше всего в PHP или JS расширить сокращенные URL-адреса, такие как Bitly, Tinyurl, чтобы найти исходный URL-адрес? - PullRequest
2 голосов
/ 21 декабря 2010

Я использую API Twitter и Facewbook для извлечения сообщений, которые могут содержать сокращенные URL-адреса, с использованием служб типа bit.ly или TinyURL.Мне нужно выполнить расширение в реальном времени, чтобы получить исходный URL, а затем перетащить содержимое этого URL в мое приложение.

Ответы [ 4 ]

12 голосов
/ 21 декабря 2010

Вы можете использовать CURL, чтобы развернуть короткий URL.

Попробуйте это:

    function traceUrl($url, $hops = 0)
    {
        if ($hops == MAX_URL_HOPS)
        {
            throw new Exception('TOO_MANY_HOPS');
        }

        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_NOBODY, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        $r = curl_exec($ch);

        if (preg_match('/Location: (?P<url>.*)/i', $r, $match))
        {
            return traceUrl($match['url'], $hops + 1);
        }

        return rtrim($url);
    }

Вы можете использовать эту функцию, как и traceUrl('http://bit.ly/example'). Эта функция является рекурсивной в том смысле, что она даже найдет короткие URL-адреса, которые будут сокращены (если это когда-либо произойдет). Убедитесь, что вы установили постоянную MAX_URL_HOPS. Я использую define('MAX_URL_HOPS', 5);.

  • Christian
7 голосов
/ 21 декабря 2010

Вы можете просто использовать PHP и CURL для подключения к URL и получить параметр Location:

Вот что возвращается -

> $ curl -I http://bit.ly/2V6CFi
> HTTP/1.1 301 Moved Server:
> nginx/0.7.67 Date: Tue, 21 Dec 2010
> 01:58:47 GMT Content-Type: text/html;
> charset=utf-8 Connection: keep-alive
> Set-Cookie:
> _bit=4d1009d7-00298-02f7f-c6ac8fa8;domain=.bit.ly;expires=Sat
> Jun 18 21:58:47 2011;path=/; HttpOnly
> Cache-control: private; max-age=90
> Location: http://www.google.com/
> MIME-Version: 1.0

Content-Length: 284

Так что вы можете искатьпараметр Location в заголовке, чтобы увидеть, куда на самом деле идет страница страницы.

2 голосов
/ 05 января 2016

С nodejs вы можете использовать модуль request .

var request = require('request');
var shortUrl = 'the url that is shortened'
request({method: 'HEAD', url: shortUrl, followAllRedirects: true}, 
  function(err, response, body){
     console.log(response.request.href);
  })
0 голосов
/ 15 декабря 2011

Я нашел библиотеку php, которая делает именно это, это может быть полезно.Проверьте это: https://launchpad.net/longurl

...