sábado, 15 de agosto de 2009

Glooby



Que es Glooby?.

Glooby, es una aplicacion robusta qué te permitira ver las calles de cualquier ciudad de cualquier pais.

Con glooby, podras ajustar a traves de un pequeño "deslizador" qué imagen quieres ver en el momento que tu desees, ademas de poder descargar las imagenes qué visionas en la pantalla de tu ipod/iphone, para poder visualizarlas cuando tu quieras, o imprimirlas directamente desde tu mac.

Os dejo una demostracion, de lo qué realmente es capaz de hacer Glooby.

Saludos.




viernes, 14 de agosto de 2009

Google Maps API ( Implementacion de google maps PARA IPHONE )

En esta pequeña entrada pretendo presentar un nuevo juguete, para los hackers qué visiteis mi blog.

En concreto, es un pequeño wrapper qué interactua con google maps, y permite hacer el uso de sus funciones minimamente en un entorno mobil.

El codigo de dicho wrapper lo puedes encontrar un poco mas abajo, a sí como un pequeño ejemplo de como realizar un programa con dicho wrapper.

Saludos, y espero qué os lo paseis muy bien con dicho codigo.


//

// GoogleMapsApi.m

// GloobyMaps

//

// Created by Moises Encinas on 13/08/09.

//


#import "GoogleMapsApi.h"




@implementation GoogleMapsApi


@synthesize city;


-(BOOL)isNull:(NSString*)character{

BOOL success = FALSE; //por defecto le decimos qué no esta en blanco.

if (character == nil ){

success = TRUE;

}

return ( success );

}

-(NSString*)getMainUrl:(NSString*)key{

apiKey = [self setApiKey:key];

NSString * url = @"http://maps.google.com/staticmap?center=";

NSString * resultUri = [url stringByAppendingString:latitude];

NSString * coma = [resultUri stringByAppendingString:@","];

NSString * resultUrl = [coma stringByAppendingString:longitud];

NSString * semFinalUrl = [resultUrl stringByAppendingString:@"&format=mobile&zoom=8&size=600x375&key="];

NSString * finalUrl = [ semFinalUrl stringByAppendingString:apiKey];

return ( finalUrl );

}

-(void)checkCodeResponse;{

NSString * cityappend = self.city;

NSString * urlFinal = @"&output=csv&key=MI-KEY-API";

NSString * urlFinal2 = [cityappend stringByAppendingString:urlFinal];

NSString * encoded = [ self urlEncode:urlFinal2];

NSString * urlPrincipal = @"http://maps.google.com/maps/geo?q=";

NSString * resultPrincipal = [urlPrincipal stringByAppendingString:encoded];

NSURL * url = [NSURL URLWithString:resultPrincipal];

if ( url != nil ){

NSString * jsonResponse = [[NSString alloc]initWithContentsOfURL:url];

NSArray * arrayDevuelto = [jsonResponse componentsSeparatedByString:@","];

if ( [self isNull:[arrayDevuelto objectAtIndex:0]] ){

NSLog(@"En blanco");

}else{

if ( [[ arrayDevuelto objectAtIndex:0] isEqualToString:@"200"] ){

NSLog(@"Respuesta correcta");

latitude = [arrayDevuelto objectAtIndex:2];

longitud = [arrayDevuelto objectAtIndex:3];

NSLog(longitud);

NSLog(latitude);

}else if ( [[arrayDevuelto objectAtIndex:0] isEqualToString:@"400"]){

NSLog(@"Error analizando la solicitud");

}else if ( [ [ arrayDevuelto objectAtIndex:0] isEqualToString:@"500"] ){

NSLog(@"Error procesando la solicitud solicitada");

}else if ( [ [ arrayDevuelto objectAtIndex:0] isEqualToString:@"601"] ){

NSLog(@"No se ha establecido ningun valor de busqueda");

}else if ( [[ arrayDevuelto objectAtIndex:0] isEqualToString:@"602"] ){

NSLog(@"No se ha encontrado ninguna ubicacion geografica");

}else if ( [[ arrayDevuelto objectAtIndex:0] isEqualToString:@"603"] ) {

NSLog(@"No se ha podido devolver el codigo grografico de la ruta por por motivos juridicos");

}else if ( [[ arrayDevuelto objectAtIndex:0] isEqualToString:@"610"] ){

NSLog(@"Clave proporcionada invalida");

}else if( [[ arrayDevuelto objectAtIndex:0] isEqualToString:@"620"] ){

NSLog(@"La clave proporcionada ha sobrepasado el limite de solicitudes");

}

}

}

}

