Создаем SMS информер о посещении сайта

Внимание: нижеследующая статья была написана в феврале 2016 года и базировалась на API Яндекса, которое к настоящему времени устарело и больше не поддерживается. Cпасибо Александру за обнаруженную ошибку в марте 2017 года и его вариант работы кода с новым API (см. в комментариях)!

На днях поставили задачу - сделать ежедневное SMS извещение о суточном посещении сайта N. Прямой владелец сайта не очень разбирается в веб-технологиях и слабо себе представляет, где и как смотреть статистику посещения своего сайта. Ежедневная SMS на его телефон с основными показателями посещения его сайта за сутки - удовлетворила бы его любопытство.

Не знаю, предоставляют ли какие-либо счетчики статистики такую услугу (скорее всего нет), но в реализации такой затеи не оказалось ничего сложного! Ниже я опишу все этапы реализации SMS информера, наверняка  кому-нибудь пригодится.

Извлекаем посещаемость сайта из Яндекс.Метрики

Поскольку на сайте клиента была  установлена Яндекс.Метрика, копать пришлось в сторону API (Яндекс реализовал его для множества своих сервисов): задача упрощалась регистрацией приложения, получением токена и написанием нехитрого кода.

Чтобы не вводить вас в заблуждение просторными описаниями функционала API Яндекс.Метрики, начнем по существу.

Для создания SMS информера нам понадобится представится Яндексу, что мы это мы и чтобы он отдавал нам данные нашего счетчика, даже если общий доступ к нему закрыт.

Регистрируем приложение

Авторизуйтесь в Яндексе с учетной записью пользователя у которого в Яндексе.Метрике есть сайт, с которого надо получать данные о посещениях.

Перейдите по ссылке: https://oauth.yandex.ru/client/new и заполняем поля:

Название: Счетчик Метрики

Описание: Будем получать счетчик Метрики

Права: выбираем Яндекс.Метрика, ставим галочку "Получение статистики, чтение параметров своих и доверенных счётчиков").

Callback URL (внизу) - нажимаем "Подставить URL для разработки".

Жмем Сохранить.

На следующей странице нам предоставят ID и пароль приложения (похожее на):

ID: 85454e298448e7cca784edfc343758b5
Пароль: 09d9d44e76a01264586804b98f4425f5

запоминаем их и переходим к следующему этапу.

Получение токена

Чтобы полноценно работать с нашим приложением, нам необходим отладочный токен (пароль авторизации). Этот токен мы будем прописывать в скрипте, который будет получать данные от Яндекса и слать их по SMS.

Чтобы получить токен для Яндекс.Метрики, перейдите на страницу, где подставляем идентификатор ID (мы его получили на этапе регистрации приложения):

https://oauth.yandex.ru/authorize?response_type=token&client_id=85454e298448e7cca784edfc343758b5

На страничке, мы получим извещение, что приложение Счетчик Метрики запрашивает доступ к вашим данным на Яндексе. Естественно, жмем Разрешить. В результате получаем токен (наш секретный пароль для использования API).

5161c4c609fbf57630d3d4943cf1b19a

Еще один параметр: id счетчика

Заключительный параметр, который нам необходим - идентификатор счетчика. Тут все просто: заходим на страницу со счетчиками в Яндекс.Метрику и копируем id (этот номер будет в колонке "Название и ID счетчика") того счетчика, с которого мы хотим получать данные:

id счетчика Яндекс.Метрики

Скрипт получения данных счетчика с Яндекс.Метрики

Все что нам необходимо для написания скрипта - токен и id счетчика. Их мы уже получили, осталось их подставить в соответствующие поля в нашем php скрипте. Открываем текстовый блокнот и пишем код:

<?php
$id='31357152'; //id счетчик метрики
$token='5161c4c609fbf57630d3d4943cf1b19a';//токен
$today=date("Ymd");
$metrika_url = "http://api-metrika.yandex.ru/stat/traffic/summary.json?id=$id&pretty=1&date1=$today&date2=$today&oauth_token=$token";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$metrika_url);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$metrika = curl_exec ($ch);
curl_close($ch);
$metrika_o = json_decode($metrika);
$mes = "All:".$metrika_o->totals->visits." NEW:".$metrika_o->totals->new_visitors." VIEW:".$metrika_o->totals->page_views;
//в переменной $mes (сжато для формата 1 SMS) мы получили такие данные как: All - всего посещений за сегодня, NEW - новых посетителей за сегодня, VIEW - просмотров страниц сегодня.
//осталось отправить эту переменную в SMS получателю. Это можно сделать по-разному. Например, с помощью специализированного сервиса - https://seo-zona.ru/sozdaem-sms-izveshheniya-besplatnye-2013-05-25.html или с помощью своего оператора мобильной связи.
//Поскольку у моего оператора мобильной связи есть услуга отправки email по SMS, я сделал так:
$mail = mail ('[email protected]','METRIKA',$mes,"Content-type:text/plain; charset = utf-8\r\n"); ?>

