Revista Informática

Clase en PHP para bot de twitter/identi.ca

Publicado el 19 octubre 2010 por Angelverde

Hace rato que deseaba un bot para microbbloging, después de leer una entrada sobre una clase de php para YouTube me surgió la idea de construirme mi propia clase.

La verdad que es una clase de lo más simple y llana, mal escrita y mal planeada, exactamente es la primera versión y así la publico para que ustedes también se den una idea, la usen, la reutilicen o la construyan desde cero, como más les convenga.

Les advierto que de PHP apenas conozco que sirve para la web 2.0 o eso me han dicho, además recién estoy aprendiendo POO así que no me hago responsable por los daños estructurales en su cerebro que este codigo 0.0.1 les pueda ocasionar.

La pieza de código que observarán es la que hace funcionar al bot de twitter @TambienYo_ que responde a todos los tweets que tienen la palabra estoy con alguna de las respuestas genéricas al azar. Actualmente trabaja con TTytter un cliente con autenticación OAuth hecho en perl para la terminal.

<?php
/*
* Name: Clase para responder a un tweet con la palabra “estoy”
* Description: Obtiene un tweet desde el buscador y le responde aleatoriamente
* Development: Angelverde
* Site: http://angelverde.info
* License: GNU GENERAL PUBLIC LICENSE (http://www.gnu.org/licenses/gpl.html)
* Version: 0.1
*/

class tw
{
var $data= ”;
var $tweet = ”;

public function tw()
{
$url = “http://search.twitter.com/search.atom?lang=es&q=estoy&show_user=true&rpp=1″;
$browser_id = “none”;
$curl_handle = curl_init();
$options = array
(
CURLOPT_URL=>$url,
CURLOPT_HEADER=>false,
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_USERAGENT=>$browser_id
);
curl_setopt_array($curl_handle,$options);
$server_output = curl_exec($curl_handle);
curl_close($curl_handle);

$this->data=$server_output;

$startString = ‘<content type=”html”>’;
$endString = ‘</content>’;

$tempString = strstr($server_output, $startString);

$endLocation = strpos($tempString, $endString);
$content = substr($tempString, 0, $endLocation);
$content = substr($content,strlen($startString));
$content = htmlspecialchars_decode($content);
$content = strip_tags($content);

$content = html_entity_decode($content);
$content = preg_replace(“%&apos;%is”,”‘”,$content);

$content = preg_replace(“%&#[^;]*;%is”,”",$content);
//    $content = preg_replace(‘%</?a[^>]*>%is’,”,$content);

$this->tweet=$content;
}

public function getTweet()
{
return $this->tweet;
}

public function getAutor()
{
$startString = “<uri>”;
$endString = “</uri>”;

$starLocation = strpos($this->data, $startString);
$tempString = substr($this->data, $starLocation);

$endLocation = strpos($tempString, $endString);
$autor = substr($tempString, 0, $endLocation);

if (empty($autor))
{
$autor=false;
}
else
{
$autor=substr($autor,strlen($startString));
}

$autor =  substr($autor,19);

return $autor;
}

public function getRespuesta()
{
$respuesta = $this->tweet;

$opciones = array(   // se pueden añadir respuestas al gusto, sin preocuparse por nada
0 => ‘ | igual que yo’,
1 => ‘ | pues yo igual’,
2 => ‘ | ya somos dos’,
3 => ‘ | exactamente lo mismo’,
4 => ‘ | yo tambien’
);
$clave = mt_rand(0, count($opciones)-1);

$reply = $opciones[$clave];

if (strlen($respuesta) + (strlen($reply)+8) >= 140 ) {
$respuesta = substr($respuesta, 0, 140-((strlen($reply)+8))); //si la respuesta sobrepasa los 140 caracteres
$respuesta = $respuesta.”…”;
}

$ini = “RT @”;

$respuesta = $ini.$respuesta.$reply; //compone la respuesta

return $respuesta;

}

public function respuesta() //¿tiene respuesta? busca un @
{
$tw = $this->tweet;
if (preg_match(‘/@/i’,$tw))
return true;
else
return false;
}

}

?>

Clic aquí para descargar el archivo en mi cuenta de DropBox.

Este es un ejemplo de como se usaría la clase:

<?php
require_once ‘tw.class.php’;

$tweet = new tw();
$handle = fopen(‘contenido’, ‘w’);

if(!$tweet->respuesta()) {
//   echo $tweet->getRespuesta();
fwrite($handle, $tweet->getRespuesta());
fclose($handle);
echo “$i. “.$tweet->getRespuesta().”\n”;
exec(‘perl tyytter.pl contenido’);
//   break;
}
?>

El exec es para ejecutar el cliente, si se trata de identi.ca aún se puede hacer la autenticación básica. El demo lo puedes ver aquí. Aún no le pongo algún nombre a la clase, es más no sé si se bautizan las clases con algún nombre, a este simplemente le puse tw.class.php ¿alguna sugerencia?

Comparte el Mensaje: email Facebook Twitter Identi.ca FriendFeed MySpace Google Bookmarks del.icio.us Bitacoras.com Wikio Meneame Digg BarraPunto Slashdot Ping.fm RSS PDF

Articulos Relacionados


Volver a la Portada de Logo Paperblog

Dossier Paperblog