DesarrolloLibre

Desarrollo Web, Android y mucho más

¡Actualizado el 07-07-2016!

Siguiendo con los experimentos con la REST API de Twitter En esta entrada veremos cómo enviar tweets con imágenes desde PHP y también veremos un caso extra que consiste en cargar múltiples imágenes en un mismo tweet múltiples imágenes.

En posteriores entradas se ha interactuado a la API de Twitter para enviar tweets simples (sin imágenes) además de otras operaciones como la consulta a los últimos tweets publicados por la cuenta configurada; si tienes alguna duda en general con respecto a:

Puedes consultar los enlaces anteriores; recordemos que la librería empleada en esta y posteriores entradas es la de twitter-api-php.

Se seguirá empleando el recurso statuses/update disponible a través de la API pública para el envío de tweets pero estableceremos un parámetro extra como veremos a continuación:

$url = "https://api.twitter.com/1.1/statuses/update.json";

Puedes encontrar más información sobre la API pública anterior en el siguiente enlace POST statuses/update.

Estudiando un poco la documentación de la API pública anterior, vemos que cuenta con un parámetro media_ids el cual es un identificador de una recurso (gif, jpg, png o video).

Para obtener este identificador, primero debemos publicar el recurso -imagen en nuestro caso- realizando una petición a la API Rest de Twitter y luego realizamos otra petición pero esta vez con la imagen y el texto (el tweet con imágenes).

Enviando un tweet con imágenes en dos pasos

1

Para enviar tweets con imágenes primero debemos de subir el recurso gráfico (imágenes en nuestro caso) para obtener el media_ids (uno por imagen/video cargado); si revisamos un poco la documentación junto con sus ejemplo veremos que la API pública a emplear es media/upload:

Más información en POST media/upload.

El código PHP que realiza esta tarea es el siguiente:

        $url = 'https://upload.twitter.com/1.1/media/upload.json';
        $method = 'POST';
        $twitter = new TwitterAPIExchange($settings);

        $file = file_get_contents('public/images/example/php/twitter-php.png');
        $data = base64_encode($file);

        $params = array(
            'media_data' => $data
        );

        try {
            $data = $twitter->request($url, $method, $params);
        } catch (Exception $e) {
            echo 'Excepción capturada: ', $e->getMessage(), "\n";
            // hacer algo
            return null;
        }

        // para obtener más facilmente el media_id
        $obj = json_decode($data, true);

        // media_id en formato string
        return $obj ["media_id_string"];
2

Con el media_id ahora podemos enviar el tweet con imagen como mostramos en el siguiente código:

        $url = "https://api.twitter.com/1.1/statuses/update.json";
        $requestMethod = 'POST';

        // configuracion de la cuenta
        $settings = array(
            'oauth_access_token' => 'XXX',
            'oauth_access_token_secret' => 'XXX',
            'consumer_key' => 'XXX',
            'consumer_secret' => 'XXX',
        );

        // establecer el mensaje
        $postfields = array('status' => '¿Cómo enviar tweets con imágenes en PHP?');
        // establecer el media_id
        $postfields['media_ids'] = $this->getMediaId($settings);

        // crea la coneccion con Twitter
        $twitter = new TwitterAPIExchange($settings);

        // envia el tweet
        $twitter->buildOauth($url, $requestMethod)
                ->setPostfields($postfields)
                ->performRequest();

El código completo de nuestro experimento:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

require 'TwitterAPIExchange.php';

class Twitter {

     function getMediaId($settings) {

        $url = 'https://upload.twitter.com/1.1/media/upload.json';
        $method = 'POST';
        $twitter = new TwitterAPIExchange($settings);

        $file = file_get_contents('http://desarrollolibre.net/public/images/example/php/facebook/facebook-php.png');
        $data = base64_encode($file);

        $params = array(
            'media_data' => $data
        );

        try {
            $data = $twitter->request($url, $method, $params);
        } catch (Exception $e) {
            echo 'Excepción capturada: ', $e->getMessage(), "\n";
            // hacer algo
            return null;
        }

        // para obtener más facilmente el media_id
        $obj = json_decode($data, true);

        // media_id en formato string
        return $obj ["media_id_string"];
    }

     function sendTweets() {
        $url = "https://api.twitter.com/1.1/statuses/update.json";
        $requestMethod = 'POST';

        // configuracion de la cuenta
        // configuracion de la cuenta
        $settings = array(
            'oauth_access_token' => 'XXX',
            'oauth_access_token_secret' => 'XXX',
            'consumer_key' => 'XXX',
            'consumer_secret' => 'XXX',
        );

        // establecer el mensaje
        $postfields = array('status' => '¿Cómo enviar tweets con imágenes en PHP?');
        // establecer el media_id
        $postfields['media_ids'] = $this->getMediaId($settings);

        // crea la coneccion con Twitter
        $twitter = new TwitterAPIExchange($settings);

        // envia el tweet
        $twitter->buildOauth($url, $requestMethod)
                ->setPostfields($postfields)
                ->performRequest();
    }
}

$t = new Twitter();

$t->sendTweets();

Y si echamos un ojo a la cuenta configurada veremos nuestro increíble tweet con una imagen:

twitter PhP con imaGenes

Enviar tweets con múltiples imágenes

Si queremos cargar más de una imagen o video en un tweets simplemente debemos de cargar (en nuestro caso invocar a la función getMediaId con las imágenes/videos correspondientes a cargar en el tweet y guardar los media_ids generados) y establecerlos en el parámetro media_ids separarlos por coma de la siguiente manera:

$postfields['media_ids'] = $mediaId.','.$mediaId2;

Y esto sería todo, según establece la documentación oficial de Twitter solo podemos incorporar hasta 4 imágenes o 1 video o gif en un mismo tweet.

Si te interesa automatizar el proceso de publicar tweets automaticamente; puedes consultar la siguiente entrada: Ejecutar script automáticamente con cron en linux.

Ayúdanos a seguir creciendo

Publicidad

Give me for a beer!

Algunos recursos que te pueden interesar

TCPDF: clase Oper Source para generar PDF con PHP

TCPDF: clase Oper Source para generar PDF con PHP

Efectos hover con CSS

Efectos hover con CSS

Algunos artículos que te pueden interesar

Escalado y recortando imágenes con Canvas

Escalado y recortando imágenes con Canvas

Con Canvas es posible escalar e incluso recortar imágenes dibujadas en el lienzo (en el Canvas) todo con sólo una función llamada drawImage().

Andrés Cruz 05-05-2014

Instalación y configuración del plugin de comentarios de Facebook

Instalación y configuración del plugin de comentarios de Facebook

En este artículo les vamos a explicar como conseguir, instalar y configurar el plugin social de Facebook (comments Plugin).

Andrés Cruz 01-11-2013

¿Cómo redimensionar imágenes con CodeIgniter?

¿Cómo redimensionar imágenes con CodeIgniter?

En este artículo veremos cómo redimensionar imágenes con Codeigniter.

Andrés Cruz 21-05-2014