【问题标题】:Get Twitter Followers and following in ios7在 ios7 中获取 Twitter 关注者和关注者
【发布时间】:2014-01-06 04:05:47
【问题描述】:

我使用 Twitter API 来获取关注者和关注者。

我已经写了这段代码。获得追随者和关注

-(void)getTwitterAccounts
{
    ACAccountStore *accountStore = [[ACAccountStore alloc] init];
    // Create an account type that ensures Twitter accounts are retrieved.
    ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
    // let's request access and fetch the accounts
    [accountStore requestAccessToAccountsWithType:accountType
            withCompletionHandler:^(BOOL granted, NSError *error)


    {
                                // check that the user granted us access and there were no errors (such as no accounts added on the users device)
                                if (granted && !error)
                                {
                                    NSArray *accountsArray = [accountStore accountsWithAccountType:accountType];
                                    if ([accountsArray count] > 1) {
                                        // a user may have one or more accounts added to their device
                                        // you need to either show a prompt or a separate view to have a user select the account(s) you need to get the followers and friends for
                                    } else {
                                        [self getTwitterFriendsForAccount:[accountsArray objectAtIndex:0]];
                                    }
                                } else {
                                    // handle error (show alert with information that the user has not granted your app access, etc.)
                                }
                            }];
}



-(void)getTwitterFriendsForAccount:(ACAccount*)account
{
    // In this case I am creating a dictionary for the account
    // Add the account screen name
    NSMutableDictionary *accountDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:account.username, @"screen_name", nil];
    // Add the user id (I needed it in my case, but it's not necessary for doing the requests)
    [accountDictionary setObject:[[[account dictionaryWithValuesForKeys:[NSArray arrayWithObject:@"properties"]] objectForKey:@"properties"] objectForKey:@"user_id"] forKey:@"user_id"];
    // Setup the URL, as you can see it's just Twitter's own API url scheme. In this case we want to receive it in JSON
    NSURL *followingURL = [NSURL URLWithString:@"http://api.twitter.com/1/friends/ids.json"];
    // Pass in the parameters (basically '.ids.json?screen_name=[screen_name]')
    NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:account.username, @"screen_name", nil];
    // Setup the request
    TWRequest *twitterRequest = [[TWRequest alloc] initWithURL:followingURL
                                                    parameters:parameters
                                                 requestMethod:TWRequestMethodGET];
    // This is important! Set the account for the request so we can do an authenticated request. Without this you cannot get the followers for private accounts and Twitter may also return an error if you're doing too many requests
    [twitterRequest setAccount:account];
    // Perform the request for Twitter friends
    [twitterRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
        if (error) {
            // deal with any errors - keep in mind, though you may receive a valid response that contains an error, so you may want to look at the response and ensure no 'error:' key is present in the dictionary
        }
        NSError *jsonError = nil;
        // Convert the response into a dictionary
        NSDictionary *twitterFriends = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&jsonError];
        // Grab the Ids that Twitter returned and add them to the dictionary we created earlier
        [accountDictionary setObject:[twitterFriends objectForKey:@"ids"] forKey:@"friends_ids"];
        NSLog(@"%@", accountDictionary);
    }];
}

但是这段代码不起作用

给我错误

NSRangeException',原因:'* -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array'**

为什么会这样。请帮我解决这个问题。

【问题讨论】:

    标签: ios iphone objective-c twitter ios7


    【解决方案1】:

    最后我得到了解决方案。

    这是获取 Twitter 关注者和关注名称的解决方案

    首先您需要获取有效用户名。这个名字你可以从

    这段代码。

    NSString * username = [FHSTwitterEngine sharedEngine].authenticatedUsername;
    

    使用该用户名,你可以得到任何你想要的

     NSMutableDictionary *   dict1 = [[FHSTwitterEngine sharedEngine]listFriendsForUser:username isID:NO withCursor:@"-1"];
    
        NSLog(@"====> %@",[dict1 objectForKey:@"users"] );        // Here You get all the data
        NSMutableArray *array=[dict1 objectForKey:@"users"];
        for(int i=0;i<[array count];i++)
        {
            NSLog(@"names:%@",[[array objectAtIndex:i]objectForKey:@"name"]);
    
        }
    

    【讨论】:

      【解决方案2】:

      试试这个。看起来你正在尝试使用旧的 twitter api

       ACAccountStore *accountStore = [[ACAccountStore alloc] init];
       ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
       [accountStore requestAccessToAccountsWithType:accountType options:nil completion:^(BOOL granted, NSError *error){
          if (granted) {
              NSArray *accounts = [accountStore accountsWithAccountType:accountType];
              // Check if the users has setup at least one Twitter account
              if (accounts.count > 0)
              {
                  ACAccount *twitterAccount = [accounts objectAtIndex:0];
      
                  for(ACAccount *t in accounts)
                  {
                      if([t.username isEqualToString:username])
                      {
                          twitterAccount = t;
                          break;
                      }
                  }
      
                  SLRequest *twitterInfoRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodGET URL:[NSURL URLWithString:@"https://api.twitter.com/1.1/friends/ids.json?"] parameters:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%@", username], @"screen_name", @"-1", @"cursor", nil]];
                  [twitterInfoRequest setAccount:twitterAccount];
                  // Making the request
                  [twitterInfoRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
                      dispatch_async(dispatch_get_main_queue(), ^{
                          // Check if we reached the reate limit
                          if ([urlResponse statusCode] == 429) {
                              NSLog(@"Rate limit reached");
                              return;
                          }
                          // Check if there was an error
                          if (error) {
                              NSLog(@"Error: %@", error.localizedDescription);
                              return;
                          }
                          // Check if there is some response data
                          if (responseData) {
                              NSError *error = nil;
                              NSArray *TWData = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&error];
      
      
                          }
                      });
                  }];
              }
          } else {
              NSLog(@"No access granted");
          }
      }];
      

      【讨论】:

      • 然后你需要请求这个(通过分页)来获取名称 SLRequest *twitterUsersRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodPOST URL:[NSURL URLWithString:@"api.twitter.com/1.1/users/lookup.json"]parameters:[NSDictionary dictionaryWithObjectsAndKeys :[first100 componentsJoinedByString:@","], @"user_id", @"false", @"include_entities", nil]];
      • 请张贴代码。以及此代码中的用户名是什么。我应该在这里传递什么...
      • 这是我的组件(一年前使用,所以可能需要做一些更改)github.com/ArchieGoodwin/NWTwitterHelper
      • 是的,用于一些请求。替换它或删除当然
      • 在那里你可以得到它 NSArray *accounts = [accountStore accountsWithAccountType:accountType];
      猜你喜欢
      • 2021-05-22
      • 2012-07-20
      • 2013-07-01
      • 2011-10-13
      • 2013-02-02
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      相关资源
      最近更新 更多