Парсим данные из личного кабинета het.uz

Поделись находкой

По ходу построения дэшборда для своего умного дома, мне захотелось вытащить данные по балансу в кабинете поставщика электроэнергии. К сожалению, договориться по-хорошему с представителями данной конторы не получилось, а народного API у них совсем не предусмотрено. Пришлось работать с тем, что есть.

Следует отметить, что помимо отсутствия API для простого юзера (процессинговые центры всё-же имеют какой-то интерфейс) сам кабинет пользователя ещё и защищается от парсинга, проверяя в заголовке идентификатор юзер агента. Зачем? Фиг их знает! Спасибо, что хотя бы капчу не воткнули…

Далее, представляю небольшой код на php для парсинга данных из кабинета.

<?php
	$ch = curl_init(); // Инициализируем CURL
	curl_setopt($ch, CURLOPT_URL, 'http://mu.het.uz:7003/pcabinet/ru/logon.jsp');
	curl_setopt($ch, CURLOPT_USERAGENT,'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36'); // Устанавливает идентификатор вашего "браузера", иначе нас пошлют к чёрту...
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_POSTFIELDS, "login=XXXXXXXXXXXXX&amp;password=XXXX"); // Вместо ХХХ вбейте свой номер счёта и пароль от кабинета
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_COOKIESESSION, true);
	curl_setopt($ch, CURLOPT_COOKIEJAR, '');  //could be empty, but cause problems on some hosts
	curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp');  //could be empty, but cause problems on some hosts
	//var_dump(getallheaders($ch));
	$answer = curl_exec($ch);
	if (curl_error($ch)) {
		echo curl_error($ch);
	}
	sleep(3); // На всякий члучай добавил паузу, ибо кабинет немного тупит.
	
	//Вход в кабинет выполнен, переходим на страницу с нужными данными

	curl_setopt($ch, CURLOPT_URL, 'http://mu.het.uz:7003/pcabinet/ru/physical/current_calc.jsp');
	curl_setopt($ch, CURLOPT_POST, false);
	curl_setopt($ch, CURLOPT_POSTFIELDS, "");
	$answer = mb_convert_encoding(curl_exec($ch),"utf-8", "windows-1251");

	if (curl_error($ch)) {
		echo curl_error($ch);
	}


	$answer = findin('<table class=table>','</table>',$answer);
	$answer = explode('<tr>', $answer);
	$ttd = str_replace(' nowrap', '', $answer[3]);
	$td = explode('<td class=td>', $ttd);
	foreach($td as $sum){
		$out[] = str_replace(' ', '', $sum);
	}
	
	if($out[10] > 0){
		echo $out[10];
	} elseif ($out[9] > 0) {
		echo "-".$out[9];
	}
	function findin($arg1,$arg2,$text){
		$text = stristr($text, $arg1);
		$text = stristr($text, $arg2, true);
		$text = str_replace($arg1,"",$text);
		return $text;
	}
?>

Вот собственно и весь парсер. Иногда срабатывает не с первого раза, уж такой у них там кабинет.

Если вам понравилась статья и пригодился мой код, подкиньте админу на пиво ;)