• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

T#049 – Creiamo un client Twitter per iPhone (Parte 1)

By Andrea Busi | on 3 Giugno 2010 | 3 Comments
Senza categoria

Logo Twitter Oggi vedremo come realizzare il nostro personalissimo client Twitter per iPhone! Vedremo, infatti, come sfruttare il progetto MGTwitterEngine, che ci permetterà di interagire con il nostro account di Twitter. Utilizzeremo, inoltre, degli aspetti più particolari e complessi dell’iPhone SDK.

Ecco quello che faremo oggi:

  • Inserire la libreria MGTwitterEngine nel nostro progetto e settarla in maniera corretta;
  • Collegarci, sfruttando tale libreria, alla nostro timeline di Twitter;
  • Ricavare i vari tweet della timeline e salvarli in una lista con elemento ad-hoc.

Già che siamo in tema, vi ricordo che il nostro canale Twitter è raggiungibile a questo indirizzo, vi invito a seguirci se ancora non lo fate! 😉

Ora sotto con il codice, buon tutorial a tutti!

1) Creiamo il progetto e settiamo la libreria “MGTwitterEngine”

Iniziamo creando un nuovo progetto di tipo “View-based application” e chiamiamolo “SampleTwitterClient”:


Tutorial iPhone SDK - Client Twitter 01

Prima di fare qualsiasi altra cosa, inseriamo la libreria MGTwitterEngine, che ci permetterà di interagire con Twitter. Scaricate l’ultima versione da questa repository SVN (trovate qui una guida su come fare), oppure scaricate la versione 1.08 che vi mettiamo noi a disposizione.

Estraiamo l’archivio ed apriamo il file “MGTwitterEngine.xcodeproj”, un progetto esempio che potete guardare per avere una panoramica della libreria. La procedura che dovete eseguire è spiegata nel file “README.txt” di questo progetto, ma vi illustrerò tutti i passaggi in modo che non abbiate problemi di alcun genere.

A noi interessa la cartella “MGTwitterEngine” che trovate all’interno di “Classes”:


Tutorial iPhone SDK - Client Twitter 02

Prendetela e trascinatela all’interno del nostro progetto “SimpleTwitterClient” che abbiamo creato poco fa:


Tutorial iPhone SDK - Client Twitter 03

cliccate quidni su “Add” nella schermata che vi apparirà appena rilascerete la cartella, ricordandovi di mettere il segno di spunta nell’opzione in alto:


Tutorial iPhone SDK - Client Twitter 04

Possiamo chiudere il progetto “MGTwitterEngine” e tornare al nostro “SampleTwitterClient”. Importiamo, ora, il framework che si dovrà occupare del parsing XML. Clicchiamo con il tasto destro sulla cartella “Frameworks” e scegliamo “Add” -> “Existing Frameworks…”:


Tutorial iPhone SDK - Client Twitter 05

Dall’elenco che appare selezioniamo poi “libxml2.dylib” e clicchiamo su “Add”:


Tutorial iPhone SDK - Client Twitter 06

Abbiamo così importato il framework necessario.

Ci manca solo un’operazione per fare in modo che la libreria “MGTwitterEngine” funzionioni alla perfezione. Facciamo doppio clic sul nome del progetto per aprirne le proprietà. Nella sezione “Build” cerchiamo la voce “Header Search Path”:


Tutorial iPhone SDK - Client Twitter 07

facciamoci doppio clic e quando si apre inseriamoci la stringa “$SDKROOT/usr/include/libxml2” (ci basterà cliccare sul bottoncino “+”):


Tutorial iPhone SDK - Client Twitter 08

Abbiamo concluso la fase iniziale di creazione del nostro progetto.

2.Definiamo la vista di caricamento

XCode ha già creato per noi una vista, “SampleTwitterClientViewController.xib”. Questa verrà caricata all’avvio dell’applicazione, sarà qui che andremo a leggere la nostra timeline di Twitter. Prima di fare ciò, creiamo un semplice aspetto grafico per questa vista.

Aprite il file “SampleTwitterClientViewController.xib” e modificatelo a vostro piacere. Io l’ho modificato così:


Tutorial iPhone SDK - Client Twitter 09

Come vedete al centro ho inserito un componente “UIActivityIndicatorView“, che utilizzeremo per far capire all’utente che l’applicazione sta caricando i dati e non è bloccata.

Salviamo il file e chiudiamo Interface Builder.

3. Creiamo la classe “Tweet”

