Actualiza Twitter usando CURL
| Posted in General | Posted on 04-03-2010
0
¿Y quien dijo que era difícil ;-)?
curl -u USUARIO:PASSWORD -d status="AQUÍ TU MENSAJE" http://api.twitter.com/1/statuses/update.json
¿Y quien dijo que era difícil ;-)?
curl -u USUARIO:PASSWORD -d status="AQUÍ TU MENSAJE" http://api.twitter.com/1/statuses/update.json
Encontré varios códigos por allí, pero nada más delicioso que la simplicidad:
<?php
function twitter_counter($username) {
$api = 'http://twitter.com/users/show/' . $username;
$xml = file_get_contents ( $api );
$profile = new SimpleXMLElement ( $xml );
$count = $profile->followers_count;
return $count;
}
echo twitter_counter("alexandergarzon");
?>
El código está ligeramente adaptado del original (con caché) http://ooyes.net/resources/twitter-followers-counter-php-script
Para un proyecto que estoy desarrollando debía mostrar los últimos X tweets de una cuenta en twitter sin usar JavaScript, sólo PHP; y además debía realizar las labores de “parsing” a las etiquetas # y @ para poder auto-enlazar a su correspondiente query de twitter y además, mostrar “hace cuánto fue escrita la entrada”, es decir: tiempo relativo.
Al no encontrar nada de esto en la web, me dí a la tarea de hacerlo yo mismo, uniendo varias piezas creadas por otros autores incluso en otro lenguajes de programación.
Debo decir que es perfectamente acoplable a cualquier framework en forma de un partial. Puedo decir que corre perfectamente con CodeIgniter.
A continuación, mi humilde aporte:
<?php
/**
* Visualizar Twitter RSS
* By: Alexander Garzon (www.php.com.ve)
* @param string $rss_twitter URL completa del feed RSS
* @style DIV class named rss_twitter
* @return html
*/
class RSS_Twitter {
//Determina si el número (en palabra) es plural si es mayor a 1
public static function Pluralidad($val, $qty) {
if ($val > 1) return $val.' '.$qty.'s';
else return $val.' '.$qty;
}
//Calcula el tiempo relativo (diferencia) según una determinada y el presente.
public static function TiempoRelativo($seconds) {
if (($seconds / 604800) > 1) return 'Hace '.RSS_Twitter::Pluralidad(round($seconds / 604800), 'semana');
elseif (($seconds / 86400) > 1) return 'Hace '.RSS_Twitter::Pluralidad(round($seconds / 86400), 'día');
elseif (($seconds / 3600) > 1) return 'Hace '.RSS_Twitter::Pluralidad(round($seconds / 3600), 'hora');
elseif (($seconds / 60 ) > 1) return 'Hace '.RSS_Twitter::Pluralidad(round($seconds / 60), 'minuto');
else return 'Hace '.RSS_Twitter::Pluralidad($seconds, 'segundo');
}
public static function FormatoTiempo($tiempocadena) {
$timestamp = strtotime($tiempocadena);
$diferencia = time() - $timestamp;
return RSS_Twitter::TiempoRelativo($diferencia);
}
public static function TweetFilter($tweet) {
//Filtra contenidos del tweet (para links, #tags y @respuestas
//Se elimina el nmombre del mismo autor en el mensaje (es redundante)
$pos = strpos($tweet, ":");
$salida = substr_replace($tweet, '', 0,$pos+2); // El +2 es refiere a el simbolo ':' y el espacio en blanco que le sigue.
//Agregamos links a los http
$salida = preg_replace('/(http:\/\/)(.*?)\/([\w\.\/\&amp;\=\?\-\,\:\;\#\_\~\%\+]*)/', '<a href="$0" onclick="window.open(this.href); return false;">$0</a>', $salida);
//Agregamos links a los @
$salida = preg_replace('/\B@([_a-zA-Z0-9-]+)/','@<a href="http://twitter.com/$1" onclick="window.open(this.href); return false;">$1</a>',$salida);
//Agregamos links a los #
$salida = preg_replace('/\B#([_a-zA-Z0-9-]+)/','<a href="http://search.twitter.com/search?q=%23$1" onclick="window.open(this.href); return false;">#$1</a>',$salida);
return $salida;
}
//Extrae y publica los tweets del RSS
public static function TweetReader($url) {
if (!@simplexml_load_file($url)) {
echo "Error enlazando a Twitter, intente de nuevo";
} else {
$feed = simplexml_load_file($url);
foreach ($feed->channel->item as $item) :
echo "<div class=\"rss_twitter\">";
echo $array['title'] = (RSS_Twitter::TweetFilter($item->title))."<br />".PHP_EOL;
echo "<a href=\"$item->link\" onclick=\"window.open(this.href); return false;\">".RSS_Twitter::FormatoTiempo($item->pubDate)."</a><br />".PHP_EOL;
echo "<br /></div>".PHP_EOL;
endforeach;
}
}
}
RSS_Twitter::TweetReader($rss_twitter);
?>
Lo único que nos falta es proveer la variable $rss_twitter que corresponde a la ruta absoluta del canal RSS de la cuenta Twitter que deseamos mostrar y además la cantidad de “tweets” que mostraremos, esa ruta viene siendo algo como por ejemplo:
http://twitter.com/statuses/user_timeline/28505702.rss?count=3
Donde 28505702 es el ID de la cuenta de Twitter y 3 es la cantidad de Tweets que mostraremos.
Espero les sea de utilidad.
ACTUALIZACIÓN 12/07/2010: Le he agregado una validación simple para en caso de que por alguna razón Twitter esté caído.
¿Se lo han preguntado alguna vez?, ¿no?… yo sí !
No soy matemático, pero soy programador y además de muy curioso, así que me puse a sacar la cuentas.
Este procedimiento aplica también para conocer cuantas combinaciones resultar de mezclar X cantidad de caracteres en una longitud Z de palabras, para formar una contraseña por ejemplo y medir así su “fortaleza”.
Primero partamos de este hecho: la cantidad de combinaciones se calcula: base (cantidad de elementos a combinar) elevado a la longitud de la palabra.
Veamos un ejemplo: números binarios (1 y 0), ¿cuántas combinaciones resultan si tenemos 3 de estos números binarios?
Si no conoces la ecuación seguramente harías esto:
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Y contando vemos que logramos 8 combinaciones !: pero hubiese resultado más fácil si calculamos: 2 elevado a 3 = 8 (¿de dónde saque el 2?… pues ¿cuántos caracteres teníamos a disposición para combinar? 1 y 0, que resultan en 2 caracteres)
Muy bien, supongo que ya entendimos como funciona la ecuación… ahora vayamos a lo que veníamos, ¿Cuantos enlaces puede crear un servicio acortador de URL?.
Usaré como referencia el famoso acortador de URL usado por el mismísimo twitter: bit.ly
Cada enlace único está formado por una combinación alfa-numérica (62 posibles caracteres) y de una longitud de hasta 6 dígitos.
Ok, analicemos:



ESO EQUIVALE A CASI 10 VECES LA POBLACIÓN MUNDIAL DE SERES HUMANOS EN TODO EL PLANETA !
Espero no haberlo aburrido ;)

Este es el resultado de mi experiencia con el uso de la red twitter, llegando a determinar un conjunto de normas que a mi juicio ayudan a mantenerse dentro del buen comportamiento y las buenas prácticas al usar dicha red.
De hecho el término Twitiquette se me ocurrió anoche mientras pensaba en escribir estás lineas… pero como cosa rara; siempre alguien más ya pensó en ello xD
Eso si, estas “normas” no están copiadas de ninguna otra parte y son el resultado de mi experiencia personal.