Файл сохраняем в файл, например, smsmetrika.php, загружаем на свой сайт и вызываем из браузера мой_сайт.ru/smsmetrika.php. Каждый раз при вызове скрипта, мы будем получать SMS на свой номер с актуальной статистикой посещения сайта, в которой будут данные:

  • количество уникальных посетителей сегодня;
  • количество новых посетителей сегодня;
  • количество просмотров страниц сайта;

Яндекс.Метрика по SMS

Осталось повесить запуск скрипта по расписанию (здесь вам нужно иметь понятия о Cron - детально http://ru.wikipedia.org/wiki/Cron), это можно сделать, как пример, ежедневно в 23:59

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

 

Оцените материал:
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (3 голоса, рейтинг: 4,33 из 5)
Загрузка...

Вячеслав - типичный интернетчикВячеслав Скоблей (ака files) - типичный интернетчик. Скитаюсь интернетом, пишу на PHP, увлекаюсь созданием веб-сайтов на Wordpress, решаю многочисленные проблемы, которые до появления интернета не существовали...

Специализируюсь на безопасности сайтов: защищаю сайты от атак и взломов, занимаюсь лечением вирусов на сайтах и профилактикой...

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

15 комментарий

  1. Приветствую. Все сделал четко, но приходят смс с пустыми данными. То есть так примерно: All: New: Views:
    Хотя в метрики цифры нормальные

    1. Вячеслав Скоблей says:

      Добавьте в конец кода smsmetrika.php такую строчку:

      echo $mes;

      в самом конце перед ?>
      Перейдите по адресу мой_сайт.ru/smsmetrika.php
      Значения метрики имеются?

      1. К сожалению, нет!

        1. Я думал, что может со счетчиком проблемы. Пробовал другие счетчики подключить. без толку. В верности id счетчика и токена подтверждаю. У вас все еще работает? У меня просто подозрение, что яндекс изменил api или что-то в этом роде

          1. Вячеслав Скоблей says:

            Александр, проверил. Яндекс, действительно поменял API и скрипт утратил актуальность!

            1. Предлагаю вместе изменить скрипт на рабочий вариант)

              1. Вячеслав Скоблей says:

                При наличии времени (что сомнительно), так и сделаю :)

                1. Если смогу сам разобраться, скину сюда код

                  1. Вячеслав Скоблей says:

                    В шапку статьи добавил поправку, будем ждать.

                    1. says:

                      Вот рабочий скрипт с новым API:

                      $id='xxxxxxxx'; //id счетчик метрики
                      $token='AQAAxxxxxxws1AAQg80yJVxxxxxxxxHoadAxxxuJOQ';//токен
                      $today=date("Ymd");
                      $mail='[email protected]';
                      $metrika_url = "https://api-metrika.yandex.ru/stat/v1/data?ids=$id&oauth_token=$token&date1=$today&date2=$today&metrics=ym:s:visits,ym:s:pageviews,ym:s:users";
                      
                      $ch = curl_init();
                      curl_setopt ($ch, CURLOPT_URL,$metrika_url);
                      curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
                      curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
                      curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
                      curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
                      $metrika = curl_exec ($ch);
                      curl_close($ch);
                      $metrika_o = json_decode($metrika);
                      $mes = "Всего просмотров:".$metrika_o->totals[1]." Новые посетители:".$metrika_o->totals[2]." Просмотров страниц:".$metrika_o->totals[0];
                      $mail = mail ($mail,'METRIKA',$mes,"Content-type:text/plain; charset = utf-8\r\n"); ?>
  2. says:

    интересная идея)
    наверно, попробую и я так сделать
    $mail = mail ('[email protected]','METRIKA',$mes,"Content-type:text/plain; charset = utf-8\r\n"); ?> вот здесь свой телефон ставить?

    1. Вячеслав Скоблей says:

      [email protected] - в этом поле должен быть ваш телефон (это ваш адрес электронной почты в системе kyivstar

  3. Полезная статья, я думаю и себе такую фишку прикрутить.

  4. Артур says:

    Интересно... Я так понял, что отправляется при помощи оператора Киевстар, как быть относительно МТС? Возможна подобная реализация для отправки бесплатных сообщений?

    1. Вячеслав Скоблей says:

      Артур, у Киевстара функция Email to SMS платная (вроде как 0.07 грн. в день). Бесплатных вариантов в настоящее время вообще не существует. Если и найдете, то с рядом ограничений и без каких-либо гарантий. Касательно МТС - данный вопрос надежнее уточнить у службы поддержки оператора или на их официальном сайте.

Добавить комментарий для Вячеслав Скоблей Отменить ответ

Ваш адрес email не будет опубликован.