Come abbiamo già detto, la nostra applicazione andrà a leggere la timeline del nostro account di Twitter. Dobbiamo creare una classe, quindi, in grado di ospitare le informazioni di ogni singolo tweet letto. Per semplicità, ci limiteremo a salvare solo alcuni dati di ogni tweet: nome dell’utente che ha “cinguettato”, la sua immagine del profilo e il testo del tweet.

Facciamo clic con il tasto destro su “Classes” e clicchiamo poi su “Add” -> “New File…”. Creiamo, quindi, una classe di tipo “Objective-C class” e chiamiamola “Tweet”.

Vediamo di definire le variabili e i metodi di questa classe.

Nel file “Tweet.h” inseriamo il seguente codice:

#import 
 
@interface Tweet : NSObject {
 NSString *testo;
 NSString *user;
 UIImage *immagine;
}
 
@property (nonatomic, retain) NSString *testo;
@property (nonatomic, retain) NSString *user;
@property (nonatomic, retain) UIImage *immagine;

Abbiamo dichiarato tre elementi, come detto poco fa:

  • testo, conterrà il messaggio del tweet, il testo;
  • user, conterrà l’username di chi ha inserito il tweet letto;
  • immagine, è l’immmagine (l’avatar) dell’utente che ha lasciato il tweet.

Niente di complicato quindi. Nel file “Tweet.m” dovremo solo implementare il metodo “dealloc” e inserire “@synthesize”:

#import "Tweet.h"
 
@implementation Tweet
 
@synthesize testo, user, immagine;
 
-(void)dealloc{
 [testo release];
 [user release];
 [immagine release];
 [super dealloc];
}
 
@end

Ovviamente se intendete creare un client più complesso potrete aumentare i componenti di questa classe, ma per questo tutorial ci basteranno questi elementi.

4. Definiamo la classe “SampleTwitterClientViewController.h”

È venuto finalmente il momento di implementare la classe che si occuperà di leggere la timeline di Twitter.

Apriamo il file “SampleTwitterClientViewController.h” e inseriamo il seguente codice:

#import 
#import "MGTwitterEngine.h"
 
@class Tweet;
 
@interface SampleTwitterClientViewController : UIViewController  {
 MGTwitterEngine *twitterEngine;
 NSMutableArray *listaTweet;
 IBOutlet UIActivityIndicatorView *spinner;
}
 
-(NSString*)getMessaggio:(NSDictionary*)element;
-(NSString*)getUser:(NSDictionary*)element;
-(NSURL*)getUrlImage:(NSDictionary*)element;
 
@property (nonatomic, retain) NSMutableArray *listaTweet;
@property (nonatomic, retain) IBOutlet UIActivityIndicatorView *spinner;
 
@end

Alla riga 7 abbiamo definito un elemento di tipo “MGTwitterEngine”, proprio quello della classe che abbiamo inserito all’inizio del tutorial. Sarà questo componente che si occuperà della connessione con Twitter e della lettura della nostra timeline. Nell’intestazione (riga 6) abbiamo anche inserito il protocollo di questa classe, che ci “obbliga” così ad implementare nei metodi che vedremo in seguito.

L’array dichiarato alla riga 8 conterrà vari elementi del tipo “Tweet”, ognuno dei quali conterrà un tweet letto dal nostro account. Sarà, quindi, una lista che conterrà tutti i tweet della nostra timeline.
La riga 9, invece, contiene la definizione della “spinning wheel”, ovvero la classica “rotella che gira”, l’UIActivityIndicatorView che abbiamo inserito in precedenza nella vista (e che collegheremo fra poco tramite IB).

Ci sono poi 3 metodi getter (“getMessaggio”, “getUser” e “getUrlImage”) che avranno il compito di ricavare il campo desiderato, partendo dal NSDictionary, in cui saranno memorizzate tutte le informazioni di ogni singolo tweet.

Salviamo la classe e prima di continuare l’implementazione, apriamo nuovamente il file “SampleTwitterClientViewController.xib”, in cui dovremo collegare l’elemento “UIActivityIndicatorView” che abbiamo inserito con quello appena dichiarato nella classe.

Clicchiamo sul “File’s Owner” e andiamo nel “Connections Inspector”. Colleghiamo l’elemento “spinner” con il componente grafico che abbiamo già inserito. Se avete eseguito tutto correttamente avrete il seguente risultato:


Tutorial iPhone SDK - Client Twitter 10

Possiamo salvare e chiudere Interface Builder.

5. Leggiamo i tweet dalla nostra timeline

Iniziamo ad implementare il codice che deve leggere i tweet dalla nostra timeline. Apriamo il file “SampleTwitterClientViewController.m” ed inseriamo il seguente codice:

