¿Cómo enviar tweets con imágenes en PHP?
- 👤 Andrés Cruz
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 todo esto empleando la API Twitter de PHP con sus respectivos ejemplos y tutoriales paso a paso.
En posteriores entradas se ha interactuado a la API rest 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:
¿Cómo conectarnos a twitter y enviar tweets con php?: En esta primera entrada hablamos sobre cómo trabajar con la API de Twitter; explicamos:
- Cómo crear una aplicación en Twitter (paso necesario para poder conectarnos con la API de Twitter).
- Configurar las credenciales (Access tokens y API keys) en la aplicación PHP.
- Publicar tweets.
¿Cómo consultar los últimos tweets publicados con php? en el cual consultamos los últimos tweets que están en nuestro timeline.
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 junto con la librería PHP TwitterAPIExchange:
$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 Subir el recurso: media/upload.json
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 Enviar el tweet con el id del recurso: statuses/upload.json
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:
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.
Acepto recibir anuncios de interes sobre este Blog.
En este artículo veremos una de las muchas librerías de Twitter para PHP que existen; twitter-api-php permite conectar una aplicación escrita en PHP con la API de Twitter y enviar tweets con y sin imágenes.
| 👤 Andrés Cruz