/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

  1. package com.zehfernando.net.apis.bitly.services {
  2. import com.zehfernando.net.apis.bitly.events.BitLyEvent;
  3. import com.zehfernando.net.apis.bitly.BitLyConstants;
  4. import com.zehfernando.net.apis.bitly.data.BitLyShortURL;
  5. import com.zehfernando.utils.XMLUtils;
  6. import flash.events.Event;
  7. import flash.events.EventDispatcher;
  8. import flash.events.HTTPStatusEvent;
  9. import flash.events.IOErrorEvent;
  10. import flash.events.SecurityErrorEvent;
  11. import flash.net.URLLoader;
  12. import flash.net.URLRequest;
  13. import flash.net.URLRequestMethod;
  14. import flash.net.URLVariables;
  15. /**
  16. * @author zeh
  17. */
  18. public class BitLyShortenRequest extends EventDispatcher {
  19. // Properties
  20. public var login:String;
  21. public var apiKey:String;
  22. public var longURL:String;
  23. protected var loader:URLLoader;
  24. protected var _isLoading:Boolean;
  25. // ================================================================================================================
  26. // CONSTRUCTOR ----------------------------------------------------------------------------------------------------
  27. public function BitLyShortenRequest() {
  28. // TODO: must extend BasicServiceRequest!
  29. }
  30. // ================================================================================================================
  31. // PUBLIC INTERFACE -----------------------------------------------------------------------------------------------
  32. public function execute(): void {
  33. var req:URLRequest = new URLRequest();
  34. req.url = BitLyConstants.DOMAIN + BitLyConstants.SERVICE_SHORTEN;
  35. req.method = URLRequestMethod.GET;
  36. var vars:URLVariables = new URLVariables();
  37. vars["login"] = login;
  38. vars["apiKey"] = apiKey;
  39. vars["longUrl"] = longURL;
  40. vars["format"] = "xml";
  41. // http://code.google.com/p/bitly-api/wiki/ApiDocumentation
  42. // Missing: .domain, .x_login, .x_apiKey
  43. req.data = vars;
  44. loader = new URLLoader();
  45. loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHTTPStatus);
  46. loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
  47. loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
  48. loader.addEventListener(Event.COMPLETE, onComplete);
  49. // Event.OPEN, ProgressEvent.PROGRESS
  50. loader.load(req);
  51. }
  52. // ================================================================================================================
  53. // INTERNAL INTERFACE ---------------------------------------------------------------------------------------------
  54. protected function clearLoader(): void {
  55. loader.removeEventListener(Event.COMPLETE, onComplete);
  56. loader.removeEventListener(HTTPStatusEvent.HTTP_STATUS, onHTTPStatus);
  57. loader.removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
  58. loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
  59. loader = null;
  60. _isLoading = false;
  61. }
  62. // ================================================================================================================
  63. // EVENT INTERFACE ------------------------------------------------------------------------------------------------
  64. protected function onHTTPStatus(e:HTTPStatusEvent): void {
  65. // Useless: always gets 200?
  66. // trace ("--> bit.ly -> onHTTPStatus");
  67. // trace ("--> " + e.status);
  68. }
  69. protected function onSecurityError(e:SecurityErrorEvent): void {
  70. // trace ("--> bit.ly -> onSecurityError");
  71. dispatchEvent(new BitLyEvent(BitLyEvent.ERROR));
  72. clearLoader();
  73. }
  74. protected function onIOError(e:IOErrorEvent): void {
  75. // trace ("--> bit.ly -> onIOError");
  76. dispatchEvent(new BitLyEvent(BitLyEvent.ERROR));
  77. clearLoader();
  78. }
  79. protected function onComplete(e:Event): void {
  80. // trace ("--> bit.ly -> onComplete");
  81. var response:XML = new XML(loader.data);
  82. var statusTxt:String = XMLUtils.getNodeAsString(response, "status_txt", "");
  83. var statusCode:int = XMLUtils.getNodeAsInteger(response, "status_code", 0);
  84. var ble:BitLyEvent;
  85. if (statusCode == BitLyConstants.STATUS_CODE_SUCCESS) {
  86. var dataXML:XML = response.child("data")[0];
  87. var shortURL:BitLyShortURL = new BitLyShortURL();
  88. shortURL.url = XMLUtils.getNodeAsString(dataXML, "url");
  89. shortURL.hash = XMLUtils.getNodeAsString(dataXML, "hash");
  90. shortURL.globalHash = XMLUtils.getNodeAsString(dataXML, "global_hash");
  91. shortURL.longURL = XMLUtils.getNodeAsString(dataXML, "long_url");
  92. shortURL.newHash = XMLUtils.getNodeAsString(dataXML, "new_hash") == "1";
  93. ble = new BitLyEvent(BitLyEvent.SUCCESS, false, false, shortURL, statusCode, statusTxt);
  94. } else {
  95. ble = new BitLyEvent(BitLyEvent.ERROR, false, false, null, statusCode, statusTxt);
  96. }
  97. dispatchEvent(ble);
  98. clearLoader();
  99. }
  100. // ================================================================================================================
  101. // PUBLIC INTERFACE -----------------------------------------------------------------------------------------------
  102. public function dispose():void {
  103. if (_isLoading) {
  104. loader.close();
  105. clearLoader();
  106. }
  107. }
  108. }
  109. }