name - iPhone- Twitter API GET Users Seguidores/Siguiendo
twitter get comments api (3)
Es una combinación de la API de Twitter de Apple y la propia API de Twitter. Es bastante directo una vez que lees el código. Voy a proporcionar un código de muestra de cómo obtener los ''amigos'' de una cuenta de Twitter (este es el término que sigue un usuario), que debería ser suficiente para que te des un método para obtener seguidores para un cuenta.
Primero, agregue las Accounts
y Twitter
marcos de Twitter
.
Ahora, veamos las cuentas de Twitter presentes en el dispositivo de un usuario.
#import <Accounts/Accounts.h>
-(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.)
}
}];
}
Ahora podemos obtener una cuenta para los amigos usando el comando GET friends / ids :
#import <Twitter/Twitter.h>
-(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:NSJSONWritingPrettyPrinted 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);
}];
}
Cuando quieres que los seguidores tengan una cuenta, es casi lo mismo ... Simple usa la URL http://api.twitter.com/1/followers/ids.format
y pasa los parámetros necesarios a través de GET followers / ids
Espero que esto te dé una buena ventaja.
ACTUALIZAR:
Como se señaló en los comentarios, debe utilizar la llamada API actualizada: https://api.twitter.com/1.1/followers/list.json
Quiero poder utilizar la API de Twitter para iOS 5 para obtener todos los seguidores de los usuarios y el siguiente nombre de usuario en un NSDictionary
...
Sin embargo, me he topado con un bloque de carreteras. No sé cómo usar la API de Twitter, haga esto ... Pero mi problema principal es obtener el nombre de usuario del usuario en primer lugar. ¿Cómo puedo hacer una solicitud de API para encontrar los seguidores de estos usuarios cuando ni siquiera conozco el nombre de usuario de los usuarios?
¿Puede alguien darme un ejemplo para que los usuarios de Twitter sigan y sigan?
PD: Ya agregué el marco de Twitter e importé
Use FHSTwitterEngine
#import "FHSTwitterEngine.h"
Agregar SystemConfiguration.framework
Escriba el siguiente código en su viewDidLoad (para inicio de sesión oauth)
UIButton *logIn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
logIn.frame = CGRectMake(100, 100, 100, 100);
[logIn setTitle:@"Login" forState:UIControlStateNormal];
[logIn addTarget:self action:@selector(showLoginWindow:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:logIn];
[[FHSTwitterEngine sharedEngine]permanentlySetConsumerKey:@"Xg3ACDprWAH8loEPjMzRg" andSecret:@"9LwYDxw1iTc6D9ebHdrYCZrJP4lJhQv5uf4ueiPHvJ0"];
[[FHSTwitterEngine sharedEngine]setDelegate:self];
- (void)showLoginWindow:(id)sender {
UIViewController *loginController = [[FHSTwitterEngine sharedEngine]loginControllerWithCompletionHandler:^(BOOL success) {
NSLog(success?@"L0L success":@"O noes!!! Loggen faylur!!!");
[[FHSTwitterEngine sharedEngine]loadAccessToken];
NSString *username = [FHSTwitterEngine sharedEngine].authenticatedUsername;
NSLog(@"user name is :%@",username);
if (username.length > 0) {
[self listResults];
}
}];
[self presentViewController:loginController animated:YES completion:nil];
}
- (void)listResults {
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"]);
}
}
En referencia a los comentarios sobre la publicación de runmad, la fuente de error para " [__NSArrayI objectAtIndex:]: índice 0 más allá de los límites para la matriz vacía" es que no ha configurado la cuenta de Twitter en el simulador. Debes firmar en twitter con tu nombre de usuario y una contraseña temporal provista por Twitter.
Otra fuente de error es "setObject for key error, key id is nil". Para superar ese tipo de código a continuación: -
-(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:@"https://api.twitter.com/1.1/followers/list.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:NSJSONWritingPrettyPrinted error:&jsonError];
NSLog(@"%@", twitterFriends);
}];
}
importar
importar
Nota: - TWRequest está en desuso. Entonces, en su lugar también puedes usar este fragmento:
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:twitterAccount.username])
{
twitterAccount = t;
break;
}
}
SLRequest *twitterInfoRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodGET URL:[NSURL URLWithString:@"https://api.twitter.com/1.1/followers/list.json"] parameters:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%@", twitterAccount.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];
NSLog(@"TWData : %@", TWData);
}
});
}];
}
} else {
NSLog(@"No access granted");
}
}];