Actualizar Estado de Twitter con PHP



twitter_php

En esta oportunidad les mostrare lo fácil que es actualizar nuestro esta de Twitter o “Twittear” desde PHP usando la API Twitter PHP.

Para ello debemos usar el siguiente código, solo les explicare las partes que debemos modificar para que el funcione, además, vale aclarar que dividiré el código en dos partes ya que ambas partes se pueden poner en archivos diferentes haciendo la debida inclusión de el archivo para poder trabajar sobre esta API de Twitter, veamos:

<?php

class twitter
{
private $FUser;
private $FPass;
private $FError;

public function __construct($sUser = false, $sPass = false)
{
$this->FUser = $sUser;
$this->FPass = $sPass;
}

public function setUser($sUser)
{
$this->FUser = $sUser;
}

public function setPass($sPass)
{
$this->FPass = $sPass;
}

public function getUser()
{
return $this->FUser;
}

public function getPass()
{
return $this->FPass;
}

public function getError()
{
return $this->FError;
}

public function setStatus($sStatus)
{
// Vars
$cCurl = null;
$aResponse = null;

// Check user and pass
if( $this->FUser === false || $this->FPass === false )
{
$this->FError = ‘No se ha especificado el nombre de usuario ni contraseña para establecer los datos.’;
return false;
}

// Update status
$cCurl = curl_init();
curl_setopt( $cCurl, CURLOPT_URL, ‘http://twitter.com/statuses/update.json’ );
curl_setopt( $cCurl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $cCurl, CURLOPT_POST, 1 );
curl_setopt( $cCurl, CURLOPT_POSTFIELDS, “status=” . $sStatus );
curl_setopt( $cCurl, CURLOPT_USERPWD, $this->FUser . “:” . $this->FPass );

$aData = curl_exec( $cCurl );
$aResponse = curl_getinfo( $cCurl );
curl_close( $cCurl );

// If the request return code 200
if( intval( $aResponse[‘http_code’] ) == 200 )
return true;
// If the request return other code
else
{
$this->FError = ‘La petición de datos a twitter no se pudo realizar. Error: ‘ . $aResponse[‘http_code’];
return false;
}
}

private function textLinks($sText)
{
// Convert the text into url, mailto, twitter searchs and twitter users
$sText = preg_replace( ‘#(script|about|applet|activex|chrome):#is’, “\\1:”, $sText );
$sText = ‘ ‘ . $sText;
$sText = preg_replace( “#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,[email protected]\[\]+]*)#is”, “\\1<a href=\”\\2\” target=\”_blank\”>\\2</a>”, $sText );
$sText = preg_replace( “#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,[email protected]\[\]+]*)#is”, “\\1<a href=\”http://\\2\” target=\”_blank\”>\\2</a>”, $sText );
$sText = preg_replace( “#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i”, “\\1<a href=\”mailto:\\[email protected]\\3\”>\\[email protected]\\3</a>”, $sText );
$sText = preg_replace( “#(^|[\n ])(\#)([\w\#$%&~/.\-;:=,[email protected]\[\]+]*)#is”, “\\1\\2<a href=\”http://search.twitter.com/search?q=%23\\3\” target=\”_blank\”>\\3</a>”, $sText );
$sText = preg_replace( “#(^|[\n ])(\@)([\w\#$%&~/.\-;:=,[email protected]\[\]+]*)#is”, “\\1\\2<a href=\”http://twitter.com/\\3\” target=\”_blank\”>\\3</a>”, $sText );
$sText = substr( $sText, 1 );

return $sText;
}

public function getLastStatus()
{
// Vars
$aData = null;

// Get XML
$aData = $this->process();

// Return the number of followers
return $this->textLinks( $aData->status->text );
}

public function getPrivateLastStatus()
{
// Vars
$cCurl = null;
$aData = null;

// Check user and pass
if( $this->FUser === false || $this->FPass === false )
{
$this->FError = ‘No se ha especificado el nombre de usuario ni contraseña para obtener los datos.’;
return false;
}

// Obtain the last status
$cCurl = curl_init( “https://twitter.com/statuses/user_timeline.xml” );
curl_setopt( $cCurl, CURLOPT_HEADER, 1 );
curl_setopt( $cCurl, CURLOPT_HTTPHEADER, array( “Content-Type: text/xml; charset=utf-8” ) );
curl_setopt( $cCurl, CURLOPT_TIMEOUT, 30 );
curl_setopt( $cCurl, CURLOPT_USERPWD, $this->FUser . “:” . $this->FPass );
curl_setopt( $cCurl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $cCurl, CURLOPT_SSL_VERIFYPEER, 0 );
curl_setopt( $cCurl, CURLOPT_SSL_VERIFYHOST, 0 );

$aData = curl_exec( $cCurl );
$aData = strstr( $aData, ‘<?’ );
$aResponse = curl_getinfo( $cCurl );
curl_close( $cCurl );

// If the request return code 200
if( intval( $aResponse[‘http_code’] ) == 200 )
{
$aData = new SimpleXMLElement( $aData );
return $this->textLinks( $aData->status[0]->text );
}
// If the request return other code
else
{
$this->FError = ‘La petición de datos a twitter no se pudo realizar. Error: ‘ . $aResponse[‘http_code’];
return false;
}
}

public function getStatusesCount()
{
// Vars
$aData = null;

// Get XML
$aData = $this->process();

// Return the statuses count
return $aData->statuses_count;
}

public function getFriendsCount()
{
// Vars
$aData = null;

// Get XML
$aData = $this->process();

// Return the friend count
return $aData->friends_count;
}

public function getFollowersCount()
{
// Vars
$aData = null;

// Get XML
$aData = $this->process();

// Return the number of followers
return $aData->followers_count;
}

public function getUserData()
{
// Return the user data
return $this->process();
}

private function process()
{
// Vars
$cCurl = null;
$aData = null;
$aResponse = null;

// Check user
if( $this->FUser === false )
{
$this->FError = ‘No se ha especificado el nombre de usuario para obtener los datos.’;
return false;
}

// Obtain the XML
$cCurl = curl_init();
curl_setopt( $cCurl, CURLOPT_URL, ‘http://twitter.com/users/show/’ . $this->FUser . ‘.xml’ );
curl_setopt( $cCurl, CURLOPT_HTTPHEADER, array( “Content-Type: text/xml; charset=utf-8” ) );
curl_setopt( $cCurl, CURLOPT_TIMEOUT, 30 );
curl_setopt( $cCurl, CURLOPT_RETURNTRANSFER, 1 );

$aData = curl_exec( $cCurl );
$aResponse = curl_getinfo( $cCurl );
curl_close( $cCurl );

// If the request return code 200
if( intval( $aResponse[‘http_code’] ) == 200 )
{
$aData = new SimpleXMLElement( $aData );
return $aData;
}
// If the request return other code
else
{
$this->FError = ‘La petición de datos a twitter no se pudo realizar. Error: ‘ . $aResponse[‘http_code’];
return false;
}
}
}

?>

Esta parte del codigo de arriba podemos dejarla en un archivo aparte y la siguiente parte del codigo (la de abajo) podemos ponerla en donde vamos a incluir el ciclo para twittear o como lo queramos implementar, usando un “requiere” para que se ejecute también la parte de arriba, veamos:

<?php

require “archivo_de_arriba.php”;

$twitter = new twitter( ‘usuario_twitter’, ‘password_twitter’ );

if( $twitter->setStatus( ‘Escribe aquí tu nuevo estado en Twitter’ ) === false )
die( $twitter->getError() );

?>

Analicemos linea por linea, primero en el requiere, debemos modificar el nombre de el archivo donde se encuentra la primera parte del código, en la siguiente linea debemos poner nuestro usuario y contraseña de la cuenta de Twitter, y en la siguiente debemos modificar “Escribe aquí tu nuevo estado en Twitter” y poner lo que queremos Twittear.

Nota: Si queremos poner todo el codigo en un mismo archivo simplemente debemos borar la linea del “Require”.

Espero que les halla funcionado, yo ya lo probe y funciono correctamente 🙂 Este articulo lo vi en Rutarelativa

7 thoughts on “Actualizar Estado de Twitter con PHP

  1. Me saca estos errores:
    Warning: Unexpected character in input: ‘\’ (ASCII=92) state=1 in /home/a1198044/public_html/prova.php on line 81
    ——————————————————————————-
    Parse error: syntax error, unexpected T_LNUMBER in /home/a1198044/public_html/prova.php on line 81

    He copiado el código tal cual y he puesto el nombre y el pass :S
    Que me pasa? que puedo hacer?
    Gracias de antemano, salu2

  2. me da el mismo error

    Warning: Unexpected character in input: ‘\’ (ASCII=92) state=1 in /home/a1198044/public_html/prova.php on line 81
    ——————————————————————————-
    Parse error: syntax error, unexpected T_LNUMBER in /home/a1198044/public_html/prova.php on line 81

    saludos

  3. amigo reemplaza de la linea 76 a 87
    private function textLinks($sText)
    {
    // Convert the text into url, mailto, twitter searchs and twitter users
    $sText = preg_replace( ‘#(script|about|applet|activex|chrome):#is’, “1:”, $sText );
    $sText = ‘ ‘ . $sText;
    $sText = preg_replace( “#(^|[n ])([a-z0-9&-_.]+?)@([w-]+.([w-.]+.)*[w]+)#i”, “1[email protected]“, $sText );
    $sText = preg_replace( “#(^|[n ])(#)([w#$%&~/.-;:=,[email protected][]+]*)#is”, “123”, $sText );
    $sText = preg_replace( “#(^|[n ])(@)([w#$%&~/.-;:=,[email protected][]+]*)#is”, “123“, $sText );
    $sText = substr( $sText, 1 );

    return $sText;
    }

  4. Hola. Interesante.
    Pero al aplicarlo, me salta este error:
    Fatal error: Call to undefined function curl_init() in… …on line 54
    ¿Por qué razón puede ser?
    La funcion no está definida en el “archivo_de_arriba”,
    ¿Hay que descargarse otro archivo además de este?
    Gracias

  5. Amigos, creo que desde ayer, esto dejó de funcionar. El api de Twitter ahora obliga a usar OAuth. Estoy buscando información sobre su implementación.

    Saludos

Deja un comentario

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