Общая библиотека декодера URL сокращений для PHP

Существует ли какая-либо библиотека для PHP, которая может декодировать tinyurl, Goo.gl, bit.ly и другие URL-адреса, сокращенные по URL, без выполнения запросов CURL?

4 ответа

Решение

без отправки запросов CURL

  • нет

При сокращении URL-адреса созданные хэши не имеют отношения к сокращаемому URL-адресу, но представляют собой простой элегантный внутренний идентификатор базы данных.

Единственный способ получить местоположение URL-адреса - попросить сайт сокращения ссылок обработать запрос, а затем перехватить данные ответа. Единственный способ сделать это - установить связь с этим сайтом.

Если хеш для местоположения не является обратимым хешем длинного URL, другого способа сделать это не существует.

По крайней мере, bit.ly и TinyURL просто использует перенаправления HTTP.

Таким образом, вы можете просто получить заголовок ответа Location. Вы можете использовать грушу HTTP_Request2 например. Я не знаю, все ли службы используют этот метод, но он наиболее очевиден для использования...

Я не уверен, почему вы не хотите использовать curl. Вы говорите о curl в определенных или сетевых библиотеках в целом? Получение информации с веб-страницы без подключения к ней кажется мне довольно бессмысленным:-)

Это метод "минимальных усилий быстро и грязно", который не использует библиотеку... (Вы можете grep для Location header) ... Вы можете сделать то же самое, используя сокеты...

[~]% telnet tinyurl.com 80
Trying 64.62.243.89...
Connected to tinyurl.com.
Escape character is '^]'.
GET /69gb3gl HTTP/1.1             
Host: tinyurl.com

HTTP/1.1 301 Moved Permanently
X-Powered-By: PHP/5.3.6
Location: http://www.thinkwithportals.com/media_17.php
X-tiny: db 0.1608510017395
Content-type: text/html
Content-Length: 0
Connection: close
Date: Tue, 02 Aug 2011 00:45:59 GMT
Server: TinyURL/1.6

Connection closed by foreign host.


[~]% telnet bit.ly 80 
Trying 168.143.172.53...
Connected to bit.ly.
Escape character is '^]'.
GET /nm0ZIh HTTP/1.1
Host: bit.ly

HTTP/1.1 301 Moved
Server: nginx
Date: Tue, 02 Aug 2011 00:47:12 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Set-Cookie: _bit=4e374910-002c2-05b82-d5ac8fa8;domain=.bit.ly;expires=Sat Jan 28 19:47:12 2012;path=/; HttpOnly
Cache-control: private; max-age=90
Location: http://richarddawkins.net/videos/642324-iq2-shorts-stephen-fry-vs-ann-widdecombe-catholic-church-debate
MIME-Version: 1.0
Content-Length: 195

Нет, это невозможно Я создал небольшой пакет функций, который работает на большинстве хостов.

<?php
class url{
        function get_location_header($url){
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_HEADER, true);
                curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
                curl_setopt($ch, CURLOPT_NOBODY, true);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_TIMEOUT, 3);
                $response = curl_exec ($ch);
                curl_close ($ch);
                preg_match("~(http://.*)~", $response, $match);
                return $match[0];
        }

        function cache_save($file, $content){
                $f = fopen('cache/'.$file, 'w+');
                fwrite($f, $content);
                fclose($f);
        }

        function long_url($short_url){
                $patterns = array('goo\.gl', 'tinyurl\.com', 'bit\.ly');
                $header = $this->get_location_header($short_url);
                if ($header){
                        $long_url = $header;
                        return $long_url;
                }
        }
}

$url = new url();
echo $url->long_url('http://goo.gl/0A3kH').'<br />';
echo $url->long_url('http://tinyurl.com/5b2su2').'<br />';
echo $url->long_url('http://bit.ly/4Agih5');

это с curl, но это не возможно сделать без CURL/ сети

Если у вас нет собственной копии базы данных службы поддержки, вы должны сделать какой-то запрос. Если не к самому сокращенному URL, то к некоторому API сервиса. Ну, на самом деле, запрос короткого URL-адреса и получение заголовка перенаправления технически API, я полагаю.

Так что я бы сказал, брось это. Не следите за перенаправлениями и убедитесь, что вы установили cURL для возврата заголовков (потому что больше ничего нет). Вы ищете Location: .... заголовок

Другие вопросы по тегам