¿Funciona TWRequest para la API de Twitter streaming?

Estoy tratando de hacer una aplicación básica de iPhone que muestre tweets cercanos. Estaba usando el object TWRequest para lograr esto con la API de búsqueda de Twitter. Lamentablemente, me gustaría marcar los tweets en un map con sus coorderadas GPS y la búsqueda api no parece devolver la location real de que un tweet se hizo con una precisión mejor que el nombre de la ciudad.

Como tal, creo que necesito cambiar a la API de transmisión. Me pregunto si es posible seguir utilizando el object TWRequest en este caso o si tengo que cambiar a usar NSURLConnection. ¡Gracias por adelantado!

Avtar

Sí, puede usar un object TWRequest. Cree su object TWRequest utilizando la URL y los parameters apropiados desde el API de la API de Twitter y establezca la propiedad TWRequest.account en el object ACAccount para la count de Twitter.

A continuación, puede utilizar el método signedURLRequest de TWRequest para get una NSURLRequest que se puede utilizar para crear una connection NSURLC asíncrona mediante connectionWithRequest: delegate :.

Una vez hecho esto, la connection del delegado: didReceiveData: se llamará al método cada vez que se reciban datos de Twitter. Tenga en count que cada object NSData recibido puede contener más de un object JSON. Deberá dividirlos (separados por "\ r \ n") antes de convertir cada uno de JSON utilizando NSJSONSerialization.

Me tomó un poco de time para poner esto en marcha, así que pensé que no debería publicar mi código para otros. En mi caso, estaba tratando de get tweets cerca de una location determinada, por lo que verás que usé un parámetro de locations y una estructura de location que tenía en scope. Puede agregar cualquier parámetro que desee al dictionary de params.

También tenga en count que esto es básico y querrá hacer cosas como notificar al usuario que no se encontró una count y permitirle al usuario seleccionar la count de twitter que desearían usar si existen varias counts.

Happy Streaming!

 //First, we need to obtain the account instance for the user's Twitter account ACAccountStore *store = [[ACAccountStore alloc] init]; ACAccountType *twitterAccountType = [store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; // Request permission from the user to access the available Twitter accounts [store requestAccessToAccountsWithType:twitterAccountType withCompletionHandler:^(BOOL granted, NSError *error) { if (!granted) { // The user rejected your request NSLog(@"User rejected access to the account."); } else { // Grab the available accounts NSArray *twitterAccounts = [store accountsWithAccountType:twitterAccountType]; if ([twitterAccounts count] > 0) { // Use the first account for simplicity ACAccount *account = [twitterAccounts objectAtIndex:0]; NSMutableDictionary *params = [[NSMutableDictionary alloc] init]; [params setObject:@"1" forKey:@"include_entities"]; [params setObject:location forKey:@"locations"]; [params setObject:@"true" forKey:@"stall_warnings"]; //set any other criteria to track //params setObject:@"words, to, track" forKey@"track"]; // The endpoint that we wish to call NSURL *url = [NSURL URLWithString:@"https://stream.twitter.com/1.1/statuses/filter.json"]; // Build the request with our parameter TWRequest *request = [[TWRequest alloc] initWithURL:url parameters:params requestMethod:TWRequestMethodPOST]; // Attach the account object to this request [request setAccount:account]; NSURLRequest *signedReq = request.signedURLRequest; // make the connection, ensuring that it is made on the main runloop self.twitterConnection = [[NSURLConnection alloc] initWithRequest:signedReq delegate:self startImmediately: NO]; [self.twitterConnection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; [self.twitterConnection start]; } // if ([twitterAccounts count] > 0) } // if (granted) }];