Skip to content

Instantly share code, notes, and snippets.

@cristibaluta
Created November 25, 2015 07:30
Show Gist options
  • Save cristibaluta/94361dcf32a9780db214 to your computer and use it in GitHub Desktop.
Save cristibaluta/94361dcf32a9780db214 to your computer and use it in GitHub Desktop.
Post image to twitter using only Parse for authentication and NSURLConnection
func post (tweetString: String, tweetImage: NSData) {
let uploadUrl = NSURL(string: "https://upload.twitter.com/1.1/media/upload.json")
let uploadRequest = NSMutableURLRequest(URL: uploadUrl!)
uploadRequest.HTTPMethod = "POST"
let stringBoundary = "---------------------------14737809831466499882746641449"
let contentType = "multipart/form-data; boundary=\(stringBoundary)"
uploadRequest.addValue(contentType, forHTTPHeaderField:"Content-Type")
let body = NSMutableData()
body.appendData("--\(stringBoundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Disposition: form-data; name=\"media\"; filename=\"a.jpg\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Type: image/jpeg\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData(tweetImage)
body.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("--\(stringBoundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
uploadRequest.HTTPBody = body
PFTwitterUtils.twitter()!.signRequest(uploadRequest)
NSURLConnection.sendAsynchronousRequest(uploadRequest, queue: NSOperationQueue.mainQueue(),
completionHandler: { (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in
RCLog(response)
RCLog(NSString(data: data!, encoding: NSUTF8StringEncoding))
RCLogErrorO(error)
if let mediaDict = self.nsdataToJSON(data!) {
RCLog(mediaDict)
let bodyString = "status=\(tweetString)&media_ids=\(mediaDict["media_id_string"])"
let url = NSURL(string: "https://api.twitter.com/1.1/statuses/update.json")
let tweetRequest = NSMutableURLRequest(URL: url!)
tweetRequest.HTTPMethod = "POST"
tweetRequest.HTTPBody = bodyString.dataUsingEncoding(NSUTF8StringEncoding)
PFTwitterUtils.twitter()!.signRequest(tweetRequest)
NSURLConnection.sendAsynchronousRequest(tweetRequest, queue: NSOperationQueue.mainQueue(),
completionHandler: { (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in
RCLog(response)
RCLogErrorO(error)
})
}
})
}
func nsdataToJSON (data: NSData) -> AnyObject? {
do {
return try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers)
} catch let myJSONError {
print(myJSONError)
}
return nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment