2015-04-28 156 views
1

在Swift中沒有發現任何關於此事的信息,所以我問了! 如何從Twitter中獲得用Parse登錄的用戶的個人資料圖像?在Swift中使用Parse獲取Twitter個人資料圖片

經由解析內部登錄 - 是已經登錄的用戶/ signupController

var username = PFUser.currentUser()?.username 

而圖像應被存儲在的UIImage可變

+0

你能對你的問題更精確一點嗎?你如何知道分析用戶擁有哪個twitter賬戶?有沒有在你的數據庫鏈接到Twitter帳戶? – Christian

+0

好吧更新吧! –

回答

3

AHere是斯威夫特的版本。我不得不將用戶名從Parse更改爲PFTwitter的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) 
2

安德烈,得到一個登錄的用戶的簡檔的圖像與從twitter中解析出來,您需要將這個Twitter API請求發送到http://api.twitter.com/1/users/show.json,如此處所示=>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; 
    } 



}]; 

}

+0

非常感謝! –

相關問題