/ Published in: ActionScript 3
An example of getting and updating a status with the Twitter API and OAuth for the BlackBerry PlayBook and ActionScript 3.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.HTTPStatusEvent; import flash.events.MouseEvent; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.net.URLVariables; import flash.net.navigateToURL; import flash.text.Font; import flash.text.TextField; import flash.text.TextFieldType; import flash.text.TextFormat; import flash.text.TextFormatAlign; import org.iotashan.oauth.OAuthConsumer; import org.iotashan.oauth.OAuthRequest; import org.iotashan.oauth.OAuthSignatureMethod_HMAC_SHA1; import org.iotashan.oauth.OAuthToken; import org.iotashan.utils.OAuthUtil; import org.iotashan.utils.URLEncoding; import qnx.ui.buttons.LabelButton; import qnx.ui.core.Container; import qnx.ui.core.ContainerAlign; import qnx.ui.core.ContainerFlow; import qnx.ui.core.Containment; import qnx.ui.core.SizeMode; import qnx.ui.core.SizeUnit; import qnx.ui.core.Spacer; import qnx.ui.data.DataProvider; import qnx.ui.listClasses.AlternatingCellRenderer; import qnx.ui.listClasses.List; import qnx.ui.text.Label; import qnx.ui.text.TextInput; public class PlayBookOauthDemo extends Sprite { // Static variables for OAuth private static var CONSUMER_SECRET:String = "<YOUR CONSUMER SECRET>"; private static var CONSUMER_KEY:String = "<YOUR CONSUMER KEY>"; private static var REQUEST_TOKEN_URL:String = "https://api.twitter.com/oauth/request_token"; private static var ACCESS_TOKEN_URL:String = "https://api.twitter.com/oauth/access_token"; private static var AUTHORIZE_URL:String = "https://api.twitter.com/oauth/authorize"; private static var API_URL:String = "https://api.twitter.com"; private static var SIGNATURE:OAuthSignatureMethod_HMAC_SHA1 = new OAuthSignatureMethod_HMAC_SHA1(); // Consumers and Request objects for making calls private var _consumer:OAuthConsumer; private var _authRequest:OAuthRequest; private var _accessRequest:OAuthRequest; // Tokens for passing information back and forth private var _requestToken:OAuthToken; private var _accessToken:OAuthToken; // Containers to hold the UI objects private var _loginContainer:Container; private var _authContainer:Container; private var _verifyContainer:Container; private var _mainContainer:Container; private var _spacer:Spacer = new Spacer(50); // PIN and Twitter text fields private var text:TextField; private var twitterTextField:TextField; public function PlayBookOauthDemo() { super(); // support autoOrients stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; init(); } protected function init():void { // creating the consumer and the authRequest based on the info from Twitter _consumer = new OAuthConsumer(CONSUMER_KEY,CONSUMER_SECRET); _authRequest = new OAuthRequest(OAuthRequest.HTTP_MEHTOD_GET,REQUEST_TOKEN_URL,null,_consumer); _loginContainer = new Container(); _loginContainer.align = ContainerAlign.MID; var button:LabelButton = new LabelButton(); button.label = "Login to Twitter"; button.addEventListener(MouseEvent.CLICK,onClick); _loginContainer.addChild(_spacer); _loginContainer.addChild(button); _loginContainer.setSize(1024,600); addChild(_loginContainer); } protected function onClick(event:MouseEvent):void { // uses the buildRequest method of our authRequest to format it correctly var urlRequest:URLRequest = new URLRequest(_authRequest.buildRequest(SIGNATURE)); var loader:URLLoader = new URLLoader(urlRequest); loader.addEventListener(Event.COMPLETE,onRequestComplete); } protected function onRequestComplete(event:Event):void { // build our requestToken based on the response from Twitter _requestToken = OAuthUtil.getTokenFromResponse(event.currentTarget.data); _authContainer = new Container(); _authContainer.align = ContainerAlign.MID; var authBtn:LabelButton = new LabelButton(); authBtn.label = "Authorize this application"; authBtn.addEventListener(MouseEvent.CLICK,onAuthClick); _authContainer.addChild(_spacer); _authContainer.addChild(authBtn); _authContainer.setSize(1024,600); removeChild(_loginContainer); addChild(_authContainer); } protected function onAuthClick(event:MouseEvent):void { _verifyContainer = new Container(); _verifyContainer.align = ContainerAlign.MID; var label:Label = new Label(); label.text = "Enter the PIN from Twitter.com"; var font:TextFormat = new TextFormat(); font.align = TextFormatAlign.CENTER; font.bold = true; font.size = 24; text = new TextField(); text.type = TextFieldType.INPUT; text.border = true; text.width = 250; text.height = 30; text.defaultTextFormat = font; var getDataBtn:LabelButton = new LabelButton(); getDataBtn.label = "Get Tweets"; getDataBtn.addEventListener(MouseEvent.CLICK,onGetDataClick); _verifyContainer.addChild(_spacer); _verifyContainer.addChild(label); _verifyContainer.addChild(text); _verifyContainer.addChild(getDataBtn); _verifyContainer.setSize(1024,600); removeChild(_authContainer); addChild(_verifyContainer); // Use the key from the requestToken and send the user to Twitter // to Authorize our application var authRequest:URLRequest = new URLRequest('http://api.twitter.com/oauth/authorize?oauth_token='+_requestToken.key); navigateToURL(authRequest); } protected function onGetDataClick(event:MouseEvent):void { // The oauth_verifier is the PIN number the user entered var params:Object = new Object(); params.oauth_verifier = text.text; // Create the access request _accessRequest = new OAuthRequest(OAuthRequest.HTTP_MEHTOD_GET,ACCESS_TOKEN_URL,params,_consumer,_requestToken); var accessUrlRequest:URLRequest = new URLRequest(_accessRequest.buildRequest(SIGNATURE)); var accessLoader:URLLoader = new URLLoader(accessUrlRequest); accessLoader.addEventListener(Event.COMPLETE,onAccessRequestComplete); } protected function onAccessRequestComplete(event:Event):void { _accessToken = OAuthUtil.getTokenFromResponse(event.currentTarget.data); var mainRequest:OAuthRequest = new OAuthRequest(OAuthRequest.HTTP_MEHTOD_GET,API_URL+'/1/statuses/friends_timeline.xml',null,_consumer,_accessToken); var getStatusURLRequest:URLRequest = new URLRequest(mainRequest.buildRequest(SIGNATURE)); var getStatusLoader:URLLoader = new URLLoader(getStatusURLRequest); getStatusLoader.addEventListener(Event.COMPLETE,onStatusLoadComplete); } protected function onStatusLoadComplete(event:Event):void { _mainContainer = new Container(); _mainContainer.flow = ContainerFlow.HORIZONTAL; var sendTweetContainer:Container = new Container(25); sendTweetContainer.containment = Containment.DOCK_TOP; var font:TextFormat = new TextFormat(); font.align = TextFormatAlign.CENTER; font.bold = true; font.size = 24; twitterTextField = new TextField(); twitterTextField.type = TextFieldType.INPUT; twitterTextField.border = true; twitterTextField.width = 500; twitterTextField.height = 30; twitterTextField.defaultTextFormat = font; var tweetLabel:LabelButton = new LabelButton(); tweetLabel.label = "Tweet This"; tweetLabel.addEventListener(MouseEvent.CLICK,onTweetClick); sendTweetContainer.addChild(twitterTextField); sendTweetContainer.addChild(tweetLabel); // Code for parsing the XML from the response var xml:XML = new XML(event.currentTarget.data); var statusList:XMLList = xml.children(); var arr:Array = new Array(); for(var i:int=0;i<statusList.length();i++) { var obj:Object = new Object(); obj.label = statusList[i].user.name.toString() +': ' + statusList[i].text.toString(); arr.push(obj); } // Create the DataProvider out of the parsed data var dataProvider:DataProvider = new DataProvider(arr); var list:List = new List(); list.dataProvider = dataProvider; list.size = 100; list.sizeUnit = SizeUnit.PERCENT; list.setSkin(AlternatingCellRenderer); _mainContainer.addChild(list); _mainContainer.addChild(sendTweetContainer); _mainContainer.setSize(1024,600); removeChild(_verifyContainer); addChild(_mainContainer); } protected function onTweetClick(event:MouseEvent):void { var params:Object = new Object(); params.status = twitterTextField.text; // Use the same consuemr and accessToken to update the Status var tweetRequest:OAuthRequest = new OAuthRequest(OAuthRequest.HTTP_MEHTOD_POST,API_URL+'/1/statuses/update.json',params,_consumer,_accessToken); var setStatusURLRequest:URLRequest = new URLRequest(tweetRequest.buildRequest(SIGNATURE)); setStatusURLRequest.method = URLRequestMethod.POST; // use the replace function to strip out the status setStatusURLRequest.url = setStatusURLRequest.url.replace("&status=" + URLEncoding.encode(params.status),""); // Add the status as a URLVariable since it's a POST operation setStatusURLRequest.data = new URLVariables( "status=" + twitterTextField.text ); var setStatusLoader:URLLoader = new URLLoader(setStatusURLRequest); setStatusLoader.addEventListener(Event.COMPLETE,onSetStatusComplete); } protected function onSetStatusComplete(event:Event):void { // Show 'Status Updated' in the text field twitterTextField.text = "Status Updated"; } } }