• 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#047 – Accedere a Flickr dalle nostre applicazioni iPhone (parte 2)

By IgnazioC | on 30 Maggio 2010 | 3 Comments
Senza categoria

Ed eccocci alla seconda parte di questo tutorial, oggi inizieremo finalmente a scrivere un pò di codice.

Facciamo il punto della situazione, nella prima parte di questa guida abbiamo imparato che per ottenere il file xml contente tutte le info riguardanti le foto che vogliamo scaricare bisogna fare una chiamata http verso un particolare indirizzo. Una volta ottenuto questo file xml bisognerà poi analizzarlo per recuperare tutte le info necessarie per scaricare e visualizzare le fotografie nel nostro programma.

Vedremo via via come inserire queste funzionalità all’interno della nostra applicazione, ma prima di partire dovremmo avere almeno uno stralcio di piano.

Il buon senso del programmatore insegna che è sempre bene tenere distinte le funzionalità di un programma, al fine di renderlo più facile da mantenere, correggere e riutilizzare.

In questo nostro programma si notano almeno tre “parti” distinte..abbiamo la parte che si occupa di scaricare il file xml, la parte che si occupa di eseguire il parsing  e di generare gli url delle fotografie e la parte che le visualizza sullo schermo, tenteremo per quanto ci è possibile di tenere separate queste funzionalità.

Forti di questo piano creiamo un nuovo progetto con Xcode, consiglio di utilizzare View-based application come tipologia di progetto, e di chiamarlo devFlickr.

Ovviamente il nome non ha nessuna importanza ma se utilizzate lo stesso nome che ho usato io avrete meno difficoltà a seguire gli esempi.

La prima cosa che vogliamo fare è costruire una classe il cui compito è quello di scaricare il file xml dal sito di flickr.

Per far questo creiamo una nuova classe cliccando sul menù “file” e successivamente su “new file”. Dalla finestra che appare selezioniamo “objective-c class” dalla categoria “Cocoa Touch Class” avendo cura che nel menù a tendina in basso alla voce “subclass of” sia selezionato “NSObject”.

Chiamiamo la nostra classe “interestingness.m” e assicuriamoci che sia spuntata la casella “also create .h file”

NOTA: Questa che abbiamo appena eseguito è la procedura standard per la creazione di una nuova classe che eredita direttamente da NSObject, negli esempi a seguire quando ci capiterà di crearne altre, potrete fare riferimento a questo testo.

Questa classe avrà bisogno di almeno due membri, uno conterrà il file XML scaricato dal sito di flick e sarà di tipo NSData, l’altro lo utilizzeremo per memorizzare la chiave API ed è di tipo NSString.

NOTA: Una precisazione, mi capiterà di utilizzare i termini “membro”, “variabile”, “proprietà”…in realtà questi tre termini avrebbero significati diversi, ma per i nostri scopi questi termini indicano tutti il concetto di variabile interna di una classe.

Ricordiamo che questa classe eseguirà il download del file xml da un url costruito appositamente secondo le specifiche di flickr, però la prima parte di questo url è fissa, possiamo quindi, per rendere più leggibile il codice, inserirla in un costrutto #define.

A questo punto il file interestingness.h sarà questo:

#import 
#define INTERESTIGNESS_BASE_URL @"http://api.flickr.com/services/rest/?method=flickr.interestingness.getList"

@interface interestingness : NSObject {
	NSData		*interestingnessXML;
	NSString	*apikey;
}
@end

Per chi non avesse mai incontrato il costrutto #define chiariamo che molto semplicemente durante la fase di compliazione tutte le occorrenze nel nostro codice del termine INTERESTIGNESS_BASE_URL vengono sostituite con la stringa

@"http://api.flickr.com/services/rest/?method=flickr.interestingness.getList"

Passiamo ora al file interestingness.m, ovvero all’implementazione della nostra classe.

Avrete notato che non ho dichiarato come @property i membri della classe, inoltre non ho utilizzato neanche @syntetize, questo perchè ho notato che questi costrutti, che nascono per semplificare la vita al programmatore, in realtà confondono chi è alle prime armi.

Provvediamo quindi a creare (alla vecchia maniera) i medoti getter e setter per i membri che abbiamo definito, non sono altro che i metodi che dovremo invocare per leggere e scrivere i valori delle due variabili.

aggiungiamo quindi nel file questi metodi:

- (NSData *)getinterestingnessXML
{
	return interestingnessXML;
}

- (void) setinterestignessXML:(NSData *)anXML
{
	interestingnessXML = anXML;
}

- (NSString *)getapikey
{
	return apikey;
}