#import "SampleTwitterClientViewController.h"
#import "Tweet.h"
 
@implementation SampleTwitterClientViewController
 
@synthesize listaTweet, spinner;
 
-(void)viewDidLoad{
 
 // Qui vanno dichiarati username e password per accedere a Twitter
 NSString *username = @"nome_utente";
 NSString *password = @"password";
 
 // Create a TwitterEngine and set our login details.
 twitterEngine = [[MGTwitterEngine alloc] initWithDelegate:self];
 [twitterEngine setUsername:username password:password];
 
 // Get updates from people the authenticated user follows.
 [twitterEngine getFollowedTimelineFor:username since:nil startingAtPage:0];
 
 [spinner startAnimating];
}

Non preoccupatevi troppo di capire il codice, in quanto l’ho preso direttamente dall’esempio fornito con la classe “MGTwitterEngine”. Ricordatevi, comunque, di inserire i vostri dati per il login alla riga 11 e 12.
Alla riga 21 abbiamo, inoltre, avviato la “rotella” (che fermeremo quando la procedura di lettura e conversione dei dati sarà terminata).

Nota: se invece volete leggere i messaggi di un utente (non la sua timeline, ma solo i suoi tweet) dovete sostituire l’istruzione alla riga 19 con la seguente:

[twitterEngine getUserTimelineFor:username sinceID:nil startingAtPage:0 count:5];

Inseriamo, ora, dei metodi obbligatori da inserire, in quanto parte del delegato “MGTwitterEngineDelegate”.

Eccoli:

- (void)requestSucceeded:(NSString *)requestIdentifier{
 NSLog(@"Request succeeded (%@)", requestIdentifier);
}
 
- (void)requestFailed:(NSString *)requestIdentifier withError:(NSError *)error{
 NSLog(@"Twitter request failed! (%@) Error: %@ (%@)",
 requestIdentifier,
 [error localizedDescription],
 [[error userInfo] objectForKey:NSErrorFailingURLStringKey]);
 [spinner stopAnimating];
 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Errore!" message:@"Connessione non riuscita.\nControlla i dati d'accesso" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
 
;
; } - (void)directMessagesReceived:(NSArray *)messages forRequest:(NSString *)identifier{ NSLog(@"Got direct messages:\r%@", messages); } - (void)userInfoReceived:(NSArray *)userInfo forRequest:(NSString *)identifier{ NSLog(@"Got user info:\r%@", userInfo); } - (void)miscInfoReceived:(NSArray *)miscInfo forRequest:(NSString *)identifier{ NSLog(@"Got misc info:\r%@", miscInfo); }

L’unico metodo a cui ho aggiunto un po’ di codice è il secondo, ovvero “requestFailed: withError:”. Questo metodo è avviato se la connessione con Twitter non è possibile, in tal caso, avvieremo una UIAlertView che lo comunica all’utente e fermiamo l’ UIActivityIndicator. Come messaggio comunichiamo che i dati d’accesso sono errati, in realtà dovremmo controllare il codice d’errore e inserire un messaggio a seconda dell’errore riscontrato (potrebbe non esserci la connessione, oppure Twitter potrebbe essere down, o i dati inseriti potrebbero essere errati, etc).

Mancano solo pochi metodi per concludere questo primo tutorial. Ecco cosa dovremo inserire ora:

- (void)statusesReceived:(NSArray *)statuses forRequest:(NSString *)identifier{
 
 listaTweet = [[NSMutableArray alloc] init];
 Tweet *elemento;
 
 for (int i=0; i<statuses.count ; i++) {
 elemento =  [[Tweet alloc] init];
 elemento.testo = [self getMessaggio:[statuses objectAtIndex:i]];
 elemento.user = [self getUser:[statuses objectAtIndex:i]];
 elemento.immagine = [[UIImage imageWithData:[NSData dataWithContentsOfURL:[self getUrlImage:[statuses objectAtIndex:i]]]]retain];
 [listaTweet addObject:elemento];
 }
 [elemento release];
 
 [spinner stopAnimating];
}
 
-(NSString*)getMessaggio:(NSDictionary*)element{
	return [element objectForKey:@"text"];
}
 
-(NSString*)getUser:(NSDictionary*)element{
	return [[element objectForKey:@"user"] objectForKey:@"name"];
}
 
-(NSURL*)getUrlImage:(NSDictionary*)element{
	NSString *url = [[element objectForKey:@"user"] objectForKey:@"profile_image_url"];
	return [NSURL URLWithString:url];
}

