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

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

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

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

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

Сообщение 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: beta.lk.megafon.ru',
    'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
    'Referer: https://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://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://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);
$json = json_decode($page);

$meg_bal = $json->balance;

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

// Минуты и интернет остаток
$page1 = getData('https://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 Чт окт 06, 2022 8:48 am, всего редактировалось 1 раз.
За это сообщение автора Djeday999 поблагодарил:
yoshok (Пт июл 08, 2022 11:51 am)
Рейтинг: 1.18%
Аватара пользователя
yoshok
Сообщения: 55
Зарегистрирован: Вс авг 21, 2016 12:50 pm
Благодарил (а): 3 раза
Поблагодарили: 13 раз

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
Сообщения: 42
Зарегистрирован: Сб май 29, 2021 3:04 pm
Откуда: Екатеринбург
Благодарил (а): 6 раз
Поблагодарили: 8 раз

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
Сообщения: 41
Зарегистрирован: Вт июл 15, 2014 4:28 pm
Благодарил (а): 77 раз
Поблагодарили: 4 раза

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

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

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

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

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

astotskiy писал(а):
Ср окт 05, 2022 9:52 pm
Подскажите подалуйста, этот код еще работает?, попробывал воспроизвести и что то не вышло
Да. Немного сломали в МегаФоне ссылку. В коде уберите "beta." и все заработает.
Поправил в исходнике.
Ответить