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

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

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

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

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

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

Получение данных с файла json.

Данные берутся с личного кабинета МегаФона https://lk.megafon.ru .


Выкладываю код для версии ЛК.

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

$username = '9222222222';
$password = '*********';
//$url = 'https://lk.megafon.ru/api/login';

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

// Авторизуемся
$header = [
    'Accept: application/json, text/plain, */*',
    'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
    'Host: lk.megafon.ru',
    'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
    'Referer: https://lk.megafon.ru',
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0',
    'X-Cabinet-Capabilities: web-2020'
];

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

    $post_data = http_build_query($post_data);

$page = getData('https://lk.megafon.ru/api/login', $header, $post_data);
    file_put_contents(__DIR__ . '/megafonLK.json', $page);
$json = json_decode($page);

$meg_mes = $json->message;

echo "<strong>Сообщение со странцы авторизации:</strong> $meg_mes<br><br>\r\n";
// ЛК
$header = [
    'Accept: application/json, text/plain, */*',
    'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
    'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
    'Referer: https://lk.megafon.ru/',
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0',
    'X-Cabinet-Capabilities: web-2020'
];

$page = getData('https://lk.megafon.ru/api/main/balance', $header);
//    file_put_contents(__DIR__ . '/megafon1.json', $page);
$json = json_decode($page);

$meg_bal = $json->balance;
$meg_mes1 = $json->message;

echo "<strong>Баланс:</strong> $meg_bal<br><br>\r\n";
echo "<strong>Сообщение со страницы данных:</strong> $meg_mes1<br><br>\r\n";
//sg("User.Balance","$meg_bal");  // Присваиваем данные

// Минуты и интернет остаток
$page1 = getData('https://lk.megafon.ru/api/options/v2/remainders/mini', $header);
//    file_put_contents(__DIR__ . '/minmegafon.json', $page1);
$json1 = json_decode($page1, true);

$min = $json1['remainders'][0]['availableValue']['value'];
$gig = $json1['remainders'][1]['availableValue']['value'];
$gig1 = $gig*1000;
if ($min == '') {
    $min = '0';
}

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

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

//sg("User.MinOstatok","$min");  // Присваиваем данные
//sg("User.MegabOstatok","$gig1");  // Присваиваем данные

// Название тарифа и статус
$page2 = getData('https://lk.megafon.ru/api/tariff/2019-3/current', $header);
//    file_put_contents(__DIR__ . '/statusmegafon.json', $page2);
$json2 = json_decode($page2, true);

$tar = $json2['name'];
$stat = $json2['status'];
$dat = $json2['ratePlanCharges']['chargeDate'];

$dat1 = substr($dat, 0, strpos($dat, ' ' )); // Обрезаем 12.07.2022 00:02 до 12.07.2022

if ($tar == '') {
    $tar = 'Без тарифа';
}

if ($stat == 'current') {
    $stat = 'Активен';
}

echo "<strong>Тариф:</strong> $tar<br><br>\r\n";
echo "<strong>Статус тарифа:</strong> $stat<br><br>\r\n";
echo "<strong>Дата окончания тарифа:</strong> $dat1<br><br>\r\n";

//sg("User.TarifMob","$tar");  // Присваиваем данные
//sg("User.BalanceStat","$stat");  // Присваиваем данные
//sg("User.DataStop","$dat1");  // Присваиваем данные

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

//file_put_contents(__DIR__ . '/page.json', $page);
//print_r($json);
//die;

// Функция 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);
    curl_setopt($ch, CURLOPT_COOKIEJAR, __DIR__ . '/megaf_cookie.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, __DIR__ . '/megaf_cookie.txt');
    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:99.0) Gecko/20100101 Firefox/99.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;
}
Так как в семье только у супруги МегаФон, то создал сценарий с периодичностью запуска каждый день в 06 утра.
И на заметку: при частых запросах необходимо будет вводить капчу дополнительно к логину и паролю.
Чуток позже выложу такой же код для оператора Мотив (Свердловская область).
Пользуйтесь. :roll:
Последний раз редактировалось Djeday999 Пт окт 27, 2023 8:05 am, всего редактировалось 2 раза.
За это сообщение автора Djeday999 поблагодарил:
yoshok (Пт июл 08, 2022 11:51 am)
Рейтинг: 1.16%
Аватара пользователя
yoshok
Сообщения: 64
Зарегистрирован: Вс авг 21, 2016 12:50 pm
Благодарил (а): 3 раза
Поблагодарили: 14 раз

