Video uploads via REST API for Twitter is available in january but no with Fabric framework: link!
Great answer, had some fun converting it into swift, took me a while so here is it for anyone else having the same issue:
var video: NSData!
let strUploadUrl = "https://upload.twitter.com/1.1/media/upload.json"
let strStatusUrl = "https://api.twitter.com/1.1/statuses/update.json"
func postVideo() {
var client = Twitter.sharedInstance().APIClient
var text: String = "Testing Video"
var videoLength: String = "\(self.video.length)"
var mediaID: String = ""
var initError: NSError?
var message = ["status": text, "command" : "INIT", "media_type" : "video/m4v", "total_bytes" : videoLength]
var preparedRequest: NSURLRequest = client.URLRequestWithMethod("POST", URL: self.strUploadUrl, parameters: message, error: &initError)
client.sendTwitterRequest(preparedRequest, completion: { (urlResponse: NSURLResponse?, responseData: NSData?, error: NSError?) -> Void in
if error == nil {
var jsonError: NSError?
var json: NSDictionary = (NSJSONSerialization.JSONObjectWithData(responseData!, options: nil, error: &jsonError) as? NSDictionary)!
println(json)
var mediaID = json.objectForKey("media_id_string") as! String
client = Twitter.sharedInstance().APIClient
var uploadError: NSError?
var videoString = self.video.base64EncodedStringWithOptions(nil)
message = ["command" : "APPEND", "media_id" : mediaID, "segment_index" : "0", "media" : videoString]
var preparedRequest = client.URLRequestWithMethod("POST", URL: self.strUploadUrl, parameters: message, error: &uploadError)
client.sendTwitterRequest(preparedRequest, completion: { (urlResponse: NSURLResponse?, responseData: NSData?, error: NSError?) -> Void in
if error == nil {
client = Twitter.sharedInstance().APIClient
var finalizeError: NSError?
message = ["command":"FINALIZE", "media_id": mediaID]
var preparedRequest = client.URLRequestWithMethod("POST", URL: self.strUploadUrl, parameters: message, error: &finalizeError)
client.sendTwitterRequest(preparedRequest, completion: { (urlResponse: NSURLResponse?, responseData: NSData?, error: NSError?) -> Void in
if error == nil {
client = Twitter.sharedInstance().APIClient
var sendError: NSError?
var message = ["status": text, "wrap_links": "true", "media_ids": mediaID]
var updateMessage = NSMutableDictionary(dictionary: message)
var preparedRequest = client.URLRequestWithMethod("POST", URL: self.strStatusUrl, parameters: message , error: &sendError)
client.sendTwitterRequest(preparedRequest, completion: { (urlResponse: NSURLResponse?, responseData: NSData?, error: NSError?) -> Void in
})
} else {
println("Command FINALIZE failed \n \(error!)")
}
})
} else {
println("Command APPEND failed")
}
})
} else {
println("Command INIT failed")
}
})
}