classes

URLShorten.as

Stiahnuť URLShorten.as

package sk.yoz.net
{
    import com.adobe.serialization.json.JSON;
    
    import flash.events.Event;
    import flash.net.URLRequest;
    import flash.net.URLRequestMethod;
    import flash.net.URLVariables;
    
    import sk.yoz.events.URLShortenEvent;
    
    public class URLShorten extends Object
    {
        public function URLShorten()
        {
            super();
        }
        
        private static function prepare(request:URLRequest, 
            data:Object, callback:Function, completeHandler:Function=null)
            :URLLoaderDynamic
        {
            var loader:URLLoaderDynamic = new URLLoaderDynamic();
            var handler:Function = completeHandler || complete;
            
            request.data = data;
            loader.callback = callback;
            loader.load(request);
            loader.addEventListener(Event.COMPLETE, handler);
            return loader;
        }
        
        private static function complete(event:Event):void
        {
            var loader:URLLoaderDynamic = URLLoaderDynamic(event.target);
            var url:String = String(loader.data);
            
            loader.removeEventListener(Event.COMPLETE, complete);
            dispatch(url, loader)
        }
        
        private static function dispatch(url:String, loader:URLLoaderDynamic)
            :void
        {
            var callback:Function = loader.callback;
            var type:String = URLShortenEvent.COMPLETE;
            
            if(callback != null)
                callback(url);
            loader.dispatchEvent(new URLShortenEvent(type, false, false, url));
        }
        
        public static function jdemcz(longUrl:String, callback:Function=null)
            :URLLoaderDynamic
        {
            var apiUrl:String = "http://www.jdem.cz/get";
            var request:URLRequest = new URLRequest(apiUrl);
            var variables:URLVariables = new URLVariables();
            
            variables.url = longUrl;
            return prepare(request, variables, callback);
        }
        
        public static function tinyurlcom(longUrl:String, 
            callback:Function=null):URLLoaderDynamic
        {
            var apiUrl:String = "http://tinyurl.com/api-create.php";
            var request:URLRequest = new URLRequest(apiUrl);
            var variables:URLVariables = new URLVariables();
            
            variables.url = longUrl;
            return prepare(request, variables, callback);
        }
        
        public static function bitly(longUrl:String, login:String, 
            apiKey:String, version:String="2.0.1", callback:Function=null)
            :URLLoaderDynamic
        {
            var apiUrl:String = "http://api.bit.ly/shorten";
            var request:URLRequest = new URLRequest(apiUrl);
            var variables:URLVariables = new URLVariables();
            
            variables.version = version;
            variables.longUrl = longUrl;
            variables.login = login;
            variables.apiKey = apiKey;
            return prepare(request, variables, callback, bitlyComplete);
        }
        
        private static function bitlyComplete(event:Event):void
        {
            var loader:URLLoaderDynamic = URLLoaderDynamic(event.target);
            var result:String = String(loader.data);
            var data:Object = JSON.decode(result);
            var url:String;
            
            loader.removeEventListener(Event.COMPLETE, bitlyComplete);
            for each(var resultItem:Object in data.results)
                url = resultItem.shortUrl;
            dispatch(url, loader);
        }
        
        public static function trim(longUrl:String, 
            callback:Function=null):URLLoaderDynamic
        {
            var apiUrl:String = "http://api.tr.im/v1/trim_simple";
            var request:URLRequest = new URLRequest(apiUrl);
            var variables:URLVariables = new URLVariables();
            
            variables.url = longUrl;
            return prepare(request, variables, callback);
        }
        
        public static function isgd(longUrl:String, 
            callback:Function=null):URLLoaderDynamic
        {
            var apiUrl:String = "http://is.gd/api.php";
            var request:URLRequest = new URLRequest(apiUrl);
            var variables:URLVariables = new URLVariables();
            
            variables.longurl = longUrl;
            return prepare(request, variables, callback);
        }
        
        public static function googl(longUrl:String,
            callback:Function=null):URLLoaderDynamic
        {
            var apiUrl:String = 
                "https://www.googleapis.com/urlshortener/v1/url";
            var request:URLRequest = new URLRequest(apiUrl);
            var data:String = '{"longUrl": "' + longUrl + '"}';
            
            request.method = URLRequestMethod.POST;
            request.contentType = "application/json";
            return prepare(request, data, callback, googlComplete);
        }
        
        private static function googlComplete(event:Event):void
        {
            var loader:URLLoaderDynamic = URLLoaderDynamic(event.target);
            var result:String = String(loader.data);
            var data:Object = JSON.decode(result);
            var url:String = data.id;
            
            loader.removeEventListener(Event.COMPLETE, googlComplete);
            dispatch(url, loader);
        }
    }
}