Re: [Сценарий] Парсер баланса МегаФон

Сообщение yoshok » Пт июл 08, 2022 12:12 pm

Djeday999 писал(а):
Чт апр 21, 2022 8:30 pm
Получение данных с файла json.

Сейчас пока данные берутся с бета версии личного кабинета МегаФона https://beta.lk.megafon.ru (будем надеяться, что он долго проживет).
Есть предыдущая версия ЛК, основная https://lk.megafon.ru, но пока не доперло до меня как одновременно получить CSRF со страницы входа и одновременно вставить этот токен с логином и паролем в POST запрос авторизации. На форуме хабра находил человека, у которого получилось это провернуть, но он на питоне код писал и не выложил его, да и я в питоне не бум-бум.

Выкладываю код для бета версии ЛК.

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

$username = '9222222222';
$password = '*********';
//$url = 'https://beta.lk.megafon.ru/api/login';

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

// Авторизуемся
$header = [
    'Accept: application/json, text/plain, */*',
    'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
    'Host: beta.lk.megafon.ru',
    'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
    'Referer: https://beta.lk.megafon.ru/login',
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0',
    'X-Cabinet-Capabilities: web-2020'
];

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

    $post_data = http_build_query($post_data);

$page = getData('https://beta.lk.megafon.ru/api/login', $header, $post_data);
$json = json_decode($page);

// ЛК
$header = [
    'Accept: application/json, text/plain, */*',
    'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
    'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
    'Referer: https://beta.lk.megafon.ru/',
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0',
    'X-Cabinet-Capabilities: web-2020'
];

$page = getData('https://beta.lk.megafon.ru/api/main/balance', $header);
$json = json_decode($page);

$meg_bal = $json->balance;

echo "<strong>Баланс:</strong> $meg_bal<br><br>\r\n";

// Минуты и интернет остаток
$page1 = getData('https://beta.lk.megafon.ru/api/options/v2/remainders/mini', $header);
$json1 = json_decode($page1, true);

$min = $json1['remainders'][0]['availableValue']['value'];
$gig = $json1['remainders'][1]['availableValue']['value'];

echo "<strong>Остаток минут:</strong> $min<br><br>\r\n";
echo "<strong>Остаток гигабайт:</strong> $gig1<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);
    curl_setopt($ch, CURLOPT_COOKIEJAR, __DIR__ . '/megaf_cookie.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, __DIR__ . '/megaf_cookie.txt');
    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:99.0) Gecko/20100101 Firefox/99.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;
}
Так как в семье только у супруги МегаФон, то создал сценарий с периодичностью запуска каждый день в 06 утра.
И на заметку: при частых запросах необходимо будет вводить капчу дополнительно к логину и паролю.
Чуток позже выложу такой же код для оператора Мотив (Свердловская область).
Пользуйтесь. :roll:
Здорово все это! но как в свойство определенное вписать это все?
Аватара пользователя
Djeday999
Сообщения: 44
Зарегистрирован: Сб май 29, 2021 3:04 pm
Откуда: Екатеринбург
Благодарил (а): 6 раз
Поблагодарили: 9 раз

Re: [Сценарий] Парсер баланса МегаФон

Сообщение Djeday999 » Вт июл 12, 2022 8:48 am

yoshok писал(а):
Пт июл 08, 2022 12:12 pm
Djeday999 писал(а):
Чт апр 21, 2022 8:30 pm
Получение данных с файла json.

Сейчас пока данные берутся с бета версии личного кабинета МегаФона https://beta.lk.megafon.ru (будем надеяться, что он долго проживет).
Есть предыдущая версия ЛК, основная https://lk.megafon.ru, но пока не доперло до меня как одновременно получить CSRF со страницы входа и одновременно вставить этот токен с логином и паролем в POST запрос авторизации. На форуме хабра находил человека, у которого получилось это провернуть, но он на питоне код писал и не выложил его, да и я в питоне не бум-бум.

