[Сценарий] Парсер баланса Мотив

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

Ответить
Аватара пользователя
Djeday999
Сообщения: 45
Зарегистрирован: Сб май 29, 2021 3:04 pm
Откуда: Екатеринбург
Благодарил (а): 6 раз
Поблагодарили: 9 раз

[Сценарий] Парсер баланса Мотив

Сообщение Djeday999 » Чт апр 21, 2022 8:54 pm

Выкладываю код для получения данных о ЛС оператора Мотив. Данные получаем с файла json. Тут вроде все просто.

Код: Выделить всё

$username = '9089089089';
$password = '**********';
$url = 'https://api.motivtelecom.ru/client/v1/login';

echo '<!DOCTYPE html><html lang="ru"><head><meta charset="utf-8"/></head><body><br>';

// Авторизуемся
$header = [
    'Accept: application/json',
    'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
    'Host: api.motivtelecom.ru',
    'Content-Type: application/json',
    'Referer: https://lk.motivtelecom.ru/'
];

$post_data = [
    'password'       => $password,
    'username'       => $username
];

$post_data = json_encode($post_data);

$page = getData('https://api.motivtelecom.ru/client/v1/login', $header, $post_data);

$json = json_decode($page);

// Токен
if (empty($json->access_token)) {
    die('ОШИБКА: Не найден токен!');
}
$mot_token = $json->access_token;

// ЛК
$header = [
    'Accept: application/json',
    'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
    'Authorization: Bearer ' . $mot_token,
    'Referer: https://lk.motivtelecom.ru/'
];

$page = getData('https://api.motivtelecom.ru/client/v1/me', $header);

$json = json_decode($page);

// Баланс
if (!isset($json->balance->value)) {
    die('ОШИБКА: Не найдены данные баланса!');
}

$mot_bal = $json->balance->value;
$mot_sta = $json->status->title;
$mot_tar = $json->tariff->title;
$mot_dat = $json->tariff->charge_date;

if ($mot_dat == '') {
    $mot_dat = 'Нет данных';
}

echo "<strong>Баланс:</strong> $mot_bal<br><br>\r\n";
echo "<strong>Статус:</strong> $mot_sta<br><br>\r\n";
echo "<strong>Тариф:</strong> $mot_tar<br><br>\r\n";
echo "<strong>Дата окончания:</strong> $mot_dat<br><br>\r\n";

// Минуты остаток
$page1 = getData('https://api.motivtelecom.ru/client/v1/me/remains', $header);

$json1 = json_decode($page1, true);

$min = $json1[0]['rest_amount'];
$gig = $json1[1]['rest_amount'];

if ($min == '') {
    $min = '0';
}

if ($gig == '') {
    $gig = '0';
}

echo "<strong>Остаток минут:</strong> $min<br><br>\r\n";
echo "<strong>Остаток мегабайт:</strong> $gig<br><br>\r\n";

echo '</body></html>';

// Функция CURL-запроса
function getData($url, $header = false, $post_data = false)
{
    global $dir;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    if ($header) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    }
    if ($post_data) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    }
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 300);
    curl_setopt(
        $ch,
        CURLOPT_USERAGENT,
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0'
    );
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    $ret = curl_exec($ch);
    usleep(300000);
    
    return $ret;
}
Этот код я засунул в метод класса Users, так как у меня, в отличии от МегаФона, в семье три мобильных на этом операторе.
Если кому надо, могу выложить код парсера личного кабинета Газекс с возможностью передачи показаний счетчика газа.
Ответить