/com/zehfernando/net/apis/bitly/services/BitLyShortenRequest.as
https://github.com/duponce/as3 · ActionScript · 141 lines · 85 code · 32 blank · 24 comment · 5 complexity · 60deb708f84d74a07700221ce965c467 MD5 · raw file
- package com.zehfernando.net.apis.bitly.services {
- import com.zehfernando.net.apis.bitly.events.BitLyEvent;
- import com.zehfernando.net.apis.bitly.BitLyConstants;
- import com.zehfernando.net.apis.bitly.data.BitLyShortURL;
- import com.zehfernando.utils.XMLUtils;
- import flash.events.Event;
- import flash.events.EventDispatcher;
- import flash.events.HTTPStatusEvent;
- import flash.events.IOErrorEvent;
- import flash.events.SecurityErrorEvent;
- import flash.net.URLLoader;
- import flash.net.URLRequest;
- import flash.net.URLRequestMethod;
- import flash.net.URLVariables;
- /**
- * @author zeh
- */
- public class BitLyShortenRequest extends EventDispatcher {
-
- // Properties
- public var login:String;
- public var apiKey:String;
- public var longURL:String;
-
- protected var loader:URLLoader;
-
- protected var _isLoading:Boolean;
-
- // ================================================================================================================
- // CONSTRUCTOR ----------------------------------------------------------------------------------------------------
- public function BitLyShortenRequest() {
- // TODO: must extend BasicServiceRequest!
- }
- // ================================================================================================================
- // PUBLIC INTERFACE -----------------------------------------------------------------------------------------------
- public function execute(): void {
-
- var req:URLRequest = new URLRequest();
-
- req.url = BitLyConstants.DOMAIN + BitLyConstants.SERVICE_SHORTEN;
- req.method = URLRequestMethod.GET;
- var vars:URLVariables = new URLVariables();
-
- vars["login"] = login;
- vars["apiKey"] = apiKey;
- vars["longUrl"] = longURL;
- vars["format"] = "xml";
-
- // http://code.google.com/p/bitly-api/wiki/ApiDocumentation
- // Missing: .domain, .x_login, .x_apiKey
-
- req.data = vars;
-
- loader = new URLLoader();
- loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHTTPStatus);
- loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
- loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
- loader.addEventListener(Event.COMPLETE, onComplete);
- // Event.OPEN, ProgressEvent.PROGRESS
- loader.load(req);
- }
- // ================================================================================================================
- // INTERNAL INTERFACE ---------------------------------------------------------------------------------------------
- protected function clearLoader(): void {
- loader.removeEventListener(Event.COMPLETE, onComplete);
- loader.removeEventListener(HTTPStatusEvent.HTTP_STATUS, onHTTPStatus);
- loader.removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
- loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
- loader = null;
- _isLoading = false;
- }
- // ================================================================================================================
- // EVENT INTERFACE ------------------------------------------------------------------------------------------------
- protected function onHTTPStatus(e:HTTPStatusEvent): void {
- // Useless: always gets 200?
- // trace ("--> bit.ly -> onHTTPStatus");
- // trace ("--> " + e.status);
- }
-
- protected function onSecurityError(e:SecurityErrorEvent): void {
- // trace ("--> bit.ly -> onSecurityError");
- dispatchEvent(new BitLyEvent(BitLyEvent.ERROR));
- clearLoader();
- }
-
- protected function onIOError(e:IOErrorEvent): void {
- // trace ("--> bit.ly -> onIOError");
- dispatchEvent(new BitLyEvent(BitLyEvent.ERROR));
- clearLoader();
- }
- protected function onComplete(e:Event): void {
- // trace ("--> bit.ly -> onComplete");
-
- var response:XML = new XML(loader.data);
-
- var statusTxt:String = XMLUtils.getNodeAsString(response, "status_txt", "");
- var statusCode:int = XMLUtils.getNodeAsInteger(response, "status_code", 0);
-
- var ble:BitLyEvent;
-
- if (statusCode == BitLyConstants.STATUS_CODE_SUCCESS) {
- var dataXML:XML = response.child("data")[0];
- var shortURL:BitLyShortURL = new BitLyShortURL();
- shortURL.url = XMLUtils.getNodeAsString(dataXML, "url");
- shortURL.hash = XMLUtils.getNodeAsString(dataXML, "hash");
- shortURL.globalHash = XMLUtils.getNodeAsString(dataXML, "global_hash");
- shortURL.longURL = XMLUtils.getNodeAsString(dataXML, "long_url");
- shortURL.newHash = XMLUtils.getNodeAsString(dataXML, "new_hash") == "1";
- ble = new BitLyEvent(BitLyEvent.SUCCESS, false, false, shortURL, statusCode, statusTxt);
- } else {
- ble = new BitLyEvent(BitLyEvent.ERROR, false, false, null, statusCode, statusTxt);
- }
-
- dispatchEvent(ble);
- clearLoader();
- }
- // ================================================================================================================
- // PUBLIC INTERFACE -----------------------------------------------------------------------------------------------
- public function dispose():void {
- if (_isLoading) {
- loader.close();
- clearLoader();
- }
- }
- }
- }