Hi guys,
I wasnât able to find a proper documentation on how to post a video to twitter in swift from an iOS app. I canât believe there is no relevant documentation because Twitter focuses so much on video sharing today. Also on stack overflow did not fin relevant up to date answers.
This is what Iâve been trying to do but does not workâŠ
func postVideo() {
Twitter.sharedInstance().logInWithCompletion { session, error in
if (session != nil) {
print("signed in as \(session!.userName)");
} else {
print("error: \(error!.localizedDescription)");
}
}
if let userID = Twitter.sharedInstance().sessionStore.session()?.userID {
var client = TWTRAPIClient(userID: userID)
let text: String = "Testing Video"
let videoLength: String = "\(self.video.length)"
print(videoLength)
var initError: NSError?
var message = ["status": text, "command" : "INIT", "media_type" : "video/mp4", "total_bytes" : videoLength]
let 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 {
do {
//var jsonError: NSError?
let json: NSDictionary = try (NSJSONSerialization.JSONObjectWithData(responseData!, options: NSJSONReadingOptions(rawValue: 0)) as? NSDictionary)!
print("JSON is \(json)")
let mediaID = json.objectForKey("media_id_string") as! String
client = TWTRAPIClient(userID: userID)
var uploadError: NSError?
let videoString = self.video.base64EncodedStringWithOptions(NSDataBase64EncodingOptions([]))
print("message is \(message)")
message = ["command" : "APPEND", "media_id" : mediaID, "segment_index" : "0", "media" : videoString]
//print("message is \(message)")
let 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 = TWTRAPIClient(userID: userID)
var finalizeError: NSError?
message = ["command":"FINALIZE", "media_id": mediaID]
let 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 = TWTRAPIClient(userID: userID)
var sendError: NSError?
message = ["status": text, "wrap_links": "true", "media_ids": mediaID]
let preparedRequest = client.URLRequestWithMethod("POST", URL: self.strStatusUrl, parameters: message, error: &sendError)
client.sendTwitterRequest(preparedRequest, completion: { (urlResponse: NSURLResponse?, responseData: NSData?, error: NSError?) -> Void in
})
} else {
print("Command FINALIZE failed \n \(error!)")
}
})
} else {
print("Command APPEND failed")
}
})
}
catch {
print("\(error)")
}
}
else {
print("\(error.debugDescription)Command INIT failed")
}
})
}
}
I would like to address this issue with twitter so if you agree with me that it lacks information about posting video to twitter please let me know. I thought Fabric was meant to make things easy for us!