How to get twitter profile picture in ios?

后端 未结 6 1849
悲哀的现实
悲哀的现实 2021-01-03 02:43

I wrote the following code:

NSURL *url = [NSURL URLWithString:@\"http://api.twitter.com/1.1/users/show.json\"];

NSDictionary *params = [NSDictionary diction         


        
相关标签:
6条回答
  • 2021-01-03 03:20

    try this one ,it's latest for getting the user profile using fabricSDK

      -(void)usersShow:(NSString *)userID
    {
        NSString *statusesShowEndpoint = @"https://api.twitter.com/1.1/users/show.json";
        NSDictionary *params = @{@"user_id": userID};
    
        NSError *clientError;
        NSURLRequest *request = [[[Twitter sharedInstance] APIClient]
                                 URLRequestWithMethod:@"GET"
                                 URL:statusesShowEndpoint
                                 parameters:params
                                 error:&clientError];
    
        if (request) {
            [[[Twitter sharedInstance] APIClient]
             sendTwitterRequest:request
             completion:^(NSURLResponse *response,
                          NSData *data,
                          NSError *connectionError) {
                 if (data) {
                     // handle the response data e.g.
                     NSError *jsonError;
                     NSDictionary *json = [NSJSONSerialization
                                           JSONObjectWithData:data
                                           options:0
                                           error:&jsonError];
    
                     NSLog(@"%@",[json description]);
                 }
                 else {
                     NSLog(@"Error code: %ld | Error description: %@", (long)[connectionError code], [connectionError localizedDescription]);
                 }
             }];
        }
        else {
            NSLog(@"Error: %@", clientError);
        }
    }
    
    0 讨论(0)
  • 2021-01-03 03:21

    It's profile_image_url_https ;)

    We can access profile image without using Twitter sdk .Using Social framework in iOS we can get using it.

    I use ACAccounts instead of Twitter IOS SDK's like MGTwitterEngine etc....... The twitter account provided in the IPhone Settings will be used.

            if(!accountStore)
                accountStore = [[ACAccountStore alloc] init];
            ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
    
            [accountStore
             requestAccessToAccountsWithType:accountType
             options:NULL
             completion:^(BOOL granted, NSError *error) {
                 if (granted) {
                     //  Step 2:  Create a request
                     NSArray *accountsArray = [accountStore accountsWithAccountType:accountType];
                     self.twitterAccount = [accountsArray objectAtIndex:0];
                     // NSString *userID = [[twitterAccount valueForKey:@"properties"] valueForKey:@"user_id"];
    
                     NSURL *url = [NSURL URLWithString:@"https://api.twitter.com/1.1/users/show.json"];
                     NSDictionary *params = @{@"screen_name" : twitterAccount.username
                                              };
                     SLRequest *request =
                     [SLRequest requestForServiceType:SLServiceTypeTwitter
                                        requestMethod:SLRequestMethodGET
                                                  URL:url
                                           parameters:params];
    
                     //  Attach an account to the request
                     [request setAccount:[accountsArray lastObject]];
    
                     //  Step 3:  Execute the request
                     [request performRequestWithHandler:^(NSData *responseData,
                                                          NSHTTPURLResponse *urlResponse,
                                                          NSError *error) {
                         if (responseData) {
    
                             if (urlResponse.statusCode >= 200 && urlResponse.statusCode < 300) {
                                 [self performSelectorOnMainThread:@selector(twitterdetails:)
                                                        withObject:responseData waitUntilDone:YES];
                             }
                             else {
    
                                 NSLog(@"The response status code is %d", urlResponse.statusCode);
                             }
                         }
                     }];
                 }
                 else
                 {
                     dispatch_async(dispatch_get_main_queue(), ^{
                         [self dismissError:@"Please set up your twitter account in iphone settings"];
    
                     });
                 }
             }];
    
    
    
    -(void)twitterdetails:(NSData *)responseData {
    
        NSError* error = nil;
        NSDictionary* json = [NSJSONSerialization
                              JSONObjectWithData:responseData //1
                              options:NSJSONReadingAllowFragments
                              error:&error];
    
        NSString *name = [json objectForKey:@"name"];
        NSString *scrnm = [json objectForKey:@"screen_name"];
        NSString *twitterid = [json objectForKey:@"id"];
        NSString *prof_img = [json objectForKey:@"profile_image_url"];
        NSString *location = [json objectForKey:@"location"];
    }
    
    0 讨论(0)
  • 2021-01-03 03:22

    Have you considered using a 3rd party Twitter engine for this? I've used FHSTwitterEngine with a fair amount of success, and it seems to be under active development.

    To pull a profile picture you would do something like this:

    [[FHSTwitterEngine sharedEngine]permanentlySetConsumerKey:@"<consumer_key>" andSecret:@"<consumer_secret>"];
    [[FHSTwitterEngine sharedEngine]showOAuthLoginControllerFromViewController:self
    withCompletion:^(BOOL success) {
        if (success) {
            UIImage *profileImg = [[FHSTwitterEngine sharedEngine] getProfileImageForUsername:@"<username>" andSize:size];
        }
    }];
    
    0 讨论(0)
  • 2021-01-03 03:23

    Note that you should login your iOS device for this functionality:

    - (void)signIniwthTwitter
    {
       if ([TWTweetComposeViewController canSendTweet])
        {
    
    
                // Set up the built-in twitter composition view controller.
            TWTweetComposeViewController *tweetViewController = [[TWTweetComposeViewController alloc] init];
    
    
                // Create the completion handler block.
            [tweetViewController setCompletionHandler:^(TWTweetComposeViewControllerResult result) {
                [self dismissModalViewControllerAnimated:YES];
    
            }];
    
                // Present the tweet composition view controller modally.
            [self presentModalViewController:tweetViewController animated:YES];
    
        }
        else
        {
                    [self getTwitterAccountDetails];
        }
    
    
    
    }
    
    
    - (void) getTwitterAccountDetails
    {
    
        [DejalBezelActivityView activityViewForView:self.navigationController.navigationBar.superview];
    
        self.view.userInteractionEnabled  = NO;
        self.connectionstatusLabel.text = @"Getting user details....";
            // Create an account store object.
        ACAccountStore *accountStore = [[ACAccountStore alloc] init];
    
            // Create an account type that ensures Twitter accounts are retrieved.
        ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
    
            // Request access from the user to use their Twitter accounts.
        [accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
        #pragma unused (error)
            if(granted) {
                    // Get the list of Twitter accounts.
                NSArray *accountsArray = [accountStore accountsWithAccountType:accountType];
    
                    // For the sake of brevity, we'll assume there is only one Twitter account present.
                    // You would ideally ask the user which account they want to tweet from, if there is more than one Twitter account present.
                if ([accountsArray count] > 0) {
                        // Grab the initial Twitter account to tweet from.
                    ACAccount *twitterAccount = [accountsArray objectAtIndex:0];
                    NSLog(@"Account details %@",twitterAccount);
                    _userid = [[twitterAccount valueForKey:@"properties"] valueForKey:@"user_id"];
                    _screenName = [twitterAccount valueForKey:@"username"];
                    NSLog(@"user id %@",_userid);
                    [self getProfileDetailsFromTwitter];
    
                }
            }
        }];
    }
    
    - (void) getProfileDetailsFromTwitter
    {
            self.connectionstatusLabel.text = @"Getting user profile details....";
    
        NSURL *twitterURL = [NSURL URLWithString:[NSString stringWithFormat:@"https://api.twitter.com/1/users/show.json?user_id=%@&include_entities=true",_userid]];
        TWRequest *postRequest = [[TWRequest alloc] initWithURL:twitterURL parameters:nil requestMethod:TWRequestMethodGET];
    
            // Perform the request created above and create a handler block to handle the response.
        [postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
            NSString *output;
    
            if ([urlResponse statusCode] == 200) {
                    // Parse the responseData, which we asked to be in JSON format for this request, into an NSDictionary using NSJSONSerialization.
                NSError *jsonParsingError = nil;
                NSDictionary *publicTimeline = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonParsingError];
    
                NSLog(@"Twiiter Profile Deatils %@",publicTimeline);
                _twitterUserProfileDetails = [[MobileYakUser alloc]init];
                _twitterUserProfileDetails.firstName = [publicTimeline objectForKey:@"name"];
                _twitterUserProfileDetails.lastName = [publicTimeline objectForKey:@"name"];
    
    
                output = [NSString stringWithFormat:@"HTTP response status: %i\nPublic timeline:\n%@", [urlResponse statusCode], publicTimeline];
                NSURL *url =
                [NSURL URLWithString:@"http://api.twitter.com/1/users/profile_image/"];
    
                NSMutableDictionary *params = [[NSMutableDictionary alloc]init];
                [params setValue:_screenName forKey:@"screen_name"];
                [params setValue:@"original" forKey:@"size"];
    
                TWRequest *request = [[TWRequest alloc] initWithURL:url
                                                         parameters:params
                                                      requestMethod:TWRequestMethodGET];
    
                [request performRequestWithHandler:
                 ^(NSData *imageresponseData, NSHTTPURLResponse *imageFetchurlResponse, NSError *imageerror) {
    #pragma unused (imageFetchurlResponse,imageerror)
                     if (imageresponseData) {
                             self.connectionstatusLabel.text = @"Getting user profile image....";
                         UIImage *image = [UIImage imageWithData:imageresponseData];
                         _twitterUserProfileDetails.profileImage = image;
                         self.connectionstatusLabel.text = @"Please fill up following fields for login";
                         self.view.userInteractionEnabled = YES;
                         [DejalActivityView removeView];
                     }
                 }];
            }
            else {
                output = [NSString stringWithFormat:@"HTTP response status: %i\n", [urlResponse statusCode]];
            }
    
        }];
    }
    
    0 讨论(0)
  • 2021-01-03 03:26

    //Twitter Fetch Data for Methods for ios using block https://www.dropbox.com/sh/vdxtw3x1coyyj8x/AADw6cyYNjeHM-77GqAyBZ5oa?dl=0

    0 讨论(0)
  • 2021-01-03 03:37

    this is what i have tried in past

    [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 {
    
            // TODO find a way to fetch details with Twitter..
    
            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 讨论(0)
提交回复
热议问题