使用Swift中的Parse获取Twitter个人资料图片

时间:2015-04-28 16:20:43

标签: swift twitter parse-platform

Haven在Swift中找不到任何相关内容,所以我在问! 如何通过Twitter获取Parse登录用户的个人资料图片?

用户已通过解析内部登录/ / signupController

登录
var username = PFUser.currentUser()?.username

图像应存储在UIImage变量

2 个答案:

答案 0 :(得分:4)

AHere是Swift版本。我不得不从PFTwitter将用户名从Parse更改为screenName,并添加了一行以获得图片的最高分辨率版本。请注意,我在登录后使用此功能填充注册屏幕,这将测试连接到Twitter帐户的应用帐户。即使在创建帐户后添加了链接,这种方式也很有用。

    if PFTwitterUtils.isLinkedWithUser(PFUser.currentUser()!) {

        let screenName = PFTwitterUtils.twitter()?.screenName!

        let requestString = ("https://api.twitter.com/1.1/users/show.json?screen_name=" + screenName!)

        let verify: NSURL = NSURL(string: requestString)!

        let request: NSMutableURLRequest = NSMutableURLRequest(URL: verify)

        PFTwitterUtils.twitter()?.signRequest(request)

        var response: NSURLResponse?
        var error: NSError?

        let data: NSData = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &error)!

        if error == nil {

            let result = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: &error)


            let names: String! = result?.objectForKey("name") as! String

            let separatedNames: [String] = names.componentsSeparatedByString(" ")

            self.firstName = separatedNames.first!
            self.lastName = separatedNames.last!


            let urlString = result?.objectForKey("profile_image_url_https") as! String

            let hiResUrlString = urlString.stringByReplacingOccurrencesOfString("_normal", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)


            let twitterPhotoUrl = NSURL(string: hiResUrlString)
            let imageData = NSData(contentsOfURL: twitterPhotoUrl!)
            let twitterImage: UIImage! = UIImage(data:imageData!)
    }

你可能想添加这样的东西来准备一个PFFile来保存给你的新用户!

            let cgImage = twitterImage.CGImage

            let bitsPerComponent = CGImageGetBitsPerComponent(cgImage)
            let bytesPerRow = CGImageGetBytesPerRow(cgImage)
            let colorSpace = CGImageGetColorSpace(cgImage)
            let bitmapInfo = CGImageGetBitmapInfo(cgImage)

            let context = CGBitmapContextCreate(nil, 300, 300, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo)

            CGContextSetInterpolationQuality(context, kCGInterpolationHigh)

            CGContextDrawImage(context, CGRect(origin: CGPointZero, size: CGSize(width: CGFloat(300), height: CGFloat(300))), cgImage)

            let scaledImage = UIImage(CGImage: CGBitmapContextCreateImage(context))

            let imageUIImage = UIImageJPEGRepresentation(scaledImage, 0.6)
            let imageFile: PFFile = PFFile(name: (PFUser.currentUser().objectId! + "profileImage.jpg"), data:imageUIImage)

答案 1 :(得分:2)

André,要获取来自Twitter的解析用户的个人资料图片,您需要向http://api.twitter.com/1/users/show.json发送Twitter API请求,如此处所述=> https://dev.twitter.com/rest/reference/get/users/show

理想情况下,您可以使用PFTwitterUtils类对此请求进行身份验证。

这就是我在我的应用程序中所做的:(在Objective C中),希望它能帮到你。

- (void)loginWithTwitter {
[PFTwitterUtils logInWithBlock:^(PFUser *user, NSError *error) {
    if (!user) {
        NSLog(@"Uh oh. The user cancelled the Twitter login.");
        [[NSNotificationCenter defaultCenter] postNotificationName:notificationUserLoginFailed
                                                            object:error];
        return;
    } else {
        // Fetch Twitter details
        NSString * requestString = [NSString stringWithFormat:@"https://api.twitter.com/1.1/users/show.json?screen_name=%@", user.username];
        NSURL *verify = [NSURL URLWithString:requestString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:verify];
        [[PFTwitterUtils twitter] signRequest:request];
        NSURLResponse *response = nil;
        NSData *data = [NSURLConnection sendSynchronousRequest:request
                                             returningResponse:&response
                                                         error:&error];
        if ( error == nil){
            NSDictionary* result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
            _NSLog(@"%@",result);
            [user setObject:[result objectForKey:@"profile_image_url_https"]
                     forKey:@"picture"];
            // does this thign help?
            [user setUsername:[result objectForKey:@"screen_name"]];
            NSString * names = [result objectForKey:@"name"];
            NSMutableArray * array = [NSMutableArray arrayWithArray:[names componentsSeparatedByString:@" "]];
            if ( array.count > 1){
                [user setObject:[array lastObject]
                         forKey:@"last_name"];
                [array removeLastObject];
                [user setObject:[array componentsJoinedByString:@" " ]
                         forKey:@"first_name"];
            }
            [user saveInBackground];
        }
        [[NSNotificationCenter defaultCenter] postNotificationName:notificationUserDidLogin
                                                            object:nil];
        return;
    }  
}];
}