DesarrolloLibre

Desarrollo Web, Android, juegos 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.


Publicidad

Give me for a beer!

Algunos recursos que te pueden interesar

Efectos hover con CSS

Efectos hover con CSS

TCPDF: clase Oper Source para generar PDF con PHP

TCPDF: clase Oper Source para generar PDF con PHP

Algunos artículos que te pueden interesar

¿Cómo consultar los últimos tweets publicados con PHP?

¿Cómo consultar los últimos tweets publicados con PHP?

En esta entrada veremos cómo consultar los últimos tweets publicado en la red social Twitter mediante PHP.

Andrés Cruz 30-07-2015

¿Cómo obtener por separado el canal RGB de una imagen con HTML5?

¿Cómo obtener por separado el canal RGB de una imagen con HTML5?

En este artículo veremos como obtener los tres canales RGB de una imagen y operarlos por separados.

Andrés Cruz 15-05-2014

Tipos de variables en PHP

Tipos de variables en PHP

En este artículo veremos como crear una variable en PHP, particularidades de las mismas y tipos de datos en PHP.

Andrés Cruz 27-07-2013