12 de febrero de 2012

Utilizar API de Twitter con PHP

Utilizar API de Twitter con PHP:

Twitter es una de las redes sociales de mayor crecimiento, como ya todos sabemos permite a los usuarios postear mensajes de una longitud reducida en número de caracteres. A través de las API de Twitter cualquiera puede crear aplicaciones que comuniquen con el servicio de la mencionada red social.

Hay un gran número de posibilidades si nos planteamos comunicar nuestro sitio web con Twitter, no me refiero a la implementación sino a las diferentes funcionalidades que podemos integrar en nuestro sitio web si decidimos comunicarlo con Twitter.

En este caso vamos a ver la opción más sencilla pero a su vez también la más utilizada, actualizar el estado de una cuenta de Twitter desde un script PHP.

Si hacemos una búsqueda en Google seguramente encontremos tutoriales que nos explican como utilizar la API de Twitter gracias al uso de la librería CURL, pero este método quedo obsoleto hace unos meses y si intentamos implementarlo recibiremos el siguiente error: “basic authentication is not supported”

 

< ?php
include '../../twitter.php';
$message = 'New movie ...';
$url = 'http://twitter.com/statuses/update.xml';
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, "$url");
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_POST, 1);
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, "status=$message");
curl_setopt($curl_handle, CURLOPT_USERPWD, "$username:$password");
$buffer = curl_exec($curl_handle);
curl_close($curl_handle);
if (empty($buffer)) {
 echo "error!";
} else {
 echo 'success!';
}
?>

Cómo acabamos de comentar este método ya no funciona ya que ahora es necesario el uso de Oauth

Para aquellos interesados en trabajar con la API de Twitter por primera vez y para aquellos que necesitan actualizar el código que ha quedado obsoleto en estos últimos meses debido al cambio, os recomiendo el siguiente artículo (en inglés).

Resumiendo un poco hay que realizar tres sencillos pasos:

1. Registrar una aplicación en: http://dev.twitter.com/apps/new. Tienes que dar a esta aplicación permisos de lectura y escritura para poder actualizar el estado de tu cuenta de Twitter.

2. Tienes que obtener 4 claves para conseguir actualizar el estado de la cuenta, estas son las claves necesarias: Consumer key, Consumer secret, Access Token (oauth_token), Access Token Secret (oauth_token_secret)

3. Descarga twitteroauth.

Ejemplo de uso (para actualizar el estado de una cuenta Twitter desde PHP):

< ?php
$consumerKey = 'insert your consumer key';
$consumerSecret = 'insert your consumer secret';
$oAuthToken = 'insert your access token';
$oAuthSecret = 'insert your token secret';

require_once(twitteroauth.php');

$tweet = new TwitterOAuth($consumerKey, $consumerSecret, $oAuthToken, $oAuthSecret);
$statusMessage = 'Prueba';
$tweet->post('statuses/update', array('status' => $statusMessage));
?>

Redhat en la Nube con OpenShift

Redhat a puesto en la Red su propia nube llamada OpenShift Express totalmente gratuita. En ella podremos montar aplicaciones
Java, Perl, PHP, Python y Ruby con un servidor de bases de datos como MySQL, Postgres o
MongoDB.  Al abrir una cuenta, se te asignara una URL única para tu aplicación y un repositorio
git asociado.  Los desarrollos seran almacenados en git automáticamente, esta accion desplegara la aplicacion en la nube de forma automática. Tambien tienen una versión no gratuita llamada Openshift Flex, que para obtenerla deberás darte de alta de la versión gratuita. Mas informacion en  https://openshift.redhat.com/app/ 

Crea tu propio mirrorlist en Centos (Rev 1)

Mucho del dia a dia lo realizo con repositorios locales de CentOS, Epel y mi repositorio personal.
Hago uso de los mirrorlist de Centos como segunda opcion y por supuesto los locales son de primer frente.
Para esto instalo apache y php en mi servidor de repositorio de paquetes, y modifico cada un de los archivos .repo contenidos en /etc/yum.repos.d/ .
El archivo original de CentOS-Base.repo contiene la siguiente informacion

[base]
name=CentOS-$releasever - Base
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#released updates
[updates]
name=CentOS-$releasever - Updates
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#Fasttrack - packages by Centos Users
[fasttrack]
name=CentOS-$releasever - Contrib
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=fasttrack
#baseurl=http://mirror.centos.org/centos/$releasever/fasttrack/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

Modificamos el archivo y colocamos en la linea anteriior al los mirror por defecto el nuestro quedando el archivo de congifuracion asi;
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out #baseurl= line instead.
#
#

[base]
name=CentOS-$releasever - Base
mirrorlist= http://10.1.1.1/?release=$releasever&arch=$basearch&repo=os
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist= http://10.1.1.1/?release=$releasever&arch=$basearch&repo=updates
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist= http://10.1.1.1/?release=$releasever&arch=$basearch&repo=extras
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist= http://10.1.1.1/?release=$releasever&arch=$basearch&repo=centosplus
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
mirrorlist= http://10.1.1.1/?release=$releasever&arch=$basearch&repo=contrib
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#Fasttrack - packages by Centos Users
[fasttrack]
name=CentOS-$releasever - Contrib
mirrorlist= http://10.1.1.1/?release=$releasever&arch=$basearch&repo=fasttrack
http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=fasttrack
#baseurl=http://mirror.centos.org/centos/$releasever/fasttrack/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6


Luego creamos un archivo index.php que contenga la siguiente información:

<?php
$ip='10.1.1.1';
$release=$_REQUEST['release'];
$arch=$_REQUEST['arch'];
$repo=$_REQUEST['repo'];
if ($repo == 'epel'): 
    echo  'http://'.$ip.'/'.$repo.'/'.$release.'/'.$arch.'/';
elseif ($repo == 'walter'): 
    echo 'http://'.$ip.'/'.$repo.'/'.$release.'/'.$arch.'/';
else: 
    echo 'http://'.$ip.'/centos/'.$release.'/'.$repo.'/'.$arch.'/';
endif;
?>


Este archivo debe estar en el path por defecto de apache /var/www/html , y pos supuesto nuestro repositorio en la ruta definida por el mirrorlist "http://10.1.1.1/centos/"

mi alias de apache donde se encuentra el repositorio de paquetes es el siguientes

alias /centos /var/www/html/centos

<Directory /var/www/html/centos>
   Options Indexes FollowSymlinks
   AllowOverride none
   order allow,deny
   allow from all
</Directory>

el directorio que esta en apache es un enlace blando a /home/repos/centos, un usuario del sistema, otra cosa es configurar SELinux con el contexto de archivo para apache "httpd_sys_content_t"

Share Up To 110 % - 10% Affiliate Program