- (void) setapikey:(NSString *)anApiKey
{
	apikey = anApiKey;
}

Poichè chi utilizzerà questa nostra classe dovrà necessariamente, dopo averla istanziata, settare il valore di apikey, potrebbe essere carino fornire un metodo per fare entrambe le cose insieme.

creiamo quindi un nostro metodo initWithApiKey in questo modo:

- (id)initWithApiKey:(NSString *)anApiKey
{
	if (self = [super init])
    {
		[self setapikey:anApiKey];
    }
    return self;
}

Cosa fa questo frammento di codice? Serve per inizializzare l’oggetto, ovvero ad assegnare a tutte le variabili all’interno dell’oggetto i valori appropriati.

Ma il nostro oggetto eredita da NSObject quindi durante l’inizializzazione dobbiamo per prima cosa invocare il metodo init di NSObject (la nostra super-classe) in modo che l’oggetto stesso venga inizializzato. Viceversa se non avessimo scritto [super init] l’oggetto non sarebbe stato inizializzato ed il tentare di impostare [self setapikey] avrebbe generato chiaramente un errore.

Vediamo ora il metodo per effettuare il vero e proprio download del file.

Il codice è il seguente:

- (NSData *)downloadXML
{

	NSString *fullAddress = [NSString stringWithFormat:@"%@&api_key=%@",FLICKR_INTERESTIGNESS_GETLIST_URL,[self getapikey]];
	NSData *tmp = [NSData dataWithContentsOfURL:[NSURL URLWithString:fullAddress]];
	[self setinterestignessXML:tmp];
}

per prima cosa costruiamo l’indirizzo vero e proprio, poi utilizziamo il metodo dataWithContentsOfURL per effettuare il download del file xml, infine utilizziamo il metodo setter per assegnare alla variabile interestignessXML il valore corretto.

Con questo la nostra prima classe è quasi terminata.

Per completezza dovremmo inserire le dichiarazioni dei metodi all’interno del file .h per evitare warning in fase di compilazione e per aiutare Xcode con l’autocompletamento.

A questo punto potreste avere la smania di vedere all’opera questa classe…ancora non è il momento, ma se proprio non state nella pelle fate così:

editate il file devFlickrViewController.m aggiungendo in alto la stringa

#import “interestingness.h”

inoltre aggiungiamo questo metodo:

- (void)viewDidLoad {
    [super viewDidLoad];
	interestingness *inter = [[interestingness alloc] initWithApiKey:@"TUA_API_KEY"];
	[inter downloadXML];
	printf("FILE XML:\n %s",(char *)[[inter getinterestingnessXML] bytes]);
}

Cosa stiamo facendo?

Dichiariamo un oggetto di tipo “interestigness“, lo allochiamo e lo inizializziamo con il metodo “initWithApiKey“. Poi invochiamo il metodo “downloadXML” dell’oggetto appena dichiarato e infine accediamo alla sua proprietà “interestighessXML” attraverso il metodo “getInterestignessXML“.

Non fate caso al cast (char *)…serve in questo momento solo per far visualizzare il tutto sulla console.

Provate ad eseguire il tutto, dovreste vedere sul simulatore una semplice schermata grigia, mentre sulla console dovreste riuscire a vedere l’intero file XML appena scaricato.

Share this story:
  • tweet

Tags: API FlickrflickrIgnazio CalòTutorial Praticitutorial Xcode

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

  • Xcode 4: Distribuzione Ad Hoc delle applicazioni iPhone e iPad

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

    16 Novembre 2011 - 6 Comments
  • T#101 – Integrare AirPrint per stampare dalle applicazioni iPhone e iPad

    13 Settembre 2011 - 10 Comments

Author Description

3 Responses to “T#047 – Accedere a Flickr dalle nostre applicazioni iPhone (parte 2)”

  1. 30 Maggio 2010

    El Jobso

    Vi dico solo una cosa dato che sono rimasto senza parole: Complimenti!

  2. 28 Ottobre 2010

    Matteo

    Raga non va più il link del Source !

  3. 24 Marzo 2011

    Matteo

    Ciao ragazzi, ho trovato qualche piccolo errore di digitazione: Quando usiamo
    #define INTERESTIGNESS_BASE_URL
    Non dovrebbe essere
    #define INTERESTINGNESS_BASE_URL?
    Poi
    NSString *fullAddress = [NSString stringWithFormat:@”%@&api_key=%@”,FLICKR_INTERESTIGNESS_GETLIST_URL,[self getapikey]];

    Non dovremmo inserire INTERESTINGNESS_BASE_URL
    invece di
    FLICKR_INTERESTIGNESS_GETLIST_URL?

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