is possible share video using slrequest ?
i'm able share images using same
slrequest *postrequest = [slrequest requestforservicetype:slservicetypetwitter requestmethod:slrequestmethodpost url:requesturl parameters:message]; if (isimage) { nsdata *data = uiimagepngrepresentation(imgselected); [postrequest addmultipartdata:data withname:@"media" type:@"image/png" filename:@"testimage.png"]; } postrequest.account = account; [postrequest performrequestwithhandler:^(nsdata *responsedata, nshttpurlresponse *urlresponse, nserror *error) { if (!error) { nslog(@"upload sucess !"); } }];
i have been reading through twitter video upload api documentation , pretty simple. need make 3 post requests api. video uploading limited 15 mb in size.
uploads using endpoint require @ least 3 calls, 1 initialize request, returns media_id, 1 or more calls append/upload binary or base64 encoded data, , 1 last call finalize upload , make media_id usable other resources.
so works this:
request 1: send init request video size in bytes. return media id number have use in request 2 , 3.
request 2: use returned media id number request 1 upload video data.
request 3: once video upload has finished, send "finalize" request twitter api. lets twitter api know chunks of video file has finished uploading.
note twitter api accepts video uploads in "chunks". if video file quite big, may want split more 1 file , have repeat "request 2" more once (not forgetting increment "segment_index" number each time).
i have had go @ coding below. try , experiment around it. update answer later on improve too.
-(void)imagepickercontroller:(uiimagepickercontroller *)picker didfinishpickingmediawithinfo:(nsdictionary *)info { // assign mediatype string nsstring *mediatype = [info objectforkey:uiimagepickercontrollermediatype]; // check media type string can determine if video if ([mediatype isequaltostring:@"public.movie"]) { nsurl *videourl = [info objectforkey:uiimagepickercontrollermediaurl]; nsdata *webdata = [nsdata datawithcontentsofurl:videourl]; // size of file in bytes. nsstring *yourpath = [nsstring stringwithformat:@"%", videourl]; nsfilemanager *man = [nsfilemanager defaultmanager]; nsdictionary *attrs = [man attributesofitematpath:yourpath error: null]; uint32 result = [attrs filesize]; //[self tweetvideostage1:webdata :result]; [self tweetvideo:webdata :result :1 :@"n/a"]; } } -(void)tweetvideo:(nsdata *)videodata :(int)videosize :(int)mode :(nsstring *)mediaid { nsurl *twittervideo = [nsurl urlwithstring:@"https://upload.twitter.com/1.1/media/upload.json"]; // set parameters first twitter video request. nsdictionary *postdict; if (mode == 1) { postdict = @{@"command": @"init", @"total_bytes" : videosize, @"media_type" : @"video/mp4"}; } else if (mode == 2) { postdict = @{@"command": @"append", @"media_id" : mediaid, @"segment_index" : @"0", @"media" : videodata }; } else if (mode == 3) { postdict = @{@"command": @"finalize", @"media_id" : mediaid }; } slrequest *postrequest = [slrequest requestforservicetype:slservicetypetwitter requestmethod:slrequestmethodpost url:requesturl:twittervideo parameters:postdict]; // set account , begin request. postrequest.account = account; [postrequest performrequestwithhandler:^(nsdata *responsedata, nshttpurlresponse *urlresponse, nserror *error) { if (!error) { if (mode == 1) { // parse returned data json string // contains media upload id. nsmutabledictionary *returneddata = [nsjsonserialization jsonobjectwithdata:responsedata options:nsjsonreadingmutablecontainers error:&error] nsstring *tweetid = [nsstring stringwithformat:@"%@", [returneddata valueforkey:@"media_id_string"]]; [self tweetvideo:videodata :result :2 :tweetid]; } else if (mode == 2) { [self tweetvideo:videodata :result :3 :mediaid]; } } else { nslog(@"error stage %d - %", mode, error); } }]; }
update - twitter api errors - https://dev.twitter.com/overview/api/response-codes
in answer first comment, error 503 means twitter servers overloaded , can't handle request right now.
503 service unavailable twitter servers up, overloaded requests. try again later.
Comments
Post a Comment