Composer in Drupal 8. Visualizzazione degli ultimi tweet da Twitter.
Per installare moduli e librerie in Drupal, è preferibile utilizzare Composer. Composer è un gestore di pacchetti per PHP che consente di gestire le dipendenze tra librerie e moduli. Se un modulo richiede una libreria, Composer scaricherà automaticamente tale libreria durante l’installazione del modulo. Da un lato, Composer può rendere l’installazione leggermente più complessa, ma dall’altro semplifica la gestione delle librerie, poiché queste verranno scaricate e collegate automaticamente.
Per scaricare e installare Composer, visita il sito ufficiale:
https://getcomposer.org/download/
Tra l’altro, Drush ora si installa anch’esso tramite Composer. Se hai già installato Drush, probabilmente Composer è già presente nel tuo sistema. Per verificare se Composer è installato, esegui il comando:
composer --version
Il comando restituirà la versione di Composer installata:
Ora entra nella cartella del tuo sito tramite la console e potrai lavorare con Composer.
Visualizzare gli ultimi tweet di Twitter in Drupal 8
Per prima cosa, devi creare un’applicazione su Twitter e ottenere le chiavi di accesso (token) necessarie. Puoi creare un’applicazione qui:
La versione 1.0 dell’API presto verrà disattivata e le richieste non autenticate saranno rifiutate. Pertanto, utilizza l’API Twitter 1.1 o versioni successive.
1. Creazione dell’account sviluppatore. Imposta il tuo account sviluppatore su Twitter.
Compila il modulo di registrazione — è gratuito e necessario per effettuare richieste all’API Twitter 1.1. Poi accedi alla pagina My Apps: https://apps.twitter.com/ e clicca su “Create New App”.
2. Creazione dell’app Twitter. Compila il modulo indicando il dominio del tuo sito.
Se vieni reindirizzato alla pagina dell’applicazione, significa che la creazione è avvenuta con successo. Ora ti serviranno i seguenti dati:
- Consumer key
- Consumer secret
- Access token
- Access token secret
La documentazione ufficiale dell’API Twitter spiega l’uso dei token: https://dev.twitter.com/oauth/overview/single-user.
3. Creazione dell’Access Token. OAuth richiede più token di accesso. Quindi, generali dal pannello della tua app.
Questo genererà l’Access Token e l’Access Token Secret, che utilizzeremo più avanti.
Ora possiamo ottenere i nostri tweet tramite l’API di Twitter. Potremmo usare direttamente l’API via drupal_http_request
, ma è più comodo e sicuro usare una libreria dedicata. Se l’API di Twitter cambia, ci basterà aggiornare la libreria senza modificare il nostro codice.
In questa guida useremo la libreria seguente:
https://packagist.org/packages/j7mbo/twitter-api-php
Per installarla in Drupal, basta eseguire il comando Composer:
composer require j7mbo/twitter-api-php
Composer scaricherà automaticamente la libreria e le relative dipendenze. Potremo così utilizzarla nel nostro codice.
Ecco il codice del modulo che visualizza l’ultimo tweet in un blocco. Le chiavi e i token sono configurabili tramite un modulo di impostazioni dedicato:
/admin/structure/twitter-block/settings
Il codice completo del modulo può essere scaricato dai file allegati all’articolo o dal repository GitHub del sito didattico di DrupalBook basato su Bootstrap:
https://github.com/Drupalbook/bootstrap
File del modulo:
/modules/twitter_block/twitter_block.info.yml – file principale del modulo
name: Twitter Block description: Display Last tweets. type: module core: 8.x package: Custom
/modules/twitter_block/src/Plugin/Block/TwitterBlock.php – plugin del blocco
<?php namespace Drupal\twitter_block\Plugin\Block; use Drupal\Core\Block\BlockBase; /** * Provides a Last tweet block. * * @Block( * id = "twitter_block", * admin_label = @Translation("Twitter block"), * ) */ class TwitterBlock extends BlockBase { public function build() { $content = ''; $config = \Drupal::config('twitter_block.settings'); $settings = [ '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'), ]; $screen_name = 'netglooweb'; $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 .= '<div class="twitter-message">' . $message->text . '</div>'; } } return ['#markup' => $content]; } }
/modules/twitter_block/src/Form/TwitterBlockSettingsForm.php – form di configurazione
<?php namespace Drupal\twitter_block\Form; use Drupal\Core\Form\ConfigFormBase; use Drupal\Core\Form\FormStateInterface; class TwitterBlockSettingsForm extends ConfigFormBase { public function getFormId() { return 'twitter_block_admin_settings'; } protected function getEditableConfigNames() { return ['twitter_block.settings']; } 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); } 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 – definizione del percorso per la pagina di configurazione:
twitter_block.settings: path: '/admin/structure/twitter-block/settings' defaults: _form: '\Drupal\twitter_block\Form\TwitterBlockSettingsForm' _title: 'Twitter API Settings' requirements: _permission: 'administer site configuration'
/modules/twitter_block/composer.json – file che specifica la dipendenza del modulo dalla libreria j7mbo/twitter-api-php:
{ "name": "drupal/twitter_block", "type": "drupal-module", "description": "Displays Last tweets.", "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" }
Codice del modulo su GitHub: