現在のプロジェクトに as3 を使用しています。ログイン、Twitter への投稿ステータスは既に完了しています。しかし、update_with_media に問題があります。これが私のプログラムの流れです。別の画面では CaptureWebcam と呼ばれ、ユーザーは Web カメラから写真をキャプチャできますが、ユーザーのコンピューターに保存することはできません。また、ユーザーが Twitter 画面への共有を開いた場合、ログインするためのポップアップが表示され、CaptureWebcam 画面からの画像が Twitter 画面に渡され、アップロードの準備ができて投稿に失敗しました...コードの何が問題なのかわかりません
ここに私のコードがあります、私はiotashanライブラリを使用しています
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);
}