解决方法
根据
documentation需要通过命令进行3个呼叫:INIT,APPEND和FINALIZE.
- -(void) shareOnTwitterWithVideo:(NSDictionary*) params{
- NSString *text = params[@"text"];
- NSData* dataVideo = params[@"video"];
- NSString *lengthVideo = [NSString stringWithFormat:@"%d",[params[@"length"] intValue]];
- NSString* url = @"https://upload.twitter.com/1.1/media/upload.json";
- __block NSString *mediaID;
- if([[Twitter sharedInstance] session]){
- TWTRAPIClient *client = [[Twitter sharedInstance] APIClient];
- NSError *error;
- // First call with command INIT
- NSDictionary *message = @{ @"status":text,@"command":@"INIT",@"media_type":@"video/mp4",@"total_bytes":lengthVideo};
- NSURLRequest *preparedRequest = [client URLRequestWithMethod:@"POST" URL:url parameters:message error:&error];
- [client sendTwitterRequest:preparedRequest completion:^(NSURLResponse *urlResponse,NSData *responseData,NSError *error){
- if(!error){
- NSError *jsonError;
- NSDictionary *json = [NSJSONSerialization
- JSONObjectWithData:responseData
- options:0
- error:&jsonError];
- mediaID = [json objectForKey:@"media_id_string"];
- client = [[Twitter sharedInstance] APIClient];
- NSError *error;
- NSString *videoString = [dataVideo base64EncodedStringWithOptions:0];
- // Second call with command APPEND
- message = @{@"command" : @"APPEND",@"media_id" : mediaID,@"segment_index" : @"0",@"media" : videoString};
- NSURLRequest *preparedRequest = [client URLRequestWithMethod:@"POST" URL:url parameters:message error:&error];
- [client sendTwitterRequest:preparedRequest completion:^(NSURLResponse *urlResponse,NSError *error){
- if(!error){
- client = [[Twitter sharedInstance] APIClient];
- NSError *error;
- // Third call with command FINALIZE
- message = @{@"command" : @"FINALIZE",@"media_id" : mediaID};
- NSURLRequest *preparedRequest = [client URLRequestWithMethod:@"POST" URL:url parameters:message error:&error];
- [client sendTwitterRequest:preparedRequest completion:^(NSURLResponse *urlResponse,NSError *error){
- if(!error){
- client = [[Twitter sharedInstance] APIClient];
- NSError *error;
- // publish video with status
- NSString *url = @"https://api.twitter.com/1.1/statuses/update.json";
- NSMutableDictionary *message = [[NSMutableDictionary alloc] initWithObjectsAndKeys:text,@"status",@"true",@"wrap_links",mediaID,@"media_ids",nil];
- NSURLRequest *preparedRequest = [client URLRequestWithMethod:@"POST" URL:url parameters:message error:&error];
- [client sendTwitterRequest:preparedRequest completion:^(NSURLResponse *urlResponse,NSError *error){
- if(!error){
- NSError *jsonError;
- NSDictionary *json = [NSJSONSerialization
- JSONObjectWithData:responseData
- options:0
- error:&jsonError];
- NSLog(@"%@",json);
- }else{
- NSLog(@"Error: %@",error);
- }
- }];
- }else{
- NSLog(@"Error command FINALIZE: %@",error);
- }
- }];
- }else{
- NSLog(@"Error command APPEND: %@",error);
- }
- }];
- }else{
- NSLog(@"Error command INIT: %@",error);
- }
- }];
- }
- }