Класс для работы с сервисами сокращения ссылок

Небольшой класс, возвращает сокращенную ссылку. Можно обращаться как напрямую к конкретному сервису, так и выбранному рандомно через Shorteners->any(). Есть возможность указать прокси.

Работает с

  1. bit.ly
  2. goo.gl
  3. is.gd
  4. tinyurl.com
  5. dlmn.org
  6. ndurl.com
  7. qr.cx
  8. gatorurl.com
  9. jmb.tw
  10. linkee.com
  11. mtny.mobi
  12. 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;
?>
5.00 avg. rating (90% score) - 1 vote

9 комментариев

  • А зачем вам в данном случае класс? Неймспейсов в PHP не предусмотрено разве?

    • Безумный Программист, я их не умею использовать ))

  • кроме bit.ly у владельцев сервиса есть домен j.mp, а на некотрых двигах можно и без их апи получать исходную ссылку. нужно просто добавить + в конце ссылки, перейти по ней и спарсить урл. например, http://bit.ly/dTIibn+

  • А нужны ли они вообще эти сокращения?

  • Алькор, нужны, например для сокрытия реферальных ссылок. Т.е. с помощью сокращалок можно их маскировать. Потом, например для твиттера, чтобы уложиться в 140 символов и т.д. Можно много всего придумать. Автору спасибо за интересное решение.

  • Круто. Отправляется в копилку полезных кодов. 🙂 Кстати, а если ко всем сервисам обратиться за короткой ссылкой, наблюдается ли после этого внимание ко ссылке ботов / людей? Ведь большинство сервисов шот-урл имеют и социальную часть.

  • Для сокрытия рефссылок самое то. Правда боязно — вдруг сервис такой закроется? Ведь они не монитизируются… На какие средства существуют? Вечнно так продолжаться не может.

    Может выгоднее создавать свои собственные сервисы?

    Alex, это дествительно полезный и нужный класс. Спасибо!
    Но я привык через пользовательствие функции творить… по старинке 🙂

  • Да и сейчас уже нет смыла маскировать реф.ссылки. Многие уже и не ходят по ним, видя сокращение. Разве что только для твиттера и подходят.
    Но все равно спасибо. Было интересно.

  • Рекомендую еще один сервис сокращения ссылок http://link.ac с возможность просматривать статистику по переходам, а также получит QR код ссылки.

css.php