Composer в Drupal 8. Вывод последних твитов из Twitter.

PHP Composer

Для установки модулей и библиотек лучше всего использовать composer. Composer - это менеджер библиотек, он позволяет управлять зависимостями одних библиотек, модулей, от других библиотек, модулей. Если у модуля есть зависимость от библиотеки, то composer автоматически скачать эту библиотеку при установке модулей. С одной стороны composer усложняет установку модулей, но с другой нам становится проще в плане установки библиотек, потому что теперь они будут скачивать и подключаться сами.

Для того чтобы скачать и установать composer перейдите на официальный сайт:

https://getcomposer.org/download/

Кстати, Drush теперь тоже ставится через Composer, если вы устанавливали Drush, то composer у вас уже есть. Проверить что у вас установлен composer можно коммандой:

composer --version

В результате должна появиться версия composer:

Composer

Теперь заходим в папку нашего сайта через консоль и можем работать с Composer.

Вывод последних твитов Twitter в Drupal 8

Для начала вы должны создать application в Twitter и получить пару токенов, которые будут использоваться дальше. Вы можете создать application здесь:

https://apps.twitter.com/

Версия 1.0 скоро перестанет работать и неавторизованные запросы будут отклоняться. Так что используйте версию 1.1 или более позднюю версию Twitter API.

1. Создание аккаунта разработчика. Настройте свой аккаунт разработчика на Twitter.

Заполняем форму регистрации. Это бесплатно и это необходимый шаг, чтобы выполняться запросы к API Twitter версии 1.1. Заходите теперь на страницу My Apps https://apps.twitter.com/ и нажимайте Create New App:

Twitter

2. Создание Twitter application. Заполняйте форму создания application с указанием домена вашего сайта.

Drupalbook twitter

Если вас перенаправлило на страницу application, значит application создался. Теперь нам потребуются следующие данные:

  • Consumer key
  • Consumer secret
  • Access token
  • Access token secret

В документации Twitter API есть описание для чего нужен токен и как его использовать https://dev.twitter.com/oauth/overview/single-user..

3. Создание Access token. OAuth требует несколько токенов. Так что вам нужно их сгенерировать.

Twitter OAth токены

Это создаст Access Token, Access Token Secret, которые мы будем дальше использовать.

Теперь мы можем получать наши твиты через Twitter API. Мы можем использовать напрямую Twitter API и через drupal_http_request получать ответы от серверов Twitter. Но лучше и проще использовать библиотеку для работы с Twitter. Если Twitter API измениться, то нам не нужно будет разбираться в тонкостях нового v1.2 API, мы просто обновим библиотеку, а поддержку совместимости оставим разработчикам библиотеки.

В данной статье мы будем использовать эту библиотеку

https://packagist.org/packages/j7mbo/twitter-api-php

Для того чтобы установить эту библиотеку в Drupal, нам нужно только написать в composer команду:

composer require j7mbo/twitter-api-php

Composer сам найдет библиотеку и установит ее зависимости, если они есть. И мы сразу сможем использовать эту библиотеку у себя в коде.

Ниже код модуля для вывода последнего твита в блоке. Настройки ключей и токенов, я вынес в отдельную конфигурационную форму:

/admin/structure/twitter-block/settings

Код модуля можно скачать в прикрепленных файлах статьи или с Github репозитория учебного сайта по верстке Drupal 8 темы на основе Bootstrap:

https://github.com/Drupalbook/bootstrap

Файлы модуля:

/modules/twitter_block/twitter_block.info.yml - Основной файл модуля

name: Twitter Block
description: Display Last tweets.
type: module
core: 8.x
package: Custom

/modules/twitter_block/src/Plugin/Block/TwitterBlock.php - Плагин блока

<?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 {

  /**
   * {@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'),
    );

    // Set here the Twitter account from where getting latest tweets
    $screen_name = 'netglooweb';

    // Get timeline using 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 .= '<div class="twitter-message">' . $message->text . '</div>';
      }
    }
    return array(
      '#markup' => $content,
    );
  }

}

/modules/twitter_block/src/Form/TwitterBlockSettingsForm.php - Конфигурационная форма

<?php

namespace Drupal\twitter_block\Form;

use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Configure example settings for this site.
 */
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'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('Consumer key'),
      '#default_value' => $config->get('consumer_key'),
    );

    $form['consumer_secret'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('Consumer secret'),
      '#default_value' => $config->get('consumer_secret'),
    );

    $form['access_token'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('Access token'),
      '#default_value' => $config->get('access_token'),
    );

    $form['access_token_secret'] = array(
      '#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 - создаем путь для нашей страницы конфигурационной формы.

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 - файл в котором мы прописываем зависимость нашего модуля от библиотеки j7mbo/twitter-api-php

{
  "name": "drupal/twitter_block",
  "type": "drupal-module",
  "description": "Displays Last tweets.",
  "homepage": "http://drupalbook.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"
}

 

ВложениеРазмер
Package icon Twitter Block модуль3.62 КБ

Комментарии

Добавить комментарий

Войти, используя Loginza Google Account Yandex Mail.ru Vkontakte Facebook

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.

https://apps.twitter.com/app

https://apps.twitter.com/app/14037063 Я добрался до этого. Но у меня смешное название сайта ttp:\egmontgroup.ru/egmontgroup.ru Но это twitter не понимает. Я не могу исправить название (двойное). Там надо что-то в папке httpd создавать в httpd.conf ( http://lavrik-v.ru/info/214/httpdconf_na_Russkom_yazyke__Nastrojka_Apache.html) Это хорошее, но я уже не хочу сносить снова сервер и переустанавливать. Или попробую ещё подключить домен http://spbmapo.org (на одном VDS). Я просто начинающий юзер. С уважением.

это я. Картинка временно, я в другом компьютере.

// Get timeline using

 // Get timeline using TwitterAPIExchange
    $url = 'https://api.twitter.com/1.1/statuses/user_timeline.json';
    $getfield = "?count=1";
    $requestMethod = 'GET';

Здесь в параментре count укажите сколько нужно.