Я использую API Twitter и Facewbook для вывода сообщений, которые потенциально содержат сокращенные URL-адреса с использованием bit.ly или TinyURL-подобных сервисов. Мне нужно сделать в реальном времени расширение, чтобы получить исходный URL-адрес, затем потянуть контент из этого URL-адреса в мое приложение.
Вы можете использовать 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);
,
Вы можете просто использовать 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 в заголовке, чтобы увидеть, где страница страницы действительно идет.
С помощью nodejs вы можете использовать запрос модуля.
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); })
Я нашел php-библиотеку, которая делает именно это, это может быть полезно. Проверьте это: https://launchpad.net/longurl