Содержание
Внимание: нижеследующая статья была написана в феврале 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 счетчика. Их мы уже получили, осталось их подставить в соответствующие поля в нашем 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 на свой номер с актуальной статистикой посещения сайта, в которой будут данные:
- количество уникальных посетителей сегодня;
- количество новых посетителей сегодня;
- количество просмотров страниц сайта;
Осталось повесить запуск скрипта по расписанию (здесь вам нужно иметь понятия о Cron - детально http://ru.wikipedia.org/wiki/Cron), это можно сделать, как пример, ежедневно в 23:59
Теперь владелец сайта всегда в курсе активности на его сайте даже без входа в интернет.
Приветствую. Все сделал четко, но приходят смс с пустыми данными. То есть так примерно: All: New: Views:
Хотя в метрики цифры нормальные
Добавьте в конец кода smsmetrika.php такую строчку:
в самом конце перед ?>
Перейдите по адресу мой_сайт.ru/smsmetrika.php
Значения метрики имеются?
К сожалению, нет!
Я думал, что может со счетчиком проблемы. Пробовал другие счетчики подключить. без толку. В верности id счетчика и токена подтверждаю. У вас все еще работает? У меня просто подозрение, что яндекс изменил api или что-то в этом роде
Александр, проверил. Яндекс, действительно поменял API и скрипт утратил актуальность!
Предлагаю вместе изменить скрипт на рабочий вариант)
При наличии времени (что сомнительно), так и сделаю :)
Если смогу сам разобраться, скину сюда код
В шапку статьи добавил поправку, будем ждать.
Вот рабочий скрипт с новым API:
интересная идея)
наверно, попробую и я так сделать
$mail = mail ('[email protected]','METRIKA',$mes,"Content-type:text/plain; charset = utf-8\r\n"); ?> вот здесь свой телефон ставить?
[email protected] - в этом поле должен быть ваш телефон (это ваш адрес электронной почты в системе kyivstar
Полезная статья, я думаю и себе такую фишку прикрутить.
Интересно... Я так понял, что отправляется при помощи оператора Киевстар, как быть относительно МТС? Возможна подобная реализация для отправки бесплатных сообщений?
Артур, у Киевстара функция Email to SMS платная (вроде как 0.07 грн. в день). Бесплатных вариантов в настоящее время вообще не существует. Если и найдете, то с рядом ограничений и без каких-либо гарантий. Касательно МТС - данный вопрос надежнее уточнить у службы поддержки оператора или на их официальном сайте.