Clase en PHP para bot de twitter/identi.ca

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 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 @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 .

<?php
/*
* Name: Clase para responder a un tweet con la palabra “estoy”
* Description: Obtiene un tweet desde el buscador y le responde aleatoriamente
* Development:
* 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 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 con otros

6 pensamientos en “Clase en PHP para bot de twitter/identi.ca”

  1. Yo tengo la costumbre de poner privadas todas las propiedades, y acceder a ellas a través de métodos, pero a mi parecer la clase está muy bien para estar empezando y para el tiempo que te llevó.
    Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *