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\#$%&~/.\-;:=,?@\[\]+]*)#is», «\\1<a href=\»\\2\» target=\»_blank\»>\\2</a>», $sText );
$sText = preg_replace( «#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#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:\\2@\\3\»>\\2@\\3</a>», $sText );
$sText = preg_replace( «#(^|[\n ])(\#)([\w\#$%&~/.\-;:=,?@\[\]+]*)#is», «\\1\\2<a href=\»http://search.twitter.com/search?q=%23\\3\» target=\»_blank\»>\\3</a>», $sText );
$sText = preg_replace( «#(^|[\n ])(\@)([\w\#$%&~/.\-;:=,?@\[\]+]*)#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.
Espero que les halla funcionado, yo ya lo probe y funciono correctamente 🙂 Este articulo lo vi en Rutarelativa
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
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
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», «12@3«, $sText );
$sText = preg_replace( «#(^|[n ])(#)([w#$%&~/.-;:=,?@[]+]*)#is», «123», $sText );
$sText = preg_replace( «#(^|[n ])(@)([w#$%&~/.-;:=,?@[]+]*)#is», «123«, $sText );
$sText = substr( $sText, 1 );
return $sText;
}
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
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
Es cierto. Este metodo parece que ya no funciona.
Esta pagina explica bien la nueva forma en que hay que hacerlo:
http://blog.timersys.com/tutoriales/actualizar-twitter-a-traves-de-php-y-oauth/
Saludos