Tuesday, 10 September 2013

Dealing with Twitter API 1.1 update_with_media ActionScript 3

Dealing with Twitter API 1.1 update_with_media ActionScript 3

i'm using as3 for my current project, login, post status to twitter is
already done.. but i have problem with update_with_media. Here's the flow
of my program. On other screen call it CaptureWebcam, user can capture pic
from webcam but can't save it to user computer. And if user open share to
twitter screen, there's popup to login and image from CaptureWebcam screen
passed to twitter screen, and ready to upload and it failed to post... i
don't know whats wrong with my code
here's my code, i'm using iotashan library
private function uploadImage(Image()):void {
var myEncoder:JPGEncoder = new JPGEncoder(80);
var urlLoader:URLLoader = new URLLoader();
var urlRequest:URLRequest;
var multipartLoader:MultipartURLLoader = new
MultipartURLLoader();
var urlHeader:URLRequestHeader = new URLRequestHeader();
var oAuth:OAuthRequest;
var consumer:OAuthConsumer;
var twitterRequestUrl:String;
var headerValue:String = "";
var auth_header:URLRequestHeader;
var param:Object;
var vid:Video;
//var bmp:Bitmap = new Bitmap();
var bitmapData:BitmapData = new
BitmapData(CaptureWebcam.vid.width, CaptureWebcam.vid.height,
true, 0xFFFFFF);
//var byteArray:ByteArray = myEncoder.encode(new Bitmap(new
Turtle()).bitmapData);
var byteArray:ByteArray = myEncoder.encode(bitmapData);
var drawRect:Rectangle = new Rectangle(0,0,image.width,
image.height);
bitmapData.draw(image, new Matrix(), null, null, drawRect, true);
trace("upload test");
//header create
twitterRequestUrl =
"https://api.twitter.com/1.1/statuses/update_with_media.json";
consumer = new OAuthConsumer(consumerKey, consumerSecret);
oAuth = new OAuthRequest(OAuthRequest.HTTP_MEHTOD_POST,
twitterRequestUrl, null, consumer, null);
urlRequest = new URLRequest(oAuth.buildRequest(new
OAuthSignatureMethod_HMAC_SHA1()));
//
/*
urlRequest = twitterRequestUrl;
urlRequest.contentType = 'multipart/form-data; boundary=' +
UploadPostHelper.getBoundary();
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = UploadPostHelper.getPostData(file, byteArray);
urlRequest.requestHeaders.push( new URLRequestHeader(
'Cache-Control', 'no-cache' ) );
urlLoader.dataFormat = URLLoaderDataFormat.BINARY
urlLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS,
onStatusDelivered);
urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS,
onStatusChanged);
urlLoader.addEventListener(Event.COMPLETE, handleUploadComplete);
urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onError);
urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
onError);
urlLoader.load(urlRequest);
*/
/*
multipartLoader.addEventListener(Event.COMPLETE,
handleUploadComplete);
multipartLoader.addEventListener(IOErrorEvent.IO_ERROR, onError);
multipartLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
onSequrityError);
multipartLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS,
onStatusDelivered);
*/
/*
headerValue = createHeaderValue(oAuth);
auth_header = new URLRequestHeader("Authorization", headerValue);
multipartLoader.requestHeaders.push(auth_header);
multipartLoader.addVariable("status" , "test");
multipartLoader.addFile(byteArray, 'image.jpg', 'media[]');
multipartLoader.load("https://api.twitter.com/1.1/statuses/update_with_media.json");
*/
var signedData:String = oauth.getSignedRequest(
URLRequestMethod.POST,
"https://upload.twitter.com/1/statuses/update_with_media.json",
null );
var authHeaderValue:String = createAuthorizationHeader( new
URLVariables( signedData ) );
// create multipart loader
var multipartLoader : MultipartURLLoader = new
MultipartURLLoader();
multipartLoader.addEventListener( Event.COMPLETE,
handleUploadComplete );
multipartLoader.addEventListener( IOErrorEvent.IO_ERROR,
onError );
multipartLoader.addEventListener(
SecurityErrorEvent.SECURITY_ERROR, onError );
// add headers
var auth_header : URLRequestHeader = new URLRequestHeader(
"Authorization", authHeaderValue );
multipartLoader.requestHeaders.push( auth_header );
// add requeried data
multipartLoader.addVariable( "status" , twitter_msg );
multipartLoader.addFile( byteArray, 'image.jpg', 'media[]');
// load
multipartLoader.load(
"https://upload.twitter.com/1/statuses/update_with_media.json"
);
}
private function createAuthorizationHeader( _requestParams : Object,
headerRealm : String = "" ) : String
{
var data:String = "";
data += "OAuth "
if ( headerRealm.length > 0)
data += "realm=\"" + headerRealm + "\", ";
for (var param : Object in _requestParams ) {
// if this is an oauth param, include it
if ( param.toString().indexOf("oauth") == 0){
data += param + "=\"" + encodeURIComponent( _requestParams[param])
+ "\", ";
}
}
return data.substr( 0, data.length - 2);
}

No comments:

Post a Comment