AVISO: Cualquier pregunta que no cumpla ninguno de estos criterios podrá ser borrada sin previo aviso.

Hola a todos,

Estoy haciendo una aplicacion, que entre otras cosas lee tweets de un JSON. Hasta aqui ningun problema... leo los tweets, y los muestro sin problemas en una tabla.

Lo que no se como hacer ahora es que las mentions o hashtags que hay en el mensaje se resalten como un link y pueda accederse con el navegador. Es decir que @urikpd o #wikileaks por ejemplo respondan como un link y ver o la cuenta del mention o la busqueda del hashtag.

Muchas gracias por adelantado

preguntado 09 Dic '10, 11:45

urikpd's gravatar image

urikpd ♦
681657881

editó 09 Dic '10, 13:58

Blind's gravatar image

Blind ♦♦
1.3k31227


Para hacer eso lo mejor es usar el control UITextView, el cual te permite detectar automáticamente los enlaces dentro del texto del tweet. Este control debe ser no editable y tienes que indicarle mediante la propiedad dataDetectorTypes que contenido quieres detectar, en tu caso enlaces (Links). Yo en el siguiente código he puesto que detecto todo: enlaces, teléfonos, eventos y direcciones. La instancia texto es de tipo UITextView.

texto.editable = NO;
texto.dataDetectorTypes = UIDataDetectorTypeAll;

Con UITextView solo te va a permitir parsear link de tipo HTTP. Tal y como comenta Blind, este objeto no te va a servir si quieres parsear enlaces de twitter como #hashtag. Para ello, tendrías que usar el control UIWebView (en el ejemplo es la intancia llamada web), dentro de una celda personalizada (esto se explica en el tutorial que he puesto en los comentarios). La idea sería recoger el texto del tweets buscar los mentios y hashtags y crear un enlace html:

<a href="hashtag=mihashtag">#mihashtag</a>

Y entonces rellenar el objeto UIWebView con el método loadHTMLString:baseURL

NSString *html = @"<a href="hashtag=mihashtag">#mihashtag</a>";
[web loadHTMLString:html baseURL:[NSURL URLWithString:@""]];
[[[web subviews] lastObject] setScrollEnabled:NO]; // Evitar efecto bounces

Luego para recuperar la pulsación del usuario, tienes que implementar el protocolo: UIWebViewDelegate y hacer el tratamiento de lógica de negocio en el método (yo solo muestro la url pulsada por consola):

-(BOOL)webView:(UIWebView *) webView shouldStartLoadWithRequest:(NSURLRequest *) request navigationType:(UIWebViewNavigationType) navigationType {
NSLog([[request URL] absoluteString]); //Aquí coges la url, 
return NO; // Devuelve siempre NO, para que no cargue la url ficticia

}

El inconveniente que le veo a esta situación es que usar un objeto UIWebView para cada celda, puede consumir mucha memoria.

enlace permanente

respondido 09 Dic '10, 12:40

Davix's gravatar image

Davix ♦
2.0k81636

editó 09 Dic '10, 16:40

Y se puede usar dentro de una tabla? Lo digo pq yo para mostrar los tweets uso esto: cell.textLabel.text = [[[jsonArray objectAtIndex:indexPath.row]objectForKey:@"Tweet"] objectForKey:@"text"]; y no puedo usar cell.textLabel.text.editable = NO; Gracias por tu respuesta tan rapida!

(09 Dic '10, 12:45) urikpd ♦

Con cell.textLabel.text, no te vale. Tienes que hacer celdas personalizadas para esa tabla y poder usarla como un NSView normal añadiendo el UITextView. Entiendo que el tema puede parecer "lioso" al principio, te doy la URL de un tutorial donde explican paso a paso como personalizar celdas de una tabla: http://blancer.com/tutorials/i-phone/25543/iphone-programming-tutorial-part-6-creating-custom-uitableviewcell-using-interface-builder-uitableview/

Si tienes más dudas, coméntalo a ver si podemos ayudarte. Un placer ayudar.

(09 Dic '10, 13:02) Davix ♦

Gracias, seguire este tutorial a ver!

(09 Dic '10, 14:09) urikpd ♦

Yo pienso que tendras que parsear cada tweet, lo que comenta @Davix no creo que te vaya a detectar los mentions y los hastags, y ni mucho menos convertírtelos automáticamente en enlaces xD!

enlace permanente

respondido 09 Dic '10, 14:18

Blind's gravatar image

Blind ♦♦
1.3k31227

Tienes razón, solo se parsean los enlaces a URL de HTTP. He actualizado el ejemplo usando el objeto UIWebView, realizando un parseo manual.

(09 Dic '10, 16:34) Davix ♦

Hola Davix, ¿Me podrías poner como has realizado el parseo manual?Tengo el mismo problema que tu. Obtengo el texto del tweet del JSON pero tengo que convertir los hashtag. Muchas gracias

(18 Ene '11, 16:28) Rastlein
-1

Si le das Show Package Contents a la app de Twitter, hay varios JS, me parece que uno de esos puede tener un parser para los tweets.

Saludos

enlace permanente

respondido 18 Ene '11, 17:48

homer0's gravatar image

homer0
3502313

Y siendo el código probablemente propiedad de Twitter estarías cometiendo un delito.

Mi recomendación es que no utilices código JS “encontrado” en otras aplicaciones.

(20 Ene '11, 00:24) YoNoSoyTu

Hola,

Si, disculpa, la verdad que como escribi el mensaje, sonaba medio mal. Pero capaz que de ese codigo podes sacar algo util, no me referia a copiarlo completamente, pero ver como hace el parseado capaz que ayuda a hacer uno propio, y ni siquiera es mucha ciencia, son un par de expresiones regulares seguramente.

Nuevamente, disculpa si se entendio mal. Saludos

(20 Ene '11, 01:21) homer0
Tu respuesta:
Activar/desactivar vista previa