Счетчик читателей в Twitter на PHP для WordPress

В правом сайдбаре этого блога теперь висит моя “визитная карточка”, на которой отображается количество моих читателей в Twitter. В этой небольшой заметке я поделюсь способом, как это можно реализовать.

Полгода назад твиттер представил новую версию Twitter API 1.1, вместе с которым вступили в силу новые правила игры. Теперь ни один метод не может быть вызван без аутентификации, для которой теперь используется протокол OAuth 2.0.

Создание Twitter-приложения

Первый шаг для подключения счетчика фолловеров – создание Твиттер-приложения и получение пользовательских ключей, которые требуются для проведения OAuth 2.0 аутентификации. Для этого:

  1. Перейдите по ссылке https://dev.twitter.com/apps и войдите с данными своего Твиттер-аккаунта;
  2. Создайте новое приложение (application)
  3. Заполните поля в форме и создайте свое приложение
  4. На странице приложения кликните “Create my access token”

Теперь у вас есть ключи. Однако, для нашего счетчика понадобятся только Consumer key и Consumer secret

Получение количества читателей в Twitter

Код ниже используется для получения количества читателей в Twitter для использования на сайте WordPress, однако, желающие могут легко его преобразовать для своих нужд. Он хорошо прокомментирован и должен располагаться в файле functions.php в папке вашей темы. Естественно, в него нужно только подставить ваши значения Consumer key и Consumer secret.

function getTwitterFollowers($screenName = 'codeforest')
{
    // некоторые переменные
    $consumerKey = 'ВАШ_CONSUMER_KEY';
    $consumerSecret = 'ВАШ_CONSUMER_SECRET';
    $token = get_option('cfTwitterToken');

    // получить число фолловеров из кеша
    $numberOfFollowers = get_transient('cfTwitterFollowers');

    // кешированная версия не существует или устарела
    if (false === $numberOfFollowers) {
        // getting new auth bearer only if we don't have one
        if(!$token) {
            // подготовка данных
            $credentials = $consumerKey . ':' . $consumerSecret;
            $toSend = base64_encode($credentials);

            // аргументы http post
            $args = array(
                'method' => 'POST',
                'httpversion' => '1.1',
                'blocking' => true,
                'headers' => array(
                    'Authorization' => 'Basic ' . $toSend,
                    'Content-Type' => 'application/x-www-form-urlencoded;charset=UTF-8'
                ),
                'body' => array( 'grant_type' => 'client_credentials' )
            );

            add_filter('https_ssl_verify', '__return_false');
            $response = wp_remote_post('https://api.twitter.com/oauth2/token', $args);

            $keys = json_decode(wp_remote_retrieve_body($response));

            if($keys) {
                // сохранение токера в таблице wp_options
                update_option('cfTwitterToken', $keys->access_token);
                $token = $keys->access_token;
            }
        }
        // мы должны предъявить токен откуда бы мы его не получили
        $args = array(
            'httpversion' => '1.1',
            'blocking' => true,
            'headers' => array(
                'Authorization' => "Bearer $token"
            )
        );

        add_filter('https_ssl_verify', '__return_false');
        $api_url = "https://api.twitter.com/1.1/users/show.json?screen_name=$screenName";
        $response = wp_remote_get($api_url, $args);

        if (!is_wp_error($response)) {
            $followers = json_decode(wp_remote_retrieve_body($response));
            $numberOfFollowers = $followers->followers_count;
        } else {
            // получить старое значение и выйти
            $numberOfFollowers = get_option('cfNumberOfFollowers');
            // раскомментировать для дебага
            //die($response->get_error_message());
        }

        // кэш на один час
        set_transient('cfTwitterFollowers', $numberOfFollowers, 1*60*60);
        update_option('cfNumberOfFollowers', $numberOfFollowers);
    }

    return $numberOfFollowers;
}

Для вызова этой функции в шаблоне достаточно использовать

echo getTwitterFollowers('your_screen_name');

Теперь можно без труда добавлять отображение счетчика фолловеров в Твиттере в любое место на сайте.

Полезная статья? Их будет больше, если вы поддержите меня!

https://money.yandex.ru/embed/small.xml?account=410011399843532&quickpay=small&yamoney-payment-type=on&button-text=06&button-size=l&button-color=orange&targets=%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%B2%D0%B0%D1%8E+%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82+lexpenz.com&default-sum=50&successURL=