<?php
function strip_tags_content($text, $tags = '', $invert = FALSE) {
preg_match_all('/<(.+?)[\s]*\/?[\s]*>/si', trim($tags), $tags);
$tags = array_unique($tags[1]);
if(is_array($tags) AND count($tags) > 0) {
if($invert == FALSE) {
return preg_replace('@<(?!(?:'. implode('|', $tags) .')\b)(\w+)\b.*?>.*?</\1>@si', '', $text);
}
else {
return preg_replace('@<('. implode('|', $tags) .')\b.*?>.*?</\1>@si', '', $text);
}
}
elseif($invert == FALSE) {
return preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text);
}
return $text;
}
function is_domDocument($object)
{
if($object instanceof DOMDocument) {
return true;
}
else {
return false;
}
}
function DOMinnerHTML($element) {
try {
$innerHTML = "";
$children = $element->childNodes;
foreach ($children as $child) {
$innerHTML .= $element->ownerDocument->saveHTML($child);
}
return $innerHTML;
} catch(Exception $e) {
echo "EXCEPTION IN DOMinnerHTML: ", $e->getMessage();
}
}
function endsWith($haystack, $needle) {
$length = strlen($needle);
if ($length == 0) {
return true;
}
return (substr($haystack, -$length) === $needle);
}
function startsWith ($string, $startString) {
$len = strlen($startString);
return (substr($string, 0, $len) === $startString);
}
function get_string_between($string, $start, $end){
$string = ' ' . $string;
$ini = strpos($string, $start);
if ($ini == 0) return '';
$ini += strlen($start);
$len = strpos($string, $end, $ini) - $ini;
return substr($string, $ini, $len);
}
/*
Errors:
-1 username or password not specified (aj blin dis a mast sou dej hev jor informejšon)
-2 you are not logged in (aj blin trms of srvis bi neseseri)
-3 bad username and/or password (diplomatski odgovor ;-)
-4 not written yet (suka bljet)
-5 session exists in another system (sucky)
-6 error in fetched data
*/
class itisClient {
private $username;
private $password;
public $version = array(0, 1, 2);
private $programname = "itisclient";
private $programdomain = 'itisclient.sijanec.tk';
private $cookiedir; // set at runtime, ker je get_curerent_user, v login()
private $mainpage = "https://www.itis.si/";
private $mainpageaction = "https://www.itis.si/?rw=1";
private $iskanjestran = "https://www.itis.si/iskanje/stran-";
public function setusername($value) {
$this->username = $value;
}
public function setpassword($value) {
$this->password = $value;
}
private function get($property) {
return $this->$property;
}
public function getversion() {
return $this->version;
}
private function login() {
if (empty($this->username) || empty($this->password)) {
return -1;
}
$this->cookiedir = '/tmp/'.posix_getuid().'/'.$this->programdomain.'/cookiedir/';
if (!is_dir($this->cookiedir.$this->username)) {
if (!mkdir($this->cookiedir.$this->username, 0700, true)) { // x permišn mora bit', da lahko dela poddirektorije, hence true, hence 0700; group in others pa je 0, da ne morejo brati piškotkov!!! zeloo pomembno!
return -5;
}
}
$ch = curl_init();
// curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0);
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookiedir.$this->username."/cookie.txt" ); // cookiejar
curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookiedir.$this->username."/cookie.txt" ); // coolie file // this scuks
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// curl_setopt($ch, CURLOPT_HEADER, 1); // return headers?
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return transfer?
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // follow 3xx redirects?
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // max 3xx redirectas?
curl_setopt($ch, CURLOPT_USERAGENT, $this->programdomain."/".implode(".", $this->version));
curl_setopt($ch, CURLOPT_AUTOREFERER, 1); // auto send refereres?
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // timeout for tcp connection
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // timeout for http response
curl_setopt($ch, CURLOPT_URL, $this->mainpage);
curl_setopt($ch, CURLOPT_POST, 0);
$login_page = curl_exec($ch);
$xmlDoc = new DOMDocument();
$xmlDoc->loadHTML( $login_page );
$formNode = $xmlDoc->getElementsByTagName( "form" )[0]; // only one form
$searchNode = $formNode->getElementsByTagName("input");
foreach( $searchNode as $sn ) {
if($sn->getAttribute('name') != 'ctl00$navigationLogin$tbUsername' && $sn->getAttribute('name') != 'ctl00$navigationLogin$tbPassword' &&
$sn->getAttribute("type") != "submit")
$postvars .= urlencode($sn->getAttribute('name'))."=".urlencode($sn->getAttribute('value'))."&";
}
curl_setopt($ch, CURLOPT_URL, $this->mainpageaction);
curl_setopt($ch, CURLOPT_POST, 1);
$postbody = $postvars.urlencode('ctl00$navigationLogin$tbUsername')."=".urlencode($this->username)."&".
urlencode('ctl00$navigationLogin$tbPassword')."=".urlencode($this->password)."&".urlencode('ctl00$navigationLogin$btnLogin')."=".
urlencode("PRIJAVA");
curl_setopt($ch, CURLOPT_POSTFIELDS, $postbody);
$login_output = curl_exec($ch);
$xmlDoc = new DOMDocument();
$xmlDoc->loadHTML( $login_output );
$searchNode = $xmlDoc->getElementsByTagName( "div" );
foreach( $searchNode as $sn ) {
if($sn->getAttribute('id') == 'navigationLogin_divNapaka') {
if (DOMinnerHTML($sn) == 'Napačno uporabniško ime in/ali geslo.') {
return -3;
} else if(DOMinnerHTML($sn) ==
'To uporabniško ime je v že v uporabi na drugem računalniku. Odjavite se iz drugega računalnika ali počakajte, da vam poteče seja.') {
return -5; // holy shit u fukkin kill.d her, TSMedia!
}
}
}
return $ch;
}
public function fetchregije() {
$ch = $this->login();
if(!curl_getinfo($ch)) {
if(!empty($ch)){return $ch;}else{return -2;}
}
curl_setopt($ch, CURLOPT_URL, $this->mainpage);
curl_setopt($ch, CURLOPT_POST, 0);
$request_output = curl_exec($ch);
$xmlDoc = new DOMDocument();
$xmlDoc->loadHTML( $request_output );
$searchNode = $xmlDoc->getElementById( "search_ddlRegion" )->getElementsByTagName("option");
$regije=array();
foreach( $searchNode as $sn ) {
if(!empty($sn->getAttribute("value"))) $regije[] = $sn->getAttribute("value");
}
return $regije;
}
public function fetchkontakti($kajsplohiscemo = 0, $regija = "GORENJSKA") { // kajsplohiscemo-bool=[0-osebe]/1-podjetja regija-string=[GORENJSKA]/...
$ch = $this->login();
if(!curl_getinfo($ch)) {
if(!empty($ch)){return $ch;}else{return -2;}
}
if($kajsplohiscemo) {
$barva = "yellow"; // wtf, Adacta
return -4;
} else {$barva = "white";}
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_URL, $this->mainpage);
$request_init_output = curl_exec($ch);
$xmlDoc = new DOMDocument($request_init_output);
$xmlDoc->loadHTML( $request_init_output );
$searchNode = $xmlDoc->getElementsByTagName("form")[0]->getElementsByTagName( "input" );
foreach( $searchNode as $sn ) {
if($sn->getAttribute("name") != 'ctl00$search$hfSearchMode' && $sn->getAttribute("name") != 'ctl00$search$ddlRegion') {
$postvars .= urlencode($sn->getAttribute('name'))."=".urlencode($sn->getAttribute('value')).'&';
}
}
curl_setopt($ch, CURLOPT_POST, 1);
// curl_setopt($ch, CURLOPT_HEADER, array('array("Content-Type: multipart/form-data")'));
curl_setopt($ch, CURLOPT_URL, $this->mainpageaction);
$postbody=$postvars.urlencode('ctl00$search$hfSearchMode').'='.urlencode($barva).'&'.urlencode('ctl00$search$ddlRegion').'='.
urlencode($regija).'&__EVENTTARGET=&__EVENTARGUMENT=&ctl00%24search%24hfSearchFormMode=2&ctl00%24search%24ddlAreaCode=&ctl00%24search%24ddlWorkingHoursDay=&ctl00%24search%24ddlWorkingHoursFrom=&ctl00%24search%24ddlWorkingHoursTo=&ctl00%24search%24ddlAdditionalOptions=&hiddenInputToUpdateATBuffer_CommonToolkitScripts=1'; // (-;
if($kajsplohiscemo){ $postbody .= '&'.urlencode('ctl00$search$btnSearchAlt').'='.urlencode('NAJDI');} // THIS FINNALY WORKS BUT ONLY FOR
else {$postbody .= '&'.urlencode('ctl00$search$btnSearch').'='.urlencode('IŠČI');} // LOGGED IN USERS! DON'T TOUCH
curl_setopt($ch, CURLOPT_POSTFIELDS, $postbody); // THE ANCIENT CODE!
$request_output = curl_exec($ch); // https://www.reddit.com/r/ProgrammerHumor/comments/9xat04/the_ancient_code/
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_URL, $this->iskanjestran."064176345"); // just a big intager
$request_after_output = curl_exec($ch);
$xmlDoc = new DOMDocument($request_after_output);
$xmlDoc->loadHTML($request_after_output);
$zadnjastran = explode("-", $xmlDoc->getElementById("CPH_bodyMain_SearchResultsStatic1_ResultsPagerStatic1_aLastPage")->getAttribute("href"))[1];
$kontakti = array();
for($i = 1; $i <= $zadnjastran; $i++) {
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_URL, $this->iskanjestran.$i); // just a bing intager
$request_loop_output = curl_exec($ch);
$xmlDoc = new DOMDocument($request_loop_output);
$xmlDoc->loadHTML($request_loop_output);
$searchNode = $xmlDoc->getElementById('CPH_bodyMain_SearchResultsStatic1_UpdatePanelSearchResults')->getElementsByTagName("a");
foreach($searchNode as $sn) {
if(startsWith($sn->getAttribute("href"), "/oseba/")) $kontakti[] =
preg_replace_callback('/[^\x20-\x7f]/', function($match) {
return urlencode($match[0]);
}, "https://www.itis.si".$sn->getAttribute("href")); // just don't change your domain
}
}
return $kontakti;
}
public function fetchoseba($personlink) { // personlink, začenjši z https://www.itis.si/oseba/
$ch = $this->login();
if(!curl_getinfo($ch)) {
if(!empty($ch)){return $ch;}else{return -2;}
}
curl_setopt($ch, CURLOPT_URL, $personlink);
curl_setopt($ch, CURLOPT_POST, 0);
$request_output = curl_exec($ch);
if ($request_output == null) return -6;
$xmlDoc = new DOMDocument($request_output);
$xmlDoc->loadHTML($request_output);
$oseba = array();
$oseba['name'] = DOMinnerHTML($xmlDoc->getElementsByTagName("h1")[0]);
foreach ($xmlDoc->getElementsByTagName('a') as $ej) {
if (endsWith($ej->getAttribute("id"), "hlMapAddress")) {
$addresstext = $ej;
}
}
$oseba['address'] = explode('<br>', str_replace("\n", null, str_replace("\r", null, str_replace(" ", null, DOMinnerHTML($addresstext)))));
$oseba['nr'] = array();
foreach($xmlDoc->getElementsByTagName("div") as $sn) {
if($sn->getAttribute("class") == "nr") $oseba['nr'][] = str_replace(" ", null, strip_tags_content(DOMinnerHTML($sn)));
}
$oseba['nr'] = array_unique($oseba['nr']);
// $oseba['gps'] = get_string_between($ej->getAttribute("href"), 'javascript:openMap(',",'".$oseba['name']);
$oseba['gps']['y'] = get_string_between($request_output, '&Y=', '&n=');
$oseba['gps']['x'] = get_string_between($request_output, '/zemljevid/X=', '&Y=');
return $oseba;
}
public function posljisms($telefonska = "064176345", $prefix = "(poslal itisclient) ", $telo = "itisclient") { // kajsplohiscemo-bool=[0-osebe]/1-podjetja regija-string=[GORENJSKA]/...
$ch = $this->login();
if(!curl_getinfo($ch)) {
if(!empty($ch)){return $ch;}else{return -2;}
}
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_URL, $this->mainpage);
$request_init_output = curl_exec($ch);
$xmlDoc = new DOMDocument($request_init_output);
$xmlDoc->loadHTML( $request_init_output );
$searchNode = $xmlDoc->getElementsByTagName("form")[0]->getElementsByTagName( "input" );
foreach( $searchNode as $sn ) {
if($sn->getAttribute("name") != 'ctl00$CPH_bodyMain$SendSMS$Sender1$btnSend'
&& $sn->getAttribute("name") != 'ctl00$CPH_bodyMain$SendSMS$Sender1$hfMessage'
&& $sn->getAttribute("name") != 'ctl00$CPH_bodyMain$SendSMS$Sender1$tbNumber'
&& $sn->getAttribute("name") != 'ctl00$CPH_bodyMain$SendSMS$Sender1$tbMessage'
&& $sn->getAttribute("name") != 'ctl00$search$btnSearchAlt'
&& $sn->getAttribute("name") != 'ctl00$search$btnSearch') {
$postvars .= urlencode($sn->getAttribute('name'))."=".urlencode($sn->getAttribute('value')).'&';
}
}
curl_setopt($ch, CURLOPT_POST, 1);
// curl_setopt($ch, CURLOPT_HEADER, array('array("Content-Type: multipart/form-data")'));
curl_setopt($ch, CURLOPT_URL, $this->mainpageaction);
$postbody='__EVENTARGUMENT=&__EVENTTARGET=&'.$postvars.urlencode('ctl00$CPH_bodyMain$SendSMS$Sender1$btnSend').'='.urlencode("Pošlji").'&'.
urlencode('ctl00$CPH_bodyMain$SendSMS$Sender1$hfMessage').'='.urlencode($prefix).'&'.
urlencode('ctl00$CPH_bodyMain$SendSMS$Sender1$tbNumber').'='.urlencode($telefonska).'&'.
urlencode('ctl00$CPH_bodyMain$SendSMS$Sender1$tbMessage').'='.urlencode($telo).
'&ctl00%24CPH_bodyMain%24SendSMS%24Sender1%24hfSponsorMessage=a&hiddenInputToUpdateATBuffer_CommonToolkitScripts=1'; // (-;
curl_setopt($ch, CURLOPT_POSTFIELDS, $postbody); // THE ANCIENT CODE!
$request_output = curl_exec($ch); // https://www.reddit.com/r/ProgrammerHumor/comments/9xat04/the_ancient_code/
if(curl_getinfo(CURLINFO_RESPONSE_CODE) == 200) {
return true;
} else {
return false;
}
}
}
?>