-(NSString*)urlEncode:(NSString*)param{

NSString *encoded=[param stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

return (encoded);

}


-(UIImage*)downloadMap:(NSString*)key{

NSLog([self getMainUrl:@"MI-API-KEY"]);

NSURL * urlStream = [NSURL URLWithString:[self getMainUrl:@"MI-API-KEY"]];

NSData * data = [[NSData alloc]initWithContentsOfURL:urlStream];

UIImage * resultImagen = [[UIImage alloc]initWithData:data];

return ( resultImagen );

}


-(NSString*)setApiKey:(NSString*)apiResult{

apiKey = apiResult;

return ( apiKey );

}

@end



//

// GoogleMapsApi.h

// GloobyMaps

//

// Created by Moises Encinas on 13/08/09.

//


#import



@interface GoogleMapsApi : NSObject {

NSString * apiKey;

NSString * latitude;

NSString * longitud;

NSString * city;

}


@property(nonatomic,retain)NSString * city;


-(NSString*)setApiKey:(NSString*)apiKey;

-(BOOL)isNull:(NSString*)character;

-(void)checkCodeResponse;

-(UIImage*)downloadMap:(NSString*)key;

-(NSString*)urlEncode:(NSString*)urlEncoded;

-(NSString*)getMainUrl:(NSString*)key;



@end



//Programa de ejemplo.


-(IBAction)parseJsonContent{

GoogleMapsApi * api = [[GoogleMapsApi alloc]init];

api.city = [bar text];

UINavigationItem * item = [[UINavigationItem alloc]initWithTitle:[api city]];

viewImage.hidden = YES;

[barTitle pushNavigationItem:item animated:YES];

[api checkCodeResponse];

NSLog(@"Requesting for..");

NSLog([bar text]);

[view reload];

[view loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[api getMainUrl:@"MI-API-KEY"]]]];

}


jueves, 13 de agosto de 2009

Yahoo Image Searcher ( IPHONE )




Qué es Yahoo Iphone Image Searcher?.

Glooby, pretende ser una implementacion de un motor multiprotocolo para el iphone, qué soporte google maps,yahoo search, msn live search, y google search en un sola libreria, permitiendo al usuario poder escojer con qué motor de busqueda realizar sus busquedas ( valga la redundancia ) .

Lo qué os muestro en este video, es una sencilla interfaz qué hace uso de dicho motor, para parsear las busquedas desde un determinado sitio remoto, en realidad estos servicios ofrecen sus resultados en diversos formatos qué, el usuario puede aprovechar para parsear los resultados con una libreria especifica qué se encargue de "trozear" el codigo xml y lo almacene en vectores autodimensionados, para seguidamente poder acceder a sus elementos de 0 asta el numero de resultados qué se haya especificado en la query de busqueda, una vez tengas el vector autodimensionado con los elementos indexados en sus determinadas posiciones, se crea una variable qué ira incrementando un valor si el valor de dicha variable es menor a los valores contados de determinado vector evaluado, una vez qué se llega al numero de elementos almacenados en el vector, se establece la variable a 0, por lo qué se produce un bucle continuo, y no se producen errores "fatidicos" para qué el software no busque elementos en posiciones qué no existen.

Saludos, y espero qué disfruteis de esta pequeña demostracion.

Saludos.