miércoles, 25 de enero de 2012

Diseccionando un Tweet




Volvemos a la carga después de un mes de descanso navideño con el que entre vacaciones y exámenes me ha sido imposible actualizar. El de hoy es un artículo que espero que llegue a más gente de la habitual puesto que se trata algo de carácter más general y que usan millones de personas.

Aprovechando un estudio que he tenido que hacer para mi PFC, he tenido que investigar qué campos se envían en un tweet. Es fácil pensar que apenas viajará información en esa cajita que nos presenta Twitter para escribir nuestros pensamientos o Lo que está pasando pero nada más lejos de la realidad, un tweet es una cantidad bestial de información donde casi lo que menos importa es lo que estás poniendo en la cajita.

La información está separada por 2 partes, por un lado las partes que están documentadas por Twitter y por otro las que se han tenido que investigar.



Información de un Tweet documentada


{"id"=>id del tweet,
"text"=>texto del tweet,
"created_at"=>fecha de creación del tweet,
"in_reply_to_user_id"=>id del usuario al que le hace reply,
"in_reply_to_screen_name"=>nombre del usuario al que le hace reply,
"in_reply_to_status_id"=>id del tweet al que se le hace reply,
"favorited"=>favorito,
"truncated"=>si está cortado el texto por exceder los 140 caracteres,
"user"=>
{"id"=>id del usuario,
"screen_name"=>alias,
"name"=>nombre,
"description"=> bio,
"url"=>página personal,
"location"=>localización,
"profile_background_color"=>color del fondo del perfil,
"profile_background_image_url"=>url de la imagen del fondo de perfil,
"profile_background_tile"=>si tiene o no definido un tile,
"profile_image_url"=>url de la imagen de perfil,
"profile_link_color"=>color del link del perfil,
"profile_sidebar_border_color"=>color del borde de la barra lateral del perfil,
"profile_sidebar_fill_color"=>color de relleno de la barra lateral del perfil,
"profile_text_color"=>color del texto del perfil,
"created_at"=>fecha de creación de la cuenta,
"contributors_enabled"=>si permite colaboradores en la cuenta,
"favourites_count"=>tweets favoritos,
"statuses_count"=>tweets enviados,
"friends_count"=>following,
"time_zone"=>zona horaria,
"utc_offset"=>desfase horario,
"lang"=>idioma,
"protected"=>si tiene la cuenta protegida,
"followers_count"=>followers,
"geo_enabled"=>si está la geolocalización activada,
"notifications"=>si tiene notificaciones activadas,
"following"=>DEPRECATED/DESACTUALIZADO,
"verified"=>si es cuenta verificada},
"contributors"=>id de los colaboradores,
"geo"=>DEPRECATED/DESACTUALIZADO,
"coordinates"=>coordenadas de la localización,
"place"=>
{"id"=>id del lugar,
"url"=>url que almacena metainformación adicional,
"name"=>nombre del lugar,
"full_name"=>nombre completo,
"place_type"=>tipo de lugar,
"country_code"=>código del país,
"country"=>país,
"bounding_box"=>
{"coordinates"=>coordenadas del lugar,
"type"=>tipo de forma que representan las coordenadas}},
"source"=>fuente de publicación}


Información de un Tweet que se ha tenido que investigar

{“annotations”=> ampliación de futuro, todavía no implementado,
“contributors”=>
{“id_str”=>id en string del colaborador,
“screen_name”=>nombre del colaborador},
“entities”=>
{“hashtags”=>
{“indices”=>dónde se encuentra el hashtag (inicio,fin),
“text”=>hashtag},
“urls”=>
{“indices”=>dónde se encuentra la url en el tweet,
“url”=>url mostrada en el tweet,
“display_url”=>url intermedia,
“expanded_url”=>url expandida},
“media”=>
{“type”=>tipo de contenido,
“sizes”=>
{“thumb”=>información del thumb,
“size”=>
{“h”=>altura,
“resize”=>tipo de cambio de tamaño,
“w”=>ancho},
“large”=>información de la versión larga,
“medium”=>información de la versión normal,
“small”=>información de la versión normal},
“índices”=>dónde se encuentra la url,
“url”=>url del contenido mostrada al cliente,
“media_url”=>url que apunta directamente al contenido,
“display_url”=>url mostrada,
“expanded_url”=>url completa,
“id”=>id del contenido,
“id_str”=>id en string del contenido,
“media_url_https”=>url https del contenido},
“user_mentions”=>
{“id=>id del usuario mencionado,
“id_str”=>id del usuario mencionado en string,
“índices”=>índices entre los cuales se encuentra la mención,
“name”=>nombre del usuario mencionado,
“screen_name”=>versión screen del nombre del usuario mencionado},
},
“id_str”=>id del tweet en string,
“in_reply_to_status_id_str”=>id en string del usuario al que le hace el reply,
“retweet_count”=>número de veces que se ha retwiteado,
“retweeted”=>si es un retwiteo,
“user”=>
{“id_str”=>id en string del usuario,
“default_profile”=>perfil por defecto,
“default_profile_image”=>imagen por defecto del perfil,
“follow_request_sent”=>petición de follow enviada,
“is_translator”=>esta traducido,
“listed_count”=>listas que posee,
“profile_background_image_url_https”=>url https de la imagen del fondo de perfil,
“profile_image_url_https”=>url https de la imagen de perfil,
“profile_use_background_image”=>si usa una imagen de fondo de perfil,
“show_all_inline_media”=>si muestra todo el contenido multimedia,},
}


Pues "solo" esto es lo que viaja en cada tweet que sale enviado cada vez que le dais al botón de publicar. Además esto es algo público y que puede tener acceso cualquier persona puesto que acceder al Streaming de Twitter es excesivamente sencillo (desde el punto de vista del desarrollador) y se ha optado por utilizar el formato en el que Twitter te proporciona la información (JSON).


Por otro lado, con el tema de las limitaciones de los servidores de descarga directa, he solucionado el problema que había al descargar el proyecto de Log4J que estaba subido en fileserve, ya está operativo el enlace otra vez.

Fuente de la imagen: Twitter