Compositor en Drupal 8. Mostrando los últimos tweets de Twitter.
Para instalar módulos y bibliotecas, lo mejor es usar Composer. Composer es un gestor de bibliotecas que permite administrar las dependencias de unas bibliotecas o módulos con respecto a otras. Si un módulo depende de una biblioteca, Composer descargará automáticamente esa biblioteca al instalar el módulo. Por un lado, Composer complica la instalación de módulos, pero por otro nos facilita la gestión de bibliotecas, ya que ahora se descargarán e integrarán por sí mismas.
Para descargar e instalar Composer, visita el sitio oficial:
https://getcomposer.org/download/
Por cierto, Drush ahora también se instala mediante Composer. Si ya instalaste Drush, entonces ya tienes Composer. Para verificar que Composer está instalado, ejecuta el comando:
composer --version
Debería mostrarse la versión de Composer:
Ahora, entra en la carpeta de tu sitio desde la consola y podrás trabajar con Composer.
Visualización de los últimos tuits de Twitter en Drupal 8
Para empezar debes crear una aplicación en Twitter y obtener un par de tokens que se usarán posteriormente. Puedes crear la aplicación aquí:
La versión 1.0 pronto dejará de funcionar y las solicitudes no autorizadas serán rechazadas. Por lo tanto, usa la versión 1.1 o posterior de la API de Twitter.
1. Crear cuenta de desarrollador. Configura tu cuenta de desarrollador en Twitter.
Completa el formulario de registro. Es gratuito y es un paso necesario para realizar solicitudes a la API de Twitter versión 1.1. Luego ve a la página My Apps https://apps.twitter.com/ y haz clic en Create New App:
2. Crear la aplicación de Twitter. Rellena el formulario de creación de la aplicación indicando el dominio de tu sitio.
Si eres redirigido a la página de la aplicación, significa que ésta se creó correctamente. Ahora necesitaremos los siguientes datos:
- Consumer key
- Consumer secret
- Access token
- Access token secret
En la documentación de la API de Twitter se describe para qué sirve cada token y cómo utilizarlos: https://dev.twitter.com/oauth/overview/single-user.
3. Crear el Access token. OAuth requiere varios tokens, así que debes generarlos.
Esto generará el Access Token y el Access Token Secret que utilizaremos a continuación.
Ahora podemos obtener nuestros tuits mediante la API de Twitter. Podemos usar directamente la API de Twitter con drupal_http_request
para recibir respuestas de los servidores de Twitter, pero es más sencillo utilizar una biblioteca dedicada. Si la API de Twitter cambia, no tendremos que lidiar con las particularidades de la nueva versión v1.2; simplemente actualizaremos la biblioteca y dejaremos la compatibilidad en manos de sus desarrolladores.
En este artículo utilizaremos la siguiente biblioteca:
https://packagist.org/packages/j7mbo/twitter-api-php
Para instalar esta biblioteca en Drupal, solo hace falta ejecutar en Composer:
composer require j7mbo/twitter-api-php
Composer localizará la biblioteca, instalará sus dependencias si las tiene, y podremos usarla de inmediato en nuestro código.
A continuación, el código del módulo para mostrar el último tuit en un bloque. He extraído las claves y tokens a un formulario de configuración:
/admin/structure/twitter-block/settings
El código del módulo se puede descargar en los archivos adjuntos del artículo o desde el repositorio de GitHub del sitio de formación sobre theming de Drupal 8 con Bootstrap:
https://github.com/Drupalbook/bootstrap
Archivos del módulo:
/modules/twitter_block/twitter_block.info.yml
– Archivo principal del módulo
name: Twitter Block description: Muestra los últimos tuits. type: module core: 8.x package: Custom
/modules/twitter_block/src/Plugin/Block/TwitterBlock.php
– Plugin del bloque
<?php namespace Drupal\twitter_block\Plugin\Block; use Drupal\Core\Block\BlockBase; /** * Proporciona un bloque con el último tuit. * * @Block( * id = "twitter_block", * admin_label = @Translation("Bloque de Twitter"), * ) */ class TwitterBlock extends BlockBase { /** * {@inheritdoc} */ public function build() { $content = ''; $config = \Drupal::config('twitter_block.settings'); $settings = array( 'consumer_key' => $config->get('consumer_key'), 'consumer_secret' => $config->get('consumer_secret'), 'oauth_access_token' => $config->get('access_token'), 'oauth_access_token_secret' => $config->get('access_token_secret'), ); // Establece aquí la cuenta de Twitter de la que obtener los últimos tuits $screen_name = 'netglooweb'; // Obtener el timeline usando TwitterAPIExchange $url = 'https://api.twitter.com/1.1/statuses/user_timeline.json'; $getfield = "?count=1"; $requestMethod = 'GET'; $twitter = new \TwitterAPIExchange($settings); $user_timeline = $twitter ->setGetfield($getfield) ->buildOauth($url, $requestMethod) ->performRequest(); $messages = json_decode($user_timeline); if (!empty($messages)) { foreach ($messages as $message) { $content .= ''; } } return [ '#markup' => $content, ]; } }
/modules/twitter_block/src/Form/TwitterBlockSettingsForm.php
– Formulario de configuración
<?php namespace Drupal\twitter_block\Form; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; /** * Configura los ajustes del bloque de Twitter. */ class TwitterBlockSettingsForm extends ConfigFormBase { /** * {@inheritdoc} */ public function getFormId() { return 'twitter_block_admin_settings'; } /** * {@inheritdoc} */ protected function getEditableConfigNames() { return [ 'twitter_block.settings', ]; } /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $config = $this->config('twitter_block.settings'); $form['consumer_key'] = [ '#type' => 'textfield', '#title' => $this->t('Consumer key'), '#default_value' => $config->get('consumer_key'), ]; $form['consumer_secret'] = [ '#type' => 'textfield', '#title' => $this->t('Consumer secret'), '#default_value' => $config->get('consumer_secret'), ]; $form['access_token'] = [ '#type' => 'textfield', '#title' => $this->t('Access token'), '#default_value' => $config->get('access_token'), ]; $form['access_token_secret'] = [ '#type' => 'textfield', '#title' => $this->t('Access token secret'), '#default_value' => $config->get('access_token_secret'), ]; return parent::buildForm($form, $form_state); } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { $this->config('twitter_block.settings') ->set('consumer_key', $form_state->getValue('consumer_key')) ->set('consumer_secret', $form_state->getValue('consumer_secret')) ->set('access_token', $form_state->getValue('access_token')) ->set('access_token_secret', $form_state->getValue('access_token_secret')) ->save(); parent::submitForm($form, $form_state); } }
/modules/twitter_block/twitter_block.routing.yml
– Definimos la ruta para nuestra página de configuración.
twitter_block.settings: path: '/admin/structure/twitter-block/settings' defaults: _form: '\Drupal\twitter_block\Form\TwitterBlockSettingsForm' _title: 'Ajustes de la API de Twitter' requirements: _permission: 'administer site configuration'
/modules/twitter_block/composer.json
– Archivo donde definimos la dependencia de nuestro módulo de la biblioteca j7mbo/twitter-api-php
{ "name": "drupal/twitter_block", "type": "drupal-module", "description": "Muestra los últimos tuits.", "homepage": "https://drupalbook.org/ru/drupal/composer-v-drupal-8-vyvod-poslednih-tvitov-iz-twitter", "license": "GPL-2.0+", "require": { "j7mbo/twitter-api-php": "dev-master" }, "minimum-stability": "dev" }
Código del módulo en GitHub: