Created
March 14, 2015 17:00
-
-
Save Ziewvater/56ca0842ceadbd06d371 to your computer and use it in GitHub Desktop.
Uploading to Gfycat using AFNetworking in Swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
let GfycatPOSTURL = "https://gifaffe.s3.amazonaws.com/" | |
let GfycatPolicy = "eyAiZXhwaXJhdGlvbiI6ICIyMDIwLTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICAgICAgICAgICAiY29uZGl0aW9ucyI6IFsKICAgICAgICAgICAgeyJidWNrZXQiOiAiZ2lmYWZmZSJ9LAogICAgICAgICAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAiIl0sCiAgICAgICAgICAgIHsiYWNsIjogInByaXZhdGUifSwKCSAgICB7InN1Y2Nlc3NfYWN0aW9uX3N0YXR1cyI6ICIyMDAifSwKICAgICAgICAgICAgWyJzdGFydHMtd2l0aCIsICIkQ29udGVudC1UeXBlIiwgIiJdLAogICAgICAgICAgICBbImNvbnRlbnQtbGVuZ3RoLXJhbmdlIiwgMCwgNTI0Mjg4MDAwXQogICAgICAgICAgICBdCiAgICAgICAgICB9" | |
let GfycatAWSAccessKeyId = "AKIAIT4VU4B7G2LQYKZQ" | |
let GfycatSignature = "mk9t/U/wRN4/uU01mXfeTe2Kcoc=" | |
let GfycatTranscodeURL = "http://upload.gfycat.com/transcode/" | |
class GfycatHandler: NSObject { | |
func uploadGif(gifData: NSData!, successHandler: ((gfycatURL: NSURL) -> Void)?) { | |
var url: NSURL = NSURL(string: GfycatPOSTURL)! | |
var request = NSMutableURLRequest(URL: url) | |
request.HTTPMethod = "POST" | |
request.timeoutInterval = 60 | |
// Create data payload | |
var error: NSError? | |
var uniqueKey = randomString(10) | |
println("Created unique key: \(uniqueKey)") | |
var parameters: Dictionary<String, String> = [ | |
"key" : uniqueKey, | |
"acl" : "private", | |
"AWSAccessKeyId" : GfycatAWSAccessKeyId, | |
"policy" : GfycatPolicy, | |
"success_action_status" : "200", | |
"signature" : GfycatSignature, | |
"Content-Type" : "image/gif" | |
] | |
var manager = AFHTTPRequestOperationManager() | |
manager.POST(GfycatPOSTURL, | |
parameters: nil, | |
constructingBodyWithBlock: { (formData: AFMultipartFormData!) -> Void in | |
for (key, value) in parameters { | |
formData.appendPartWithFormData(value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key) | |
} | |
// Make sure to add the image last, else AWS throws an error | |
formData.appendPartWithFileData(gifData, name: "file", fileName: "photo", mimeType: "image/gif") | |
}, | |
success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) -> Void in | |
println("Operation: \(operation)") | |
println("Response: \(responseObject)") | |
self.transCodeUploadedGif(uniqueKey, successHandler: successHandler) | |
}) { (operation: AFHTTPRequestOperation!, error: NSError!) -> Void in | |
println("Operation: \(operation)") | |
println("Response string: \(operation.responseString)") | |
println("Error: \(error)") | |
} | |
} | |
func transCodeUploadedGif(uniqueKey: String, successHandler: ((gfycatURL: NSURL) -> Void)? ) { | |
var manager = AFHTTPRequestOperationManager() | |
var transcodeURL = GfycatTranscodeURL + uniqueKey | |
manager.GET(transcodeURL, | |
parameters: nil, | |
success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) -> Void in | |
println("Operation; \(operation)") | |
println("Response: \(responseObject)") | |
if let json = responseObject as? Dictionary<String, AnyObject> { | |
if let name = json["gfyName"] as? String { | |
if let url = NSURL(string: "http://gfycat.com/"+name) { | |
if successHandler != nil { | |
successHandler!(gfycatURL: url) | |
} | |
} | |
} | |
} | |
}) { (operation: AFHTTPRequestOperation!, error: NSError!) -> Void in | |
println("Operation; \(operation)") | |
println("Error: \(error)") | |
} | |
} | |
func randomString(length: Int) -> String { | |
var string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" | |
var characters = Array(string) | |
var randomString: String = "" | |
var setLength = UInt32(countElements(characters)) | |
for (var i=0; i < length; i++){ | |
var rand = arc4random_uniform(setLength) | |
var character = characters[Int(rand)] | |
randomString.append(character) | |
} | |
return randomString | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment