Небольшой класс, возвращает сокращенную ссылку. Можно обращаться как напрямую к конкретному сервису, так и выбранному рандомно через Shorteners->any(). Есть возможность указать прокси.
Работает с
- bit.ly
- goo.gl
- is.gd
- tinyurl.com
- dlmn.org
- ndurl.com
- qr.cx
- gatorurl.com
- jmb.tw
- linkee.com
- mtny.mobi
- cli.gs
<?php error_reporting(1); class Shorteners { public $proxy = null; public function bitly($url) { $connectURL = 'http://api.bit.ly/v3/shorten?login=masstest&apiKey=R_44403eb439622dd59ba2598255f30824&uri=' . urlencode($url) . '&format=txt'; return $this->curl_get_result($connectURL, NULL); } public function googl($url) { $connectURL = 'http://goo.gl/api/shorten'; $post_fields = "security_token=null&url=" . urlencode($url); $res = $this->curl_get_result($connectURL, $post_fields); $obj = json_decode($res); $ans = (!empty($res)) ? $obj->{'short_url'} : false; return $ans; } public function isgd($url) { $connectURL = 'http://is.gd/api.php?longurl=' . urlencode($url); return $this->curl_get_result($connectURL, NULL); } public function tinyurl($url) { $connectURL = 'http://tinyurl.com/api-create.php?url=' . urlencode($url); return $this->curl_get_result($connectURL, NULL); } public function dlmn($url) { $connectURL = 'http://dlmn.org/submit/?url=' . urlencode($url) . '&ajax=false'; $page = $this->curl_get_result($connectURL, NULL); preg_match("/<input id=\"dlmn-loc\" value=\"(.*?)\"/si", $page, $out); if (strlen($out[1]) < 3) { return false; } else { $answer = (empty($out[1])) ? false : "http://" . $out[1]; return $answer; } } public function crum($url) { $connectURL = 'http://crum.bs/api.php?function=simpleshorten&url=' . urlencode($url); return $this->curl_get_result($connectURL, NULL); } public function ndurl($url) { $connectURL = 'http://www.ndurl.com/api.generate/?url=' . urlencode($url) . '&type=web'; $res = $this->curl_get_result($connectURL, NULL); $obj = json_decode(stripslashes($res)); $obj = $obj->data; $ans = (!empty($res)) ? $obj->{'shortURL'} : false; return $ans; } public function qr($url) { $connectURL = 'http://qr.cx/api/?longurl=' . urlencode($url); return $this->curl_get_result($connectURL, NULL); } public function gatorurl($url) { $connectURL = 'http://gatorurl.com/api/rest.php?url=' . urlencode($url); return $this->curl_get_result($connectURL, NULL); } public function jmb($url) { $connectURL = 'http://jmb.tw/api/create/?newurl=' . urlencode($url); return $this->curl_get_result($connectURL, NULL); } public function linkee($url) { $connectURL = 'http://api.linkee.com/1.0/shorten?input=' . urlencode($url); $res = $this->curl_get_result($connectURL, NULL); $obj = json_decode($res); $ans = (!empty($res)) ? $obj->{'result'} : false; return $ans; } public function mtny($url) { $connectURL = 'http://mtny.mobi/api/?url=' . urlencode($url) . '&ismobile=false&type=simple'; return $this->curl_get_result($connectURL, NULL); } public function cligs($url) { $connectURL = 'http://cli.gs/cligs/new'; $post = "URL=" . urlencode($url); $page = $this->curl_get_result($connectURL, $post); preg_match("/Your new clig has been created/si", $page, $out); if (strlen($out[0]) < 3) { return false; } else { preg_match("#http://twitter.com/home\?status=(.*?)\"#si", $page, $out); $answer = (empty($out[1])) ? false : $out[1]; return $answer; } } public function any($url) { $func = get_class_methods($this); $sh = $func[array_rand($func, 1)]; return $this->$sh($url, NULL); } private function curl_get_result($url, $postdata) { $ch = curl_init(); $timeout = 5; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); if (isset($postdata)) { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); } if ($this->proxy) { //var_dump( $this->proxy ); curl_setopt($ch, CURLOPT_PROXY, $this->proxy); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, "60"); curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); curl_setopt($ch, CURLOPT_TIMEOUT, "60"); } else { curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, "30"); curl_setopt($ch, CURLOPT_TIMEOUT, "30"); } $data = curl_exec($ch); curl_close($ch); return trim($data); } } $test = new Shorteners(); $url = "http://rambler.ru"; $class_methods = get_class_methods('Shorteners'); foreach ($class_methods as $method): echo $test->$method . "\r\n"; endforeach; ?>
9 комментариев
А зачем вам в данном случае класс? Неймспейсов в PHP не предусмотрено разве?
Безумный Программист, я их не умею использовать ))
кроме bit.ly у владельцев сервиса есть домен j.mp, а на некотрых двигах можно и без их апи получать исходную ссылку. нужно просто добавить + в конце ссылки, перейти по ней и спарсить урл. например, http://bit.ly/dTIibn+
А нужны ли они вообще эти сокращения?
Алькор, нужны, например для сокрытия реферальных ссылок. Т.е. с помощью сокращалок можно их маскировать. Потом, например для твиттера, чтобы уложиться в 140 символов и т.д. Можно много всего придумать. Автору спасибо за интересное решение.
Круто. Отправляется в копилку полезных кодов. 🙂 Кстати, а если ко всем сервисам обратиться за короткой ссылкой, наблюдается ли после этого внимание ко ссылке ботов / людей? Ведь большинство сервисов шот-урл имеют и социальную часть.
Для сокрытия рефссылок самое то. Правда боязно — вдруг сервис такой закроется? Ведь они не монитизируются… На какие средства существуют? Вечнно так продолжаться не может.
Может выгоднее создавать свои собственные сервисы?
Alex, это дествительно полезный и нужный класс. Спасибо!
Но я привык через пользовательствие функции творить… по старинке 🙂
Да и сейчас уже нет смыла маскировать реф.ссылки. Многие уже и не ходят по ним, видя сокращение. Разве что только для твиттера и подходят.
Но все равно спасибо. Было интересно.
Рекомендую еще один сервис сокращения ссылок http://link.ac с возможность просматривать статистику по переходам, а также получит QR код ссылки.