Questa è sicuramente la parte più importante. Il metodo “statusesReceived” viene richiamato quando è stata letta la timeline di Twitter del vostro account. Nell’array “statuses”, infatti, sono presenti tutti i tweet letti con tutti gli elementi relativi ad ogni singolo tweet (testo, username di chi lo ha lasciato, posizione della “geolocalizzazione”, url dell’immagine del profilo, etc). Se volete visualizzarne il contenuto vi basterà usare l’istruzione NSLog(@”%@”,statuses);.

Il codice presente nel metodo appena descritto si occupa di leggere ogni tweet e di ricavarne le informazioni del tweet che ci servono (testo, username e immagine). I tre metodi “getXXX” hanno proprio il compito di ricavare l’informazione (se volete leggere nuovi campi dovrete creare un metodo “get” personalizzandolo in base alle vostre necessità). Potete vedere come sia molto semplice leggere le informazioni dei vari campi, vi basterà infatti utilizzare il metodo “objectForKey” e inserire l’attributo che volete leggere.

Nota: il metodo “getUser” ci restitusce il nome completo dell’utente di cui abbiamo letto il messaggio. Se volete, invece, leggerne solo il nickname, dovrete utilizzare questa istruzione (riga 23):

return [[element objectForKey:@"user"] objectForKey:@"screen_name"];

Quello che potrebbe sembrarvi più complicato è la lettura dell’immagine. Il metodo “getUrlImage” ci restituisce un elemento NSURL, che non è nient’altro che l’indirizzo web dell’immagine dell’utente. Alla riga 10 creiamo, poi, un’immagine a partire dai dati letti a quell’indirizzo (XCode ci restituisce infatti una NSData, che va convertita in UIImage). L’immagine convertita viene poi inserita nell’elemento corrente (ovviamente nel campo “immagine”).

Alla fine del ciclo for avremo la “listaTweet” che conterrà n elementi di tipo Tweet, ognuno dei quali avrà le informazioni ricavate in precedenza. Proprio ciò che volevamo.

Abbiamo così completato questa prima parte del tutorial!

Se volete controllare di aver letto i valori della vostra timeline, utilizzate questo ciclo alla fine del metodo “statusesReceived”:

for (int j=0; j<[listaTweet count]; j++) {
 Tweet *elemento = [listaTweet objectAtIndex:j];
 NSLog(@"testo: %@, user: %@, url: %@",elemento.testo,elemento.user,elemento.urlImgUser);
 }

e leggete i risultati nella Console di debug.


Tutorial iPhone SDK - Client Twitter 11

Nel prossimo tutorial vedremo come creare una tabella personalizzata in cui inserire gli elementi che abbiamo letto.


Se avete problemi con il tutorial, questo è il nostro file di progetto.

Share this story:
  • tweet

Tags: andrea busiMGTwitterEngineNSDictionaryTutorial PraticitwitterUIActivityIndicatorView

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • “Tutorial pratici per iOS SDK” si aggiorna alla versione 2.1

    10 Maggio 2012 - 1 Comment
  • 10. Objective-C: UITableView (parte 2)

    23 Gennaio 2012 - 3 Comments
  • Tutorial pratici per iOS SDK: disponibile la versione 2.0 aggiornata a iOS 5 e XCode 4.2

    16 Novembre 2011 - 6 Comments

Author Description

23 anni, è studente di Ingegneria Informatica presso l’Università di Bergamo (laurea Magistrale). Appassionato d’informatica sin da bambino, conosce molto bene il C++, Java e l'ObjectiveC, con cui ormai programma con successo da qualche anno. Ha già scritto un ebook “Tutorial pratici per iPhone SDK”, che ha avuto un ottimo successo, e gestisce da quasi due anni BubiDevs, un piccolo blog che ha dato l’ispirazione anche a devAPP.

3 Responses to “T#049 – Creiamo un client Twitter per iPhone (Parte 1)”

  1. 4 Giugno 2010

    Creiare un client Twitter per iPhone e iPad (parte 2) | devAPP

    […] Pubblicità « T#049 – Creiamo un client Twitter per iPhone (Parte 1) […]

  2. 16 Giugno 2010

    T052 - Creiamo un client Twitter per iPhone (Parte 3) | devAPP

    […] tutorial dedicati alla realizzazione di un semplice client per Twitter. Vi ricordo che trovate qui la prima parte, metre qui la […]

  3. 7 Aprile 2013

    DevTutorial #21 – Creiamo il nostro client per Twitter! (Parte 1) - Bubi Devs

    […] Leggi il tutorial completo su devAPP […]

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO