DesarrolloLibre

Desarrollo Web, Android, juegos y mucho más

Categorias
¡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

Estructura básica de un proyecto Symfony

Estructura básica de un proyecto Symfony

Se explica la estructura básica de un proyecto Symfony.

Andrés Cruz 09-02-2017

¿Cómo publicar un post en nuestro muro con la API Graph API de Facebook (PHP)?

¿Cómo publicar un post en nuestro muro con la API Graph API de Facebook (PHP)?

Explicamos como obtener los tokens de autenticación desde la página de desarrolladores de Facebook, descargar la SDK de Facebook para PHP, solicitar los permisos, autenticarse y publicar un post en el muro de Facebook.

Andrés Cruz 27-06-2016

¿Cómo conseguir, crear y utilizar el widget de Twitter?

¿Cómo conseguir, crear y utilizar el widget de Twitter?

El widget de twitter nos permite incluir en nuestra web una barra que mostrará mediante un script hecho en javascript nuestros últimos tweets.

Andrés Cruz 09-08-2013