Search code examples
iostwitterslrequest

Retrieving twitter user data with iOS Social / Accounts frameworks


Is there a way to get user data (first name, last name, and email) from Twitter using the iOS social/accounts frameworks? I'm able to do it with Facebook, but every SLRequest I make to Twitter returns an empty array.

Here's the code I've got right now. I've tried several URLS with varying parameters, but I haven't had any luck.

- (void)populateTwitterAccount  {
NSURL *twitterURL = [NSURL URLWithString:@"https://api.twitbridge.com/1.1/users/show.json"];

SLRequest *twitterRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodGET URL:twitterURL parameters:nil];

[twitterRequest setAccount:self.twitterAccount];

[twitterRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
    NSString *accountDataString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    
    NSLog(@"%@", accountDataString);
    
}];

}

Solution

  • Yes, you can get user information using ACAccountStore, You have to retain ACAccountStore: .h

    @property (nonatomic, strong) ACAccountStore *account;
    

    .m

      NSUrl *url = [NSURL URLWithString:@"https://api.twitter.com/1.1/users/show.json"];
      NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:twittername,@"screen_name",nil];
    
         account = [[ACAccountStore alloc] init];
        ACAccountType *twitterAccountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
        NSArray *twitterAccounts = [account accountsWithAccountType:twitterAccountType];
    
        // Runing on iOS 6
        if (NSClassFromString(@"SLComposeViewController") && [SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
        {
            [account requestAccessToAccountsWithType:twitterAccountType options:NULL completion:^(BOOL granted, NSError *error)
             {
                 if (granted)
                 {
    
                     SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodGET URL:url                                      parameters:params];
    
                     [request setAccount:[twitterAccounts lastObject]];
    
                     dispatch_async(dispatch_get_main_queue(), ^
                                    {
    
                                        [NSURLConnection sendAsynchronousRequest:request.preparedURLRequest queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response1, NSData *data, NSError *error)
                                         {
                                             dispatch_async(dispatch_get_main_queue(), ^
                                                            {
                                                                if (data)
                                                                {
    //                                                                [self loadData:data];
    
                                                                    NSString* newStr = [[NSString alloc] initWithData:data
                                                                                                              encoding:NSUTF8StringEncoding];
                                                                    NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] ;
    
    
                                                                    NSLog(@"data:%@",newStr);
                                                                }
                                                            });
                                         }];
                                    });
                 }
             }];
        }
        else if (NSClassFromString(@"TWTweetComposeViewController") && [TWTweetComposeViewController canSendTweet]) // Runing on iOS 5
        {
            [account requestAccessToAccountsWithType:twitterAccountType withCompletionHandler:^(BOOL granted, NSError *error)
             {
                 if (granted)
                 {
                     TWRequest *request = [[TWRequest alloc] initWithURL:url parameters:params requestMethod:TWRequestMethodGET];
                     [request setAccount:[twitterAccounts lastObject]];
    
                     dispatch_async(dispatch_get_main_queue(), ^
                                    {
                                        [NSURLConnection sendAsynchronousRequest:request.signedURLRequest queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response1, NSData *data, NSError *error)
                                         {
                                             dispatch_async(dispatch_get_main_queue(), ^
                                                            {                             
                                                                if (data)                                 
                                                                {                                 
                                                                    NSString* newStr = [[NSString alloc] initWithData:data
                                                                                                             encoding:NSUTF8StringEncoding];
    
    
                                                                    NSLog(@"data:%@",newStr);                                                           }
                                                            });
                                         }];
    
    
                                    });
                 }
             }];
        }
    }