通过REST API for Twitter的视频上传在一月中可用,但不支持Fabric框架:
link!
link!
解决方法
根据
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);
}
}];
}
}