Swift 尝试使用Parse';s PFTwitterUtils
我正试图在Twitter上发帖,但一直收到代码32和消息“无法验证您的身份”。我已经创建了一个应用程序,因为它有写权限,但我仍然无法将其发布 代码如下:Swift 尝试使用Parse';s PFTwitterUtils,swift,twitter,parse-platform,Swift,Twitter,Parse Platform,我正试图在Twitter上发帖,但一直收到代码32和消息“无法验证您的身份”。我已经创建了一个应用程序,因为它有写权限,但我仍然无法将其发布 代码如下: let downloadQueue = dispatch_queue_create("tweet.queue", DISPATCH_QUEUE_SERIAL) dispatch_async(downloadQueue, { () -> Void in PFTwitterUtils.linkUser(PFUser.
let downloadQueue = dispatch_queue_create("tweet.queue", DISPATCH_QUEUE_SERIAL)
dispatch_async(downloadQueue, { () -> Void in
PFTwitterUtils.linkUser(PFUser.currentUser()!, block: { (success: Bool, error:NSError?) -> Void in
if var twitter = PFTwitterUtils.twitter() {
if var screenName = twitter.screenName {
var string = "https://api.twitter.com/1.1/statuses/update.json?\(screenName)"
println("String: \(string)")
if var url = NSURL(string: string) {
var request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"
println("Auth token: \(twitter.authToken)")
println("Auth token secret: \(twitter.authTokenSecret)")
var boundary = "---------------------------14737809831466499882746641449"
var contentType = "application/x-www-form-urlencoded"
request.setValue(contentType, forHTTPHeaderField: "Content-Type")
var body = NSMutableData ()
var strb = "--\(boundary)\r\n"
if var strbdata = strb.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
body.appendData(strbdata)
}
var strc = "Content-Disposition: form-data; name=\"status\"\r\n\r\n"
if var strcdata = strc.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
body.appendData(strcdata)
}
var strm = "HELLO WORLD \r\n"
if var strmdata = strm.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
body.appendData(strmdata)
}
var strd = "--\(boundary)--\r\n"
if var strddata = strc.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
body.appendData(strddata)
}
request.HTTPBody = body
println("Request before: \(request.allHTTPHeaderFields)")
println("BODY: \(request.HTTPBody)")
twitter.signRequest(request)
//println("Request after: \(request.allHTTPHeaderFields)")
var response: NSURLResponse? = nil
var error: NSError? = nil
var data = NSURLConnection.sendSynchronousRequest(request,
returningResponse: &response, error: nil) as NSData?
if error != nil {
println("error \(error)")
} else {
//This will print the status code repsonse. Should be 200.
//You can just println(response) to see the complete server response
//println((response as NSHTTPURLResponse).statusCode)
//Converting the NSData to JSON
let json: NSDictionary = NSJSONSerialization.JSONObjectWithData(data!,
options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary
println(json)
}
}
}
}
})
})
这是我的代码的Swift版本,通过解析发布tweet并获取其id,以便稍后动态检索(使用动态id):
if !PFTwitterUtils.isLinkedWithUser(user) {
PFTwitterUtils.linkUser(user, {
(succeeded: Bool?, error: NSError?) -> Void in
if PFTwitterUtils.isLinkedWithUser(user) {
println("Woohoo, user logged in with Twitter!")
let verify = NSURL(string: "https://api.twitter.com/1.1/account/verify_credentials.json")
var request = NSMutableURLRequest(URL: verify!)
PFTwitterUtils.twitter()!.signRequest(request)
var response: NSURLResponse?
var error:NSError? = nil
var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &error)
if let jsonObject: AnyObject = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error:&error) {
if let dict = jsonObject as? NSDictionary {
NSLog("the dict =%@", dict)
} else {
println("not a dictionary")
}
} else {
println("Could not parse JSON: \(error!)")
}
// dict = NSJSONSerialization.JSONObjectWithData(data, options:, error: NSErrorPointer())
}
})
}
else
{
var tweetSTr=NSString()
tweetSTr="tweeted"
var bodyStr=NSString(format: "status=%@", tweetSTr.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)
bodyStr=bodyStr.stringByReplacingOccurrencesOfString("!", withString: "%21")
var url=NSURL(string: "https://api.twitter.com/1.1/statuses/update.json")
var tweetRequest=NSMutableURLRequest(URL: url!)
tweetRequest.HTTPMethod="POST"
tweetRequest.HTTPBody=bodyStr.dataUsingEncoding(NSUTF8StringEncoding)
PFTwitterUtils.twitter().signRequest(tweetRequest)
var response: NSURLResponse?
var error:NSError? = nil
var data = NSURLConnection.sendSynchronousRequest(tweetRequest, returningResponse: &response, error: &error)
if let jsonObject: AnyObject = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error:&error) {
if let dict = jsonObject as? NSDictionary {
NSLog("myTweetINfo =%@", dict)
var tweetID=NSString()
tweetID=dict.valueForKey("id_str") as String
NSLog("myJustPostedTweetID = %@", tweetID)
} else {
println("not a dictionary")
}
} else {
println("Could not parse JSON: \(error!)")
}
}