Выкладываю код для бета версии ЛК.

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

$username = '9222222222';
$password = '*********';
//$url = 'https://beta.lk.megafon.ru/api/login';

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

// Авторизуемся
$header = [
    'Accept: application/json, text/plain, */*',
    'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
    'Host: beta.lk.megafon.ru',
    'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
    'Referer: https://beta.lk.megafon.ru/login',
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0',
    'X-Cabinet-Capabilities: web-2020'
];

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

    $post_data = http_build_query($post_data);

$page = getData('https://beta.lk.megafon.ru/api/login', $header, $post_data);
$json = json_decode($page);

// ЛК
$header = [
    'Accept: application/json, text/plain, */*',
    'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
    'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
    'Referer: https://beta.lk.megafon.ru/',
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0',
    'X-Cabinet-Capabilities: web-2020'
];

$page = getData('https://beta.lk.megafon.ru/api/main/balance', $header);
$json = json_decode($page);

$meg_bal = $json->balance;

echo "<strong>Баланс:</strong> $meg_bal<br><br>\r\n";

// Минуты и интернет остаток
$page1 = getData('https://beta.lk.megafon.ru/api/options/v2/remainders/mini', $header);
$json1 = json_decode($page1, true);

$min = $json1['remainders'][0]['availableValue']['value'];
$gig = $json1['remainders'][1]['availableValue']['value'];

echo "<strong>Остаток минут:</strong> $min<br><br>\r\n";
echo "<strong>Остаток гигабайт:</strong> $gig1<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);
    curl_setopt($ch, CURLOPT_COOKIEJAR, __DIR__ . '/megaf_cookie.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, __DIR__ . '/megaf_cookie.txt');
    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:99.0) Gecko/20100101 Firefox/99.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;
}
Так как в семье только у супруги МегаФон, то создал сценарий с периодичностью запуска каждый день в 06 утра.
И на заметку: при частых запросах необходимо будет вводить капчу дополнительно к логину и паролю.
Чуток позже выложу такой же код для оператора Мотив (Свердловская область).
Пользуйтесь. :roll:
Здорово все это! но как в свойство определенное вписать это все?
Предположим у меня так это сделано:
sg("Lena.Balance","$meg_bal"); // Присваиваем данные
sg("Lena.MinOstatok","$min"); // Присваиваем данные
sg("Lena.MegabOstatok","$gig"); // Присваиваем данные
sg("Lena.TarifMob","$tar"); // Присваиваем данные
sg("Lena.BalanceStat","$stat"); // Присваиваем данные
sg("Lena.DataStop","$dat"); // Присваиваем данные

По каждому User создал свойства и туда записываются данные с json.
astotskiy
Сообщения: 42
Зарегистрирован: Вт июл 15, 2014 4:28 pm
Благодарил (а): 78 раз
Поблагодарили: 4 раза

Re: [Сценарий] Парсер баланса МегаФон

Сообщение astotskiy » Ср окт 05, 2022 9:52 pm

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

Re: [Сценарий] Парсер баланса МегаФон

Сообщение Djeday999 » Чт окт 06, 2022 8:45 am

astotskiy писал(а):
Ср окт 05, 2022 9:52 pm
Подскажите подалуйста, этот код еще работает?, попробывал воспроизвести и что то не вышло
Да. Немного сломали в МегаФоне ссылку. В коде уберите "beta." и все заработает.
Поправил в исходнике.
Аватара пользователя
Svetлая
Сообщения: 238
Зарегистрирован: Вс май 06, 2018 11:36 pm
Благодарил (а): 80 раз
Поблагодарили: 75 раз
Контактная информация:

Re: [Сценарий] Парсер баланса МегаФон

Сообщение Svetлая » Вт окт 03, 2023 8:43 am

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

Re: [Сценарий] Парсер баланса МегаФон

Сообщение Djeday999 » Пт окт 27, 2023 7:53 am

Svetлая писал(а):
Вт окт 03, 2023 8:43 am
Здравствуйте, пыталась запустить ваш код, не получилось. Подскажите где копать, спасибо.
Добрый! В чем загвоздка?
В исходнике заменил на свой код из сценария.
Но и прежняя версия работала.
Ответить