File: //var/www/temp/yarustone.ru/ysearch.php
<?php
function pareser_log($data) {
//file_put_contents('pareser_log.txt', $data . "\n", FILE_APPEND);
}
pareser_log($_SERVER['QUERY_STRING']);
class Punycode {
const BASE = 36;
const TMIN = 1;
const TMAX = 26;
const SKEW = 38;
const DAMP = 700;
const INITIAL_BIAS = 72;
const INITIAL_N = 128;
const PREFIX = 'xn--';
const DELIMITER = '-';
protected static $_encodeTable = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',);
protected static $_decodeTable = array('a' => 0, 'b' => 1, 'c' => 2, 'd' => 3, 'e' => 4, 'f' => 5, 'g' => 6, 'h' => 7, 'i' => 8, 'j' => 9, 'k' => 10, 'l' => 11, 'm' => 12, 'n' => 13, 'o' => 14, 'p' => 15, 'q' => 16, 'r' => 17, 's' => 18, 't' => 19, 'u' => 20, 'v' => 21, 'w' => 22, 'x' => 23, 'y' => 24, 'z' => 25, '0' => 26, '1' => 27, '2' => 28, '3' => 29, '4' => 30, '5' => 31, '6' => 32, '7' => 33, '8' => 34, '9' => 35);
protected $encoding;
public function __construct($encoding = 'UTF-8') {
$this->encoding = $encoding;
}
public function encode($input) {
$parts = explode('.', $input);
foreach ($parts as &$part) {
$part = $this->_encodePart($part);
}
return implode('.', $parts);
}
protected function _encodePart($input) {
$codePoints = $this->_codePoints($input);
$n = self::INITIAL_N;
$bias = self::INITIAL_BIAS;
$delta = 0;
$h = $b = count($codePoints['basic']);
$output = '';
foreach ($codePoints['basic'] as $code) {
$output .= $this->_codePointToChar($code);
}
if ($input === $output) {
return $output;
}
if ($b > 0) {
$output .= self::DELIMITER;
}
$codePoints['nonBasic'] = array_unique($codePoints['nonBasic']);
sort($codePoints['nonBasic']);
$i = 0;
$length = mb_strlen($input, $this->encoding);
while ($h < $length) {
$m = $codePoints['nonBasic'][$i++];
$delta = $delta + ($m - $n) * ($h + 1);
$n = $m;
foreach ($codePoints['all'] as $c) {
if ($c < $n || $c < self::INITIAL_N) {
$delta++;
}
if ($c === $n) {
$q = $delta;
for ($k = self::BASE; ; $k += self::BASE) {
$t = $this->_calculateThreshold($k, $bias);
if ($q < $t) {
break;
}
$code = $t + (($q - $t) % (self::BASE - $t));
$output .= self::$_encodeTable[$code];
$q = ($q - $t) / (self::BASE - $t);
}
$output .= self::$_encodeTable[$q];
$bias = $this->_adapt($delta, $h + 1, ($h === $b));
$delta = 0;
$h++;
}
}
$delta++;
$n++;
}
return self::PREFIX . $output;
}
public function decode($input) {
$parts = explode('.', $input);
foreach ($parts as &$part) {
if (strpos($part, self::PREFIX) !== 0) {
continue;
}
$part = substr($part, strlen(self::PREFIX));
$part = $this->_decodePart($part);
}
return implode('.', $parts);
}
protected function _decodePart($input) {
$n = self::INITIAL_N;
$i = 0;
$bias = self::INITIAL_BIAS;
$output = '';
$pos = strrpos($input, self::DELIMITER);
if ($pos !== false) {
$output = substr($input, 0, $pos++);
} else {
$pos = 0;
}
$outputLength = strlen($output);
$inputLength = strlen($input);
while ($pos < $inputLength) {
$oldi = $i;
$w = 1;
for ($k = self::BASE; ; $k += self::BASE) {
$digit = self::$_decodeTable[$input[$pos++]];
$i = $i + ($digit * $w);
$t = $this->_calculateThreshold($k, $bias);
if ($digit < $t) {
break;
}
$w = $w * (self::BASE - $t);
}
$bias = $this->_adapt($i - $oldi, ++$outputLength, ($oldi === 0));
$n = $n + (int)($i / $outputLength);
$i = $i % ($outputLength);
$output = mb_substr($output, 0, $i, $this->encoding) . $this->_codePointToChar($n) . mb_substr($output, $i, $outputLength - 1, $this->encoding);
$i++;
}
return $output;
}
protected function _calculateThreshold($k, $bias) {
if ($k <= $bias + self::TMIN) {
return self::TMIN;
} elseif ($k >= $bias + self::TMAX) {
return self::TMAX;
}
return $k - $bias;
}
protected function _adapt($delta, $numPoints, $firstTime) {
$delta = (int)(($firstTime) ? $delta / self::DAMP : $delta / 2);
$delta += (int)($delta / $numPoints);
$k = 0;
while ($delta > ((self::BASE - self::TMIN) * self::TMAX) / 2) {
$delta = (int)($delta / (self::BASE - self::TMIN));
$k = $k + self::BASE;
}
$k = $k + (int)(((self::BASE - self::TMIN + 1) * $delta) / ($delta + self::SKEW));
return $k;
}
protected function _codePoints($input) {
$codePoints = array('all' => array(), 'basic' => array(), 'nonBasic' => array(),);
$length = mb_strlen($input, $this->encoding);
for ($i = 0; $i < $length; $i++) {
$char = mb_substr($input, $i, 1, $this->encoding);
$code = $this->_charToCodePoint($char);
if ($code < 128) {
$codePoints['all'][] = $codePoints['basic'][] = $code;
} else {
$codePoints['all'][] = $codePoints['nonBasic'][] = $code;
}
}
return $codePoints;
}
protected function _charToCodePoint($char) {
$code = ord($char[0]);
if ($code < 128) {
return $code;
} elseif ($code < 224) {
return (($code - 192) * 64) + (ord($char[1]) - 128);
} elseif ($code < 240) {
return (($code - 224) * 4096) + ((ord($char[1]) - 128) * 64) + (ord($char[2]) - 128);
} else {
return (($code - 240) * 262144) + ((ord($char[1]) - 128) * 4096) + ((ord($char[2]) - 128) * 64) + (ord($char[3]) - 128);
}
}
protected function _codePointToChar($code) {
if ($code <= 0x7F) {
return chr($code);
} elseif ($code <= 0x7FF) {
return chr(($code >> 6) + 192) . chr(($code & 63) + 128);
} elseif ($code <= 0xFFFF) {
return chr(($code >> 12) + 224) . chr((($code >> 6) & 63) + 128) . chr(($code & 63) + 128);
} else {
return chr(($code >> 18) + 240) . chr((($code >> 12) & 63) + 128) . chr((($code >> 6) & 63) + 128) . chr(($code & 63) + 128);
}
}
}
class GoogleTopVisorParser {
private $api_key;
public $api_url = 'https://api.topvisor.ru/';
function __construct($api_key) {
$this->api_key = $api_key;
}
private function generateUrl($params) {
$url = $this->api_url . '?api_key=' . $this->api_key;
foreach($params as $key=>$value) {
$_tmp = preg_replace('/\ +/u', '%20', $value);
$url .= '&' . $key . '=' . $_tmp;
}
return $url;
}
public function executeResponse($params, $post = array()) {
pareser_log(var_export($params, true));
pareser_log(var_export($post, true));
$url = $this->generateUrl($params);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
if(!empty($post)) {
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
}
$response = curl_exec($curl);
curl_close($curl);
pareser_log($response);
$result = json_decode($response);
return $result;
}
public function getProjectList() {
$params = array(
'oper' => 'get',
'module' => 'mod_projects'
);
return $this->executeResponse($params);
}
public function getProject($name) {
$params = array(
'oper' => 'get',
'module' => 'mod_projects',
'func' => 'v2'
//'method' => 'full',
);
$post = array(
'search_str' => $name
);
$projects = $this->executeResponse($params, $post);
$_project = false;
if(!empty($projects)) {
foreach($projects as $project) {
if($project->name == $name) {
$_project = $project;
}
}
}
return $_project;
}
public function getResponseList($filters, $_project = false) {
if(isset($filters->domain) && !empty($filters->domain)) {
$project = ($_project !== false) ? $_project : $this->getProject($filters->domain);
if (isset($project->id)) {
$params = array(
'oper' => 'get',
'module' => 'mod_keywords',
'post[project_id]' => $project->id
);
$response = $this->executeResponse($params);
return $response;
}
return 0;
}
return 0;
}
public function addPhrase($filters) {
if(isset($filters->domain) && !empty($filters->domain) ||
isset($filters->phrase) && !empty($filters->phrase)) {
$project = $this->getProject($filters->domain);
if (isset($project->id)) {
$params = array(
'oper' => 'add',
'module' => 'mod_keywords',
'post[project_id]' => $project->id,
'post[phrase]' => $filters->phrase
);
return $this->executeResponse($params);
}
return 0;
}
return 0;
}
public function startReposition($filters) {
if(isset($filters->domain) && !empty($filters->domain)) {
$project = $this->getProject($filters->domain);
if (isset($project->id)) {
$params = array(
'oper' => 'edit',
'module' => 'mod_keywords',
'method' => 'parse_task',
'post[id]' => $project->id
);
return $this->executeResponse($params);
}
return 0;
}
return 0;
}
private function getCodeCity($city) {
$cities = array(
// KZ
'алматы' => array(
'region_key' => '162',
'region_lang' => 'en' ),
'актобе' => array(
'region_key' => '20273',
'region_lang' => 'en' ),
'астана' => array(
'region_key' => '163',
'region_lang' => 'en' ),
'караганда' => array(
'region_key' => '164',
'region_lang' => 'en' ),
'шымкент' => array(
'region_key' => '221',
'region_lang' => 'en' ),
'костанайская область' => array(
'region_key' => '29412',
'region_lang' => 'en' ),
'шимкент' => array(
'region_key' => '221',
'region_lang' => 'en' ),
'уральск' => array(
'region_key' => '10305',
'region_lang' => 'en' ),
'западно-казахстанская область' => array(
'region_key' => '29410',
'region_lang' => 'en' ),
'павлодар' => array(
'region_key' => '190',
'region_lang' => 'en' ),
'талдыкорган' => array(
'region_key' => '10303',
'region_lang' => 'en' ),
'усть-каменогорск' => array(
'region_key' => '10306',
'region_lang' => 'en' ),
'актау' => array(
'region_key' => '29575',
'region_lang' => 'en' ),
'актобе' => array(
'region_key' => '20273',
'region_lang' => 'en' ),
'казахстан' => array(
'region_key' => '159',
'region_lang' => 'en' ),
'атырау' => array(
'region_key' => '10291',
'region_lang' => 'en' ),
'кокшетау' => array(
'region_key' => '20809',
'region_lang' => 'en' ),
// RU
'белогорск' => array('region_key' => '11374'),
'омск' => array('region_key' => '66'),
'томск' => array('region_key' => '67'),
'москва' => array('region_key' => '213'),
'калининград' => array('region_key' => '22'),
'краснодар' => array('region_key' => '35'),
'кемерово' => array('region_key' => '64'),
'саратов' => array('region_key' => '194'),
'воронеж' => array('region_key' => '193'),
'красноярск' => array('region_key' => '62'),
'пенза' => array('region_key' => '49'),
'комсомольск-на-амуре' => array('region_key' => '11453'),
'самара' => array('region_key' => '51'),
'иркутск' => array('region_key' => '63'),
'пермь' => array('region_key' => '50'),
'ижевск' => array('region_key' => '44'),
'волгоград' => array('region_key' => '38'),
'сургут' => array('region_key' => '973'),
'оренбург' => array('region_key' => '48'),
'новосибирск' => array('region_key' => '65'),
'владивосток' => array('region_key' => '75'),
'тюмень' => array('region_key' => '55'),
'сочи' => array('region_key' => '239'),
'хабаровск' => array('region_key' => '76'),
'белгород' => array('region_key' => '4'),
'якутск' => array('region_key' => '74'),
'челябинск' => array('region_key' => '56'),
'ярославль' => array('region_key' => '16'),
'тверь' => array('region_key' => '14'),
'екатеринбург' => array('region_key' => '54'),
'новокузнецк' => array('region_key' => '237'),
'уфа' => array('region_key' => '172'),
'приморский край' => array('region_key' => '11409'),
'артем' => array('region_key' => '11409'),
'артём' => array('region_key' => '11409'),
'чебоксары' => array('region_key' => '45'),
'нижний новгород' => array('region_key' => '47'),
'вологда' => array('region_key' => '21'),
'казань' => array('region_key' => '43'),
'санкт-петербург' => array('region_key' => '2'),
'ростов-на-дону' => array('region_key' => '39'),
'бор' => array('region_key' => '20037'),
'саров' => array('region_key' => '11083'),
'нефтеюганск' => array('region_key' => '11184'),
'нижневартовск' => array('region_key' => '1091'),
'ноябрьск' => array('region_key' => '11231'),
'нягань' => array('region_key' => '11186'),
'ханты-мансийск' => array('region_key' => '57'),
'липецк' => array('region_key' => '9'),
'псков' => array('region_key' => '25'),
'барнаул' => array('region_key' => '197'),
'улан-удэ' => array('region_key' => '198'),
'новый уренгой' => array('region_key' => '11230'),
'чита' => array('region_key' => '68'),
'киров' => array('region_key' => '46'),
'салехард' => array('region_key' => '58'),
'благовещенск' => array('region_key' => '11112'),
'абакан' => array('region_key' => '1095'),
'братск' => array('region_key' => '976'),
'южно-сахалинск' => array('region_key' => '80'),
'магадан' => array('region_key' => '79'),
'петропавловск-камчатский' => array('region_key' => '78'),
'тольятти' => array('region_key' => '240'),
'амурск' => array('region_key' => '11451'),
'тула' => array('region_key' => '15'),
'калуга' => array('region_key' => '6'),
'рязань' => array('region_key' => '11'),
'владимир' => array('region_key' => '192'),
'мурманск' => array('region_key' => '23'),
'москва и московская область' => array('region_key' => '1'),
'саранск' => array('region_key' => '42'),
'новороссийск' => array('region_key' => '970'),
'киселёвск' => array('region_key' => '11283'),
'междуреченск' => array('region_key' => '118792'),
'новокузнецк' => array('region_key' => '237'),
'прокопьевск' => array('region_key' => '11291'),
'нижний тагил' => array('region_key' => '11168'),
'златоуст' => array('region_key' => '11202'),
'каменск-уральский' => array('region_key' => '11164'),
'курган' => array('region_key' => '53'),
'миасс' => array('region_key' => '11212'),
'новоуральск' => array('region_key' => '11170'),
'первоуральск' => array('region_key' => '11171'),
'уссурийск' => array('region_key' => '11426'),
'переславль-залесский' => array('region_key' => '10837'),
'рыбинск' => array('region_key' => '10839'),
'астрахань' => array('region_key' => '37'),
'россия' => array('region_key' => '225'),
'норильск' => array('region_key' => '11311'),
'свердловская область' => array('region_key' => '11162'),
'ханты-мансийский автономный округ' => array('region_key' => '11193'),
'ульяновск' => array('region_key' => '195'),
'стерлитамак' => array('region_key' => '11116'),
'ставрополь' => array('region_key' => '36'),
'армавир' => array('region_key' => '10987'),
'кисловодск' => array('region_key' => '11062'),
'невинномысск' => array('region_key' => '11064'),
'пятигорск' => array('region_key' => '11067'),
'иваново' => array('region_key' => '5'),
'йошкар-ола' => array('region_key' => '41'),
'кострома' => array('region_key' => '7'),
'жигулевск' => array('region_key' => '120862'),
'сызрань' => array('region_key' => '11139'),
'бийск' => array('region_key' => '975'),
'сарапул' => array('region_key' => '11152'),
'омская область' => array('region_key' => '11318'),
);
$local = (isset($_GET['local'])) ? false : true;
if ($local) {
$city = iconv('cp1251', 'utf-8', $city);
}
$city = mb_convert_case($city, MB_CASE_LOWER, "UTF-8");
foreach($cities as $key=>$_c) {
if($key == $city) {
return $cities[$key];
}
}
return 0;
}
private function createProject($filters) {
if(isset($filters->domain) && !empty($filters->domain)) {
$params = array(
'oper' => 'add',
'module' => 'mod_projects',
'post[site]' => $filters->domain
);
return $this->executeResponse($params);
}
}
public function addSearcher($filters, $_project = false) {
$_project = ($_project !== false) ? $_project : $this->getProject($filters->domain);
if($_project !== false) {
$project_id = $_project->id;
$city = $this->getCodeCity($filters->city);
$region = $city['region_key'] . ':1:';
$region .= (isset($city['region_lang'])) ? $city['region_lang'] : 'ru';
$params = array(
'oper' => 'add',
'module' => 'mod_projects',
'method' => 'searcher',
'post[project_id]' => $project_id,
'post[searcher]' => 1,
'post[regions][]' => $region
);
$search = $this->executeResponse($params);
if($search->error == true) {
$empty = true;
$sid = 1;
foreach($_project->searchers as $search) {
$sid = $search->id;
foreach($search->regions as $r) {
if($r->key == $city['region_key']) {
$empty = false;
}
}
}
if($empty) {
$params = array(
'oper' => 'add',
'module' => 'mod_projects',
'method' => 'searcher_region',
'post[searcher_id]' => $sid,
'post[region]' => $city['region_key']
);
$response = $this->executeResponse($params);
return $response;
}
return 0;
}
return $search;
}
return 0;
}
public function deleteDomain($filters) {
if(isset($filters->domain) && !empty($filters->domain)) {
$_project = $this->getProject($filters->domain);
if($_project === false) {
return 0;
} else {
$project_id = $_project->id;
}
$params = array(
'oper' => 'del',
'module' => 'mod_projects',
'post[id]' => $project_id,
);
$status = $this->executeResponse($params);
return $status;
}
}
public function checkDomain($filters) {
if(isset($filters->domain) && !empty($filters->domain)) {
$_project = $this->getProject($filters->domain);
if($_project === false) {
if($_project->error == true) {
die('-1');
}
$project = $this->createProject($filters);
if($project->error === false) {
$project_id = $project->result;
} else {
echo 'Project add fail: ' . $project->message;
exit();
}
$_project = $this->getProject($filters->domain);
$project_id = $_project->id;
} else {
$project_id = $_project->id;
}
$params = array(
'oper' => 'get',
'module' => 'mod_keywords',
'func' => 'percent_of_parse',
'post[project_ids][]' => $project_id,
);
$status = $this->executeResponse($params);
return $status;
} else {
return false;
}
}
public function getCountPos($filters) {
if(isset($filters->domain) && !empty($filters->domain)) {
$_project = $this->getProject($filters->domain);
if($_project === false) {
die('-1');
} else {
$project_id = $_project->id;
}
$date = new DateTime('now');
$city = $this->getCodeCity($filters->city);
$params = array(
'oper' => 'get',
'module' => 'mod_keywords',
'method' => 'history',
'post[project_id]' => $project_id,
'post[rows]' => 1000,
'post[page]' => 1,
'post[searcher]' => 1,
'post[region_key]' => $city['region_key'],
'post[group_id]' => -1,
'post[region_lang]' => (isset($city['region_lang'])) ? $city['region_lang'] : 'ru',
'post[date2]' => $date->format('Y-m-d'),
'post[date1]' => $date->format('Y-m-d'),
'post[type_range]' => 2
);
$phrases = $this->executeResponse($params);
if(isset($phrases->phrases) && !empty($phrases->phrases)) {
echo count((array)$phrases->phrases);
die();
} else {
echo 0;
die();
}
}
}
public function googleAllPos($filters) {
if(isset($filters->domain) && !empty($filters->domain) ||
isset($filters->phrases) && !empty($filters->phrases)) {
$_project = $this->getProject($filters->domain);
if($_project === false) {
if($_project->error == true) {
die('-1');
}
$project = $this->createProject($filters);
if($project->error === false) {
$project_id = $project->result;
} else {
echo 'Project add fail: ' . $project->message;
exit();
}
$_project = $this->getProject($filters->domain);
$project_id = $_project->id;
} else {
$project_id = $_project->id;
}
$aReturn = array();
foreach($filters->phrases as $queries) {
$filters->city = $queries->city;
$this->addSearcher($filters, $_project);
$respons = $this->getResponseList($filters, $_project);
$local = (isset($_GET['local'])) ? false : true;
$aQueries = array();
$newQueries = array();
foreach($queries->queries as $query) {
if ($local) {
$query->Name = iconv('cp1251', 'utf-8', mb_strtolower($query->Name));
}
$query->Name = mb_convert_case($query->Name, MB_CASE_LOWER, "UTF-8");
$exist = FALSE;
foreach ($respons as $respon) {
if ($respon->phrase == $query->Name) {
$exist = true;
}
}
if ($exist === FALSE) {
$filters->phrase = $query->Name;
$newQueries[$query->Id] = $query->Name;
//$this->addPhrase($filters);
} else {
$aQueries[$query->Id] = $query->Name;
}
}
if(!empty($newQueries)) {
$chunks = array_chunk($newQueries, 10, true);
foreach($chunks as $item) {
$params = array(
'oper' => 'add',
'module' => 'mod_keywords',
'method' => 'import',
'post[project_id]' => $project_id,
'post[phrases]' => implode('|||', $item)
);
$this->executeResponse($params);
foreach ($item as $_id => $_phrase) {
$aQueries[$_id] = $_phrase;
}
}
}
$date = new DateTime('now');
$city = $this->getCodeCity($filters->city);
$params = array(
'oper' => 'get',
'module' => 'mod_keywords',
'method' => 'history',
'post[project_id]' => $project_id,
'post[rows]' => 1000,
'post[page]' => 1,
'post[searcher]' => 1,
'post[region_key]' => $city['region_key'],
'post[group_id]' => -1,
'post[region_lang]' => (isset($city['region_lang'])) ? $city['region_lang'] : 'ru',
'post[date2]' => $date->format('Y-m-d'),
'post[date1]' => $date->format('Y-m-d'),
'post[type_range]' => 2
);
$phrases = $this->executeResponse($params);
if(isset($phrases->phrases) && !empty($phrases->phrases)) {
foreach($phrases->phrases as $phrase) {
if(in_array($phrase->phrase, $aQueries)) {
$key = array_search($phrase->phrase, $aQueries);
$aReturn[$key] = $phrase;
}
}
}
}
return $aReturn;
}
}
public function googlePos($filters) {
if(isset($filters->domain) && !empty($filters->domain) ||
isset($filters->phrase) && !empty($filters->phrase)) {
$local = (isset($_GET['local'])) ? false : true;
if ($local) {
$filters->phrase = iconv('cp1251', 'utf-8', $filters->phrase);
}
$filters->phrase = mb_convert_case($filters->phrase, MB_CASE_LOWER, "UTF-8");
$_project = $this->getProject($filters->domain);
if($_project === false) {
if($_project->error == true) {
die('-1');
}
$project = $this->createProject($filters);
if($project->error === false) {
$project_id = $project->result;
} else {
echo 'Project add fail: ' . $project->message;
exit();
}
$project_id = $_project->id;
} else {
$project_id = $_project->id;
}
$searcher = $this->addSearcher($filters);
$respons = $this->getResponseList($filters);
$_phrase = false;
foreach($respons as $respon) {
if($respon->phrase == $filters->phrase) {
$_phrase = $respon->phrase;
}
}
if($_phrase === false) {
$phrase_id = $this->addPhrase($filters);
}
$date = new DateTime('now');
$city = $this->getCodeCity($filters->city);
$params = array(
'oper' => 'get',
'module' => 'mod_keywords',
'method' => 'history',
'post[project_id]' => $project_id,
'post[rows]' => 1000,
'post[page]' => 1,
'post[searcher]' => 1,
'post[region_key]' => $city['region_key'],
'post[group_id]' => -1,
'post[region_lang]' => (isset($city['region_lang'])) ? $city['region_lang'] : 'ru',
'post[date2]' => $date->format('Y-m-d'),
'post[date1]' => $date->format('Y-m-d'),
'post[type_range]' => 2
);
usleep(100000);
$phrases = $this->executeResponse($params);
if(isset($phrases->phrases) && !empty($phrases->phrases)) {
foreach($phrases->phrases as $phrase) {
if($phrase->phrase == $filters->phrase) {
return $phrase;
}
}
}
}
}
public function getPosition($filters) {
if(isset($filters->domain) && !empty($filters->domain) ||
isset($filters->phrase) && !empty($filters->phrase)) {
//$respons = $this->getResponseList($filters);
$project = $this->getProject($filters->domain);
$_project = false;
if(!empty($project)) {
foreach($project as $p) {
if($p->name == $filters->domain) {
$_project = $p;
}
}
}
if ($_project !== false) {
$project = $_project;
/*if(empty($respons)) {
$id = $this->addPhrase($filters);
}
$respons = current($respons);*/
$date = new DateTime('now');
$city = $this->getCodeCity($filters->city);
$params = array(
'oper' => 'get',
'module' => 'mod_keywords',
'method' => 'history',
'post[project_id]' => $project->id,
'post[rows]' => 1000,
'post[page]' => 1,
'post[searcher]' => 1,
'post[region_key]' => $city['region_key'],
'post[group_id]' => -1,
'post[region_lang]' => $city['region_lang'],
'post[date2]' => $date->format('Y-m-d'),
'post[date1]' => $date->format('Y-m-d'),
'post[type_range]' => 2
);
$phrases = $this->executeResponse($params);
if(isset($phrases->phrases) && !empty($phrases->phrases)) {
foreach($phrases->phrases as $phrase) {
if($phrase->phrase == $filters->phrase) {
return $phrase;
}
}
}
}
return 0;
}
return 0;
}
}
abstract class Parse {
protected $_query;
protected $_lang;
protected $_topage;
protected $_g_city;
protected $_site;
protected $_sites;
protected $_action;
protected $_messages = array();
const DEBUG = false;
public function __construct($action, $site, $sites, $query, $topage) {
$this->_query = $query;
$this->_topage = $topage;
$this->_site = $site;
$this->_sites = $sites;
$this->_action = $action;
if (!empty($_GET['debug']) && !empty($_GET['local'])) {
$this->DEBUG = true;
}
}
//Функция подключение к интернет-странице методос cUrl
protected function getContent($url, $filename, $cookies, $g_cookie = null) {
if (DEBUG && (bool)$_GET['d_url']) {
echo $url;
die;
}
$agent = getUserAgent();
$dirname = dirname($_SERVER['SCRIPT_FILENAME']) . '/';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, 1);
//curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 2);
curl_setopt($curl, CURLOPT_TIMEOUT, 250);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
if (!file_exists($dirname . $filename)) {
$f = fopen($dirname . $filename, 'w+');
if ($f) {
fclose($f);
}
}
if ($filename) {
curl_setopt($curl, CURLOPT_COOKIEJAR, $dirname . $filename);
}
if ($cookies) {
curl_setopt($curl, CURLOPT_COOKIEFILE, $dirname . $cookies);
}
if ($g_cookie) {
if (DEBUG && (bool)$_GET['d_cookie']) {
echo $g_cookie;
die;
}
curl_setopt($curl, CURLOPT_COOKIE, $g_cookie);
}
$response = curl_exec($curl);
if (!empty($_GET['d_resp'])) {
print_r($response);
die;
}
$err = curl_error($curl);
curl_close($curl);
return $response;
}
protected function url($params) {
$str = array();
foreach ($params as $key => $value) {
$str[] = $key . '=' . $value;
}
return '/search?' . implode('&', $str);
}
abstract public function run();
protected function fatalError($message) {
echo $message;
if (!$this->DEBUG) {
die;
}
}
protected function showDebug() {
echo '<hr>';
foreach ($this->_messages as $key => $message) {
echo '<b>' . $key . ':</b> ' . $message . '<br>';
}
echo '<hr>';
die;
}
}
class GoogleParse extends Parse {
private $_banlist = array();
const TIME_BAN = 21600; // 6 hours = 6*60*60 sec
private function getCookieCityByNameForGoogle($city) {
$cities = array(
// RU
'омск' => '10L7QvNGB0Lo',
'москва' => '10LzQvtGB0LrQstCw',
'красноярск' => '10LrRgNCw0YHQvdC-0Y_RgNGB0Lo',
'иркутск' => '10LjRgNC60YPRgtGB0Lo',
'новосибирск' => '10L3QvtCy0L7RgdC40LHQuNGA0YHQug',
'владивосток' => '10LLQu9Cw0LTQuNCy0L7RgdGC0L7Qug',
'тюмень' => '10YLRjtC80LXQvdGM',
'сочи' => '10YHQvtGH0Lg',
'хабаровск' => '10YXQsNCx0LDRgNC-0LLRgdC6',
'белгород' => '10LHQtdC70LPQvtGA0L7QtA',
'челябинск' => '10YfQtdC70Y_QsdC40L3RgdC6',
'ярославль' => '10Y_RgNC-0YHQu9Cw0LLQu9GM',
'артем' => '10LDRgNGC0LXQvA',
'артём' => '10LDRgNGC0LXQvA',
'тверь' => '10KLQstC10YDRjA',
'новокузнецк' => '10L3QvtCy0L7QutGD0LfQvdC10YbQug',
'уфа' => '10YPRhNCw',
// KZ
'астана' => '10LDRgdGC0LDQvdCw',
'алматы' => '10LDQu9C80LDRgtGL',
'павлодар' => '10L_QsNCy0LvQvtC00LDRgA',
);
if ((bool)$_GET['local'] === false) {
$city = iconv('cp1251', 'utf-8', $city);
}
$city = mb_convert_case($city, MB_CASE_LOWER, "UTF-8");
if (!array_key_exists($city, $cities)) {
$this->fatalError('NOT_FOUND_CITY');
}
$this->_messages['city'] = $city;
$this->_messages['cityHash'] = $cities[$city];
return $cities[$city];
}
private function getCookieForGoogle($cityCode) {
switch ($this->_lang) {
case 'ru':
$ID = '70eb3af64c12cbf7';
$U = '7ea96d9864ea3f9d';
$TM = '1429773793';
$LM = '1429776410';
break;
case 'kz':
$ID = 'ef9b22325a8ff8d4';
$U = 'af6ce88c48dd228a';
$TM = '';
$LM = '1429787830';
break;
}
return 'PREF=ID=' . $ID . ':U=' . $U . ':FF=0:LD=' . $this->_lang . ':NR=10:NW=1:TM=' . $TM . ':LM=' . $LM . ':L=' . $cityCode . ':SG=1:S=7hYbppwO4E0wV36F';
}
protected function url() {
$params = $this->{'url_'.$this->_lang}();
return parent::url($params);
}
private function url_ru() {
$params = new stdClass();
$params->ie = 'UTF-8';
$params->q = $this->_query;
$params->oq = $this->_query;
$params->num = $this->_topage;
$params->start = 0;
$params->hl = $this->_lang;
$params->lr = 'lang_' . $this->_lang;
$params->cr = 'country' . strtoupper($this->_lang);
return $params;
}
private function url_kz() {
$params = new stdClass();
$params->ie = 'UTF-8';
$params->q = $this->_query;
$params->oq = $this->_query;
$params->num = $this->_topage;
$params->start = 0;
$params->hl = $this->_lang;
$params->lr = 'lang_' . $this->_lang;
return $params;
}
private function anonymousList() {
switch ($this->_lang) {
case 'ru':
return array(
'http://0s.o53xo.m5xw6z3mmuxhe5i.cmle.ru', // http://cameleo.ru - Хамелеон
'http://0s.o53xo.m5xw6z3mmuxhe5i.nblu.ru', // http://noblock.ru - Анонимайзер NoBlock
// 'http://sss.lnbbb.gnlttlqj.cnwz.prxs.ru', // http://www.seogadget.ru/anonymizer
// 'https://alu5.ejy63jwa.owl.e.s55.ru.wbprx.com', // http://hideme.ru
// 'http://sss.lgccc.ggmuumrk.cgxa.fineseven.ru', // http://instaway.ru
'http://0s.o53xo.m5xw6z3mmuxhe5i.dresk.ru', // http://dostyp.ru
'https://www.google.ru', // google original
);
case 'kz':
return array(
'http://0s.o53xo.m5xw6z3mmuxgw6q.cmle.ru', // http://cameleo.ru - Хамелеон
// 'https://alu5.ejy63jwa.tz1.e.s55.ru.wbprx.com', // http://hideme.ru
// 'http://sss.lgccc.ggmuumrk.cgqf.fineseven.ru', // http://instaway.ru
'http://sss.leaaa.geksskpi.ceod.saariselka.ru', // http://anonymizer.ru
'http://sss.ljxxx.gjhpphmf.cjla.golovavpeske.ru', // http://timp.cohula.ru
'http://0s.o53xo.m5xw6z3mmuxgw6q.dresk.ru', // http://dostyp.ru
'https://www.google.kz', // google original
);
}
}
private function chooseServer() {
$list = array_diff($this->anonymousList(), $this->_banlist);
$index = array_rand($list);
return isset($index) ? $list[$index] : false;
}
private function getBanFilePath() {
return dirname(__FILE__) . '/tmp/.ban';
}
private function checkBanList() {
$this->_banlist = $this->readBanList();
// @TODO временное решение
if (!count($this->_banlist)) {
@unlink($this->getBanFilePath());
return true;
}
foreach ($this->_banlist as $key => $item) {
$time = trim($key, '_');
if ($time + self::TIME_BAN < time()) {
unset($this->_banlist[$key]);
}
}
if (!count($this->_banlist)) {
unlink($this->getBanFilePath());
return true;
}
$this->writeBanList($this->_banlist);
}
private function readBanList() {
return is_file($this->getBanFilePath()) ? array_filter(unserialize(file_get_contents($this->getBanFilePath()))) : array();
}
private function writeBanList($data) {
if (!file_exists('tmp')) {
mkdir(dirname(__FILE__) . '/tmp');
}
file_put_contents($this->getBanFilePath(), serialize($data));
}
private function addBanList($row) {
$list = array_merge($this->readBanList(), $row);
$this->writeBanList($list);
}
private function search() {
$this->_lang = !empty($_GET['g_country']) ? $_GET['g_country'] : 'ru';
$g_city = !empty($_GET['g_city']) ? $this->getCookieCityByNameForGoogle($_GET['g_city']) : '';
if (!$g_city) {
$this->fatalError('Enter City');
}
$g_cookie = $this->getCookieForGoogle($g_city);
$this->_messages['query'] = $this->_query;
if ((bool) $_GET['local'] === false) {
$this->_query = iconv('cp1251', 'utf-8', $this->_query);
}
$this->_messages['site'] = $this->_site;
// $this->_query = urlencode($this->_query);
$this->checkBanList();
if (!$server = $this->chooseServer()) {
$this->fatalError('BAN');
$this->_messages['ban-list'] = implode('<br>', $this->_banlist);
$this->showDebug();
}
$URL = $server . $this->url();
$this->_messages['url'] = '<a target="_blank" href="' . $URL . '">URL</a>';
// print_r($URL);die;
$content = $this->getContent($URL, false, false, $g_cookie);
// print_r($content);
preg_match_all("/<a href=\"\/url\?q=([^\"]*)\"/si", $content, $result);
$result[1] = array_unique($result[1]);
if (!count($result[1])) {
$this->addBanList(array('_'.time() => $server));
$this->search();
}
$this->_messages['links'] = implode('<br>', $result[1]);
$this->_messages['content'] = iconv('cp1251', 'utf-8', $content);
return $result[1];
}
public function run() {
$result = $this->search();
if (!$this->DEBUG) {
@ob_clean();
}
foreach ($result as $key => $value) {
$value = strip_tags($value);
preg_match("/http[s]?:\/\/(([^\/]*)[^&]*)/si", $value, $domain);
if (($this->_site) && (in_array(strtoupper($domain[2]), $this->_sites))) {
echo($key + 1);
if ($this->_action == 'googleposurl') {
echo "\n", urldecode($domain[1]);
}
exit;
}
}
if ($this->DEBUG) {
$this->showDebug();
}
$this->fatalError('1000');
}
}
//ini_set('display_errors', 0);
//error_reporting(E_ALL ^ E_NOTICE);
//ini_set('display_errors', 1);
//error_reporting(E_ALL);
$filepath = dirname(__FILE__);
define('DEBUG', !empty($_GET['debug']));
set_time_limit(600);
//header("Content-Type: text/html; charset=utf-8") ;
$agent = $_uAgent[0];
$fuid01 = $_uAgent[1];
$cookie = $_uAgent[2];
function getUserAgent() {
$numReg = isset($_GET['nr']) ? $_GET['nr'] : 1;
$userAgents = array(// Chrome Олег wwwwmaster
array('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36', '', 'yandexuid=1520537971382499386; yabs-frequency=/4/0000000000000000/lZImSBmN9zipi72y5qV45Azml1TkziznSBmNNFBMht2y5w7Ppt5ml1SX-JAmSBmNH_Woi72i5oV7Ch1mh1Tk/; Session_id=2:1393579399.0.5.105589048.8:1393579399000:1536207396:80.0.1.1.0.106623.119694.fe5f4aa332424174bb0da94a1ed367c8; yp=1401114504.mu.0#1708939399.udn.d3d3d21hc3Rlcg%3D%3D; ys=udn.d3d3d21hc3Rlcg%3D%3D; L=ZwEMU2hYB2xtfWtlV1N+cHhJdGd7RlVdGzkAJREPUBg+U08AWXg7FEM/RRoNFk0MOCUtODVVBFY4VRscNlcZNg==.1393579399.10292.270273.ef05299add811309d95bf118d48938e8; yandex_login=wwwwmaster; my=YzYBAQA='), // Опера Олег itbcom9
// itbcom9
array('Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.16', '517762645f874a5b.BOs1ABVIw1--HSVeDydTqCnR59kXFibBgmj-h7YFp97bpBYtJkSZy_-eP4P8ZihGEsXGYyvL6rc2cyGJ8Zjn_PbPQgQOkxc5TJpX8MS3phoJviuSmGkFGgy3L2BV60zg', 'ys=udn.aXRiY29tOQ%3D%3D#translate.opera.1.0.87; yandexuid=4678711951366778442; fuid01=517762645f874a5b.BOs1ABVIw1--HSVeDydTqCnR59kXFibBgmj-h7YFp97bpBYtJkSZy_-eP4P8ZihGEsXGYyvL6rc2cyGJ8Zjn_PbPQgQOkxc5TJpX8MS3phoJviuSmGkFGgy3L2BV60zg; _ym_visorc_1028356=b; yabs-frequency=/4/0G000DC-iL400000/1ZImSBmN9yGKht2y5oxorgzml1SXziznSBmNFC4oi72y5oV7Ch1ml1Sk/; Session_id=2:1393579621.0.5.138899851.8:1393579621000:1536207396:80.0.1.1.0.106623.249217.597c4e1fbde1c3c4377b63b944d4b86c; yp=1708939621.udn.aXRiY29tOQ%3D%3D; ys=udn.aXRiY29tOQ%3D%3D; L=YAECBWtYB2pufWNmW1Nxe3VNcGF9RF1fW2dKKhoRAAQrF1QdAn0rDkUhRhUPClRQJ30kdWwJBBI8TE4cdlJeIQ==.1393579621.10292.232770.83d1a732c53894ea2ea24dea0b95e7ef; yandex_login=itbcom9; my=YzYBAQA='),
// FireFox Олег itbcom8
array(' Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0', '517762645f874a5b.BOs1ABVIw1--HSVeDydTqCnR59kXFibBgmj-h7YFp97bpBYtJkSZy_-eP4P8ZihGEsXGYyvL6rc2cyGJ8Zjn_PbPQgQOkxc5TJpX8MS3phoJviuSmGkFGgy3L2BV60zg', 'yandexuid=2187910801366264148; fuid01=517762645f874a5b.BOs1ABVIw1--HSVeDydTqCnR59kXFibBgmj-h7YFp97bpBYtJkSZy_-eP4P8ZihGEsXGYyvL6rc2cyGJ8Zjn_PbPQgQOkxc5TJpX8MS3phoJviuSmGkFGgy3L2BV60zg; yabs-frequency=/4/0G0007CojL400000/o3AmSBmN9ySoi72y5oxorgzml1T1sSznSBmN8Ruqi72y5oV45Azml1SkziznS80NN000/; yp=1708939859.sp.nd%3A50%3And%3A50%3And%3A50%3And%3A50%3Aundefined#1708939923.udn.aXRiY29tOA%3D%3D; my=YzYBAQA=; L=YwENBWxRD2lsdGFtW115cnVPdmR9Q1VaDmZVeBEPD0Q0AFoICD0uCV08UBQDCAEQeXolMTEBClYgW0tCJkMAZQ==.1393579923.10292.252570.dd44176f73d795a7aeae325d87cbd4fd; ys=udn.aXRiY29tOA%3D%3D; Session_id=2:1393579923.0.5.138861087.8:1393579923000:1536207396:80.0.1.1.0.106623.735671.b834866332210f531a22f8422a2f9197; yandex_login=itbcom8'),
// itbcom7 (chrome) Алексей Червов
array('Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36', '', 'yandexuid=2562684431384683784; __utma=190882677.249318743.1393268796.1393268796.1393268796.1; __utmc=190882677; __utmz=190882677.1393268796.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); yabs-frequency=/4/3W0008Qblb800000/4YEmSBWN8G00/; Session_id=2:1393580864.0.5.138860237.8:1393580864000:1536207396:34.0.1.1.0.106623.7960.45ee8c77e0e5211165d0ad1a5590dd55; yp=1708940864.udn.aXRiY29tNw%3D%3D; ys=udn.aXRiY29tNw%3D%3D; L=bgFaBWFQBWhocGZgUlhwentIc2N4Q1RdASBRLBoaAUViD00RVCp6VwwkSgRVFAgfLSIzJG1VBQo4AxMGMggNJQ==.1393580864.10292.284273.832f784b885656199b403f09e7776c3a; yandex_login=itbcom7; my=YzYBAQA='),
// itbcom6 (ff) Алексей Червов
array('Mozilla/5.0 (Windows NT 6.3; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0', '52e8b50655dc1fce.NKrjdYLP_t46xcHhW_A6DS-CtAwimFKVml-WdHsToqNiseWXi728A3g-9qshJRftgOSsSpJFO1F-y7vNhT7ilod1drt-xWTPA0cvbVMCacnLS4UAZxPpMVxaVS5oxI0I', 'yandexuid=1694049311384420022; yp=1708941036.udn.aXRiY29tNg%3D%3D; my=YzYBAQA=; L=ZAFaBWpRBmpgfWRlU1J+c35Kcmh6SV5bASBRLBoaAB04WwgJDnc/Bg1xBh0CCABfeSUwLzpSBQ8oQ09BcFwTKw==.1393581036.10292.288901.ee72f8683af7f7d7d5fb38cba33f53fc; fuid01=52e8b50655dc1fce.NKrjdYLP_t46xcHhW_A6DS-CtAwimFKVml-WdHsToqNiseWXi728A3g-9qshJRftgOSsSpJFO1F-y7vNhT7ilod1drt-xWTPA0cvbVMCacnLS4UAZxPpMVxaVS5oxI0I; yabs-frequency=/4/0000000000000000/bekVPvWN8G00/; ys=udn.aXRiY29tNg%3D%3D; Session_id=2:1393581036.0.5.138860096.8:1393581036000:1536207396:51.0.1.1.0.106623.219.eeae20c5229c7a5a4a5889a21a90c8c3; yandex_login=itbcom6'),
// itbcom5 (opera) Алексей Червов
array('Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 OPR/18.0.1284.68', '52e8b50655dc1fce.NKrjdYLP_t46xcHhW_A6DS-CtAwimFKVml-WdHsToqNiseWXi728A3g-9qshJRftgOSsSpJFO1F-y7vNhT7ilod1drt-xWTPA0cvbVMCacnLS4UAZxPpMVxaVS5oxI0I', 'yandexuid=2368242411389365614; fuid01=52e8b50655dc1fce.NKrjdYLP_t46xcHhW_A6DS-CtAwimFKVml-WdHsToqNiseWXi728A3g-9qshJRftgOSsSpJFO1F-y7vNhT7ilod1drt-xWTPA0cvbVMCacnLS4UAZxPpMVxaVS5oxI0I; Session_id=2:1393581179.0.5.138859677.8:1393581179000:1536207396:34.0.1.1.0.106623.2670.bebd9b14e57d7542a657e3dc05ab0e3e; yp=1708941179.udn.aXRiY29tNQ%3D%3D; ys=udn.aXRiY29tNQ%3D%3D; L=bwEYBWlYAGxvc2ZtUVp7enVNeGZ4R15ZCSMGJwUbA0BrDgoOXjw6UQx9V0QYC0kGJSVjKy1TCgw3ARJCLABaYw==.1393581179.10292.247162.fbb860a460a7abece8566bf610beeab7; yandex_login=itbcom5; my=YzYBAQA='),
// itbcom7 (ie11) Алексей Червов
array('Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko', '52e8b50655dc1fce.NKrjdYLP_t46xcHhW_A6DS-CtAwimFKVml-WdHsToqNiseWXi728A3g-9qshJRftgOSsSpJFO1F-y7vNhT7ilod1drt-xWTPA0cvbVMCacnLS4UAZxPpMVxaVS5oxI0I', 'yandexuid=942668921393581303; fuid01=52e8b50655dc1fce.NKrjdYLP_t46xcHhW_A6DS-CtAwimFKVml-WdHsToqNiseWXi728A3g-9qshJRftgOSsSpJFO1F-y7vNhT7ilod1drt-xWTPA0cvbVMCacnLS4UAZxPpMVxaVS5oxI0I; Session_id=2:1393581341.0.5.138860237.8:1393581341000:1536207396:51.0.1.1.0.106623.8584.9cd09ee5c5709752f53f4e7673843476; yp=1708941341.udn.aXRiY29tNw%3D%3D; ys=udn.aXRiY29tNw%3D%3D; L=ZAFTBWlbBmpgfWRlUVh/dXtPdWV5Q15eHzxaOkAVUwAtCk0GDiAlVFknAQQHFk8MfT9kJWgEDloiB0pIK0EOKQ==.1393581341.10292.284114.2bb6576ab340374fa707663e720139cd; yandex_login=itbcom7; my=YzYBAQA='),
// itbcom6 (safari) Алексей Червов
array('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2', '52e8b50655dc1fce.NKrjdYLP_t46xcHhW_A6DS-CtAwimFKVml-WdHsToqNiseWXi728A3g-9qshJRftgOSsSpJFO1F-y7vNhT7ilod1drt-xWTPA0cvbVMCacnLS4UAZxPpMVxaVS5oxI0I', 'L=YwEfBW1dBWxtdGFtW114cnROdWV4RFxTHTFDNgYaDhs3FQldVXggDkZ4CwUIU09ReiU7KTJIABc4Vxcdc1AcNQ==.1393581639.10292.268735.9ccda107291bfef02bf1767c20cc33c2; my=YzYBAQA=; yandex_login=itbcom6; yp=1708941639.udn.aXRiY29tNg%3D%3D; ys=udn.aXRiY29tNg%3D%3D; fuid01=52e8b50655dc1fce.NKrjdYLP_t46xcHhW_A6DS-CtAwimFKVml-WdHsToqNiseWXi728A3g-9qshJRftgOSsSpJFO1F-y7vNhT7ilod1drt-xWTPA0cvbVMCacnLS4UAZxPpMVxaVS5oxI0I; yandexuid=1406068591423468388'),
// incognito (Chrome Cannary incognito) Евгений Ляшенко
array('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2292.0 Safari/537.36', // navigator.userAgent
'54d867655b533530.pwxwvvuiGe_nt__vY-oYHJF1JMroIUCvkNvriCNoJxJKOdpG3IFcHYIjKlNn-GTnNAntdcOl7Y65iM-9oiJIcZHM99RfTLeO6y6-FGuluWEH0RRbhNfLO_yRuK1OMysC', // fuid
'fuid01=54d867655b533530.pwxwvvuiGe_nt__vY-oYHJF1JMroIUCvkNvriCNoJxJKOdpG3IFcHYIjKlNn-GTnNAntdcOl7Y65iM-9oiJIcZHM99RfTLeO6y6-FGuluWEH0RRbhNfLO_yRuK1OMysC; ys=wprid.1423468409201284-1346232221082392270805482-10-027; yandexuid=1652017091411610884'),);
$count = count($userAgents);
return $userAgents[$numReg % $count];
}
function getCountPosition($text) {
preg_match('/ (\d+) показ[^\s]* в месяц/si', $text, $intermediateResult);
return intval(@$intermediateResult[1]);
}
function clearHTML($text, $start_tag, $end_tag, $grab = true) {
// $text = $t;
$pos = 1;
if ($start_tag == false AND $end_tag) {
$pos_end = stripos($text, $end_tag, 0);
if ($pos_end !== false) {
if ($grab) {
$pos_end += strlen($end_tag);
}
$text = substr_replace($text, '', 0, $pos_end - $pos);
}
} else {
while ($pos !== false) {
$pos = stripos($text, $start_tag, $pos);
if ($pos !== false) {
if ($end_tag == false) {
$text = substr_replace($text, '', $pos);
} else {
$pos_end = stripos($text, $end_tag, $pos);
if ($pos_end !== false) {
if ($grab) {
$pos_end += strlen($end_tag);
}
$text = substr_replace($text, '', $pos, $pos_end - $pos);
}
}
}
}
}
return $text;
}
/*
function getCountPosition($query){
$URL = "http://wordstat.yandex.ru/?cmd=words&page=1&t=$query";
$response = getContent($URL,false,"ycookie.txt");
//
preg_match('/( )\d+ показов в месяц/si',$response,$intermediateResult);
preg_match('/\d+/',$intermediateResult[0],$countView);
echo $countView[0];
}
*/
function excludeOfResult ($result, $exclude) {
$lengthResult = count($result);
$result = clearSite($result);
$Punycode = new Punycode();
for ($i=0; $i < $lengthResult; $i++) {
$iSite = $Punycode->decode(mb_strtolower($result[$i]));
$iSite = explode('.', $iSite);
$iSite = implode(array_slice($iSite, -2), '.');
if (in_array($iSite, $exclude)) {
unset($result[$i]);
}
}
return $result;
}
function clearSite ($listSite) {
$clearArray = array();
foreach ($listSite as $key => $site) {
$temp = explode('.', $site);
if (array_search('www', $temp)) {
$clearArray[] = implode(array_slice($temp, -2), '.');
} else {
$clearArray[] = implode($temp, '.');
}
}
return $clearArray;
}
function wwwExcludeSite ($excludeSite) {
$wwwExcludeSite = array();
foreach ($excludeSite as $key => $site) {
$wwwExcludeSite[$key] = "www." . $site;
}
return $wwwExcludeSite;
}
function toLowerCaseArray ($array) {
$lowerArray = array();
foreach ($array as $key => $item) {
$lowerArray[] = mb_strtolower($item);
}
return $lowerArray;
}
function shortenDomain ($array) {
$resArray = array();
foreach ($array as $key => $item) {
$item = explode('.', $item);
$resArray[] = implode(array_slice($item, -2), '.');
}
return $resArray;
}
//Определение переменных
$data = (isset($_POST['json'])) ? json_decode($_POST['json']) : array();
$queries = array();
if(!empty($data)) {
$data = current($data->data);
$_GET['action'] = (isset($data->action)) ? $data->action : $_GET['action'];
$_GET['site'] = (isset($data->site)) ? $data->site : $_GET['site'];
$queries_by_cities = $data->data;
file_put_contents('data.txt', json_encode($data), FILE_APPEND);
}
$type = @$_GET['type'];
$query = @$_GET['query'];
$page = (@$_GET['page']) ? @$_GET['page'] : 0; // Страница выдачи
$topage = (@$_GET['topage']) ? @$_GET['topage'] : 100;
$action = strtolower($_GET['action']);
$arr_exception_site = array(
1 => "vk.com",
2 => "facebook.com",
3 => "yandex.ru",
4 => "mail.ru",
5 => "wikipedia.org",
6 => "wikipedia.com",
7 => "youtube.com",
8 => "avito.ru",
9 => "blizko.ru",
10 => "tiu.ru",
11 => "zoon.ru",
12 => "pulscen.ru",
13 => "farpost.ru",
14 => "irr.ru",
15 => "auto.ru",
16 => "drom.ru",
17 => "avtopoisk.ru",
18 => "cto.ru",
19 => "avtotochki.ru",
20 => "spravker.ru",
21 => "2gis.ru",
22 => "autotrw.ru",
23 => "narule.ru",
24 => "antiplagiat.ru",
25 => "text.ru",
26 => "flagma.ru",
27 => "regmarkets.ru",
28 => "urban3p.ru",
29 => "price.ru"
);
$arr_action = array(
"yandexsnippet",
"googleallpos",
"allgooglepos",
"googleposurlall",
"yandexpospage",
"yandexpos",
"yandexposurl",
"parseyandexpos",
"parseyandexposurl",
"googlepos",
"repositiongooglepos",
"googleposurl",
"textnonunic",
"update",
"countpos",
"wordstat",
"getversion",
"getalllimit",
"getlimittoday",
"getremainedlimit",
"deletedomain",
"checkdomain",
"yandexgetall"
);
if ((!$action) || (!in_array($action, $arr_action))) {
echo "action don't exist or isn't correct";
}
$local = (isset($_GET['local'])) ? TRUE : FALSE;
$Punycode = new Punycode();
$site = !empty($_GET['site']) ? $_GET['site'] : NULL;
if (!$local
/*|| $action == 'googlepos'
|| $action == 'googleposurl'
|| $action == 'repositiongooglepos'
|| $action == 'googleallpos'
|| $action == 'checkdomain'
|| $action == 'deletedomain'*/) {
$site = iconv('cp1251', 'utf-8', $site);
}
$site = $Punycode->encode($site);
$site = str_replace("www.", "", $site);
/* for manager.exe bug with domain like 123456.xn--p1ai*/
$sites = array(strtoupper($site));
if (strpos($site, 'XN--') === 0) {
$sites[] = strtoupper(substr($site, 4));
}
$sites[] = 'WWW.' . strtoupper($site);
$query = @$_GET['query'];
/*if ($local) {
$query = iconv('cp1251', 'utf-8',$query);
}*/
$user = @$_GET['user']; // пользователь
$key = @$_GET['key']; // ключ яндекса
$region = (@$_GET['lr']) ? @$_GET['lr'] : ''; // регион
$rstr = (@$_GET['rstr']) ? @$_GET['rstr'] : ''; // регион
$onlyregion = (@$_GET['onlyregion']) ? @$_GET['onlyregion'] : ''; // регион
$count = (@$_GET['count']) ? @$_GET['count'] : 500;
switch ($action) {
case "yandexgetall":
if(!$local) {
$query = iconv('cp1251', 'utf-8', $query);
}
$doc = <<<DOC
<?xml version='1.0' encoding='utf-8'?>
<request>
<query>$query</query>
<page>$page</page>
<groupings><groupby attr="d" mode="deep" groups-on-page="$count" docs-in-group="1" /></groupings>
</request>
DOC;
$context = stream_context_create(array(
'http' => array('method' => "POST", 'header' => "Content-type: application/xml", 'content' => $doc
)));
//exit;
//$region .= '&rstr=-66';
$regiontext = '&lr=' . $region;
if ($onlyregion) $regiontext .= '&rstr=-' . $region;
if ($rstr) $regiontext .= '&rstr=' . $rstr;
$response = @file_get_contents('https://yandex.ru/search/xml?user=' . $user . '&key=' . $key . $regiontext, false, $context);
if (!$response) {
$curl = @curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://yandex.ru/search/xml?user=' . $user . '&key=' . $key . $regiontext);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $doc);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_TIMEOUT, 1000);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
$response = @curl_exec($curl);
$err = @curl_error($curl);
@curl_close($curl);
}
if (!$response) {
echo 0;
die();
}
preg_match_all("/<domain>([^<]+)<\/domain>/m", $response, $result);
preg_match_all("/<url>([^<]+)<\/url>/si", $response, $urls);
preg_match("/<error[^>]*>([^<]+)<\/error>/si", $response, $error);
if (count($error)) {
if($error[1] == 'имит запросов исчерпан') $error[1] = "Лимит запросов исчерпан";
echo $error[1];
die();
}
if (!count($result[1])) {
echo '0' . "\n" . 'result is empty';
die();
}
$json = Array();
// К нижему регистру
$result[1] = toLowerCaseArray($result[1]);
$site = mb_strtolower($site);
//$result[1] = excludeOfResult($result[1], $arr_exception_site);
$wwwsite = 'www.' . $site;
if (in_array($site, $result[1]) || in_array($wwwsite, $result[1])) {
$pSite = array_search($site, $result[1]);
$pWSite = array_search($wwwsite, $result[1]);
if (!is_bool($pSite)) {
$posTop100 = $pSite + 1;
} elseif (!is_bool($pWSite)) {
$posTop100 = $pWSite + 1;
} else {
$posTop100 = "1000";
}
} else {
$posTop100 = "1000";
}
//$url = (int)$posTop100 <= 100 && isset($urls[1][$posTop100 - 1]) ? $urls[1][$posTop100 - 1] : "";
/*$json['site'] = Array(
'position' => $posTop100,
'url' => $url
);*/
//$xml = simplexml_load_string($response);
$xml = $response;
$xml = str_replace("<hlword>", "", $xml);
$xml = str_replace("</hlword>", "", $xml);
$xml = str_replace("<passage>", "", $xml);
$xml = str_replace("</passage>", "", $xml);
$xml = str_replace("</passage>", "", $xml);
$xml = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
$Punycode = new Punycode();
$position = 1;
foreach ($xml->response->results->grouping->group as $key => $item) {
$fragmanets = parse_url($item->doc->url);
$domain = strip_tags($fragmanets['host']);
$domain = preg_replace("/^m\./", "", $domain);
$domain = preg_replace("/^mobile\./", "", $domain);
$domain = preg_replace("/^www\./", "", $domain);
$json['sites'][] = Array(
'domain' => $Punycode->decode(mb_strtolower($domain)),
//'position' => $position++,
'snippet' => Array(
'title' => $item->doc->title->__toString(),
'head' => (!$item->doc->passages) ?
$item->doc->headline->__toString() :
$item->doc->passages->__toString(),
//'url' => utf8_encode(urldecode($item->doc->url->__toString()))
'url' => ($item->doc->url->__toString())
)
);
}
$xml = simplexml_load_string($response);
$index = $keys = $count = 0;
foreach($xml->response->results->grouping->group as $i => $item) {
$fragmanets = parse_url($item->doc->url);
$list = explode('.', $fragmanets['host']);
if(in_array($fragmanets['path'], array('/', '/index.php')) && (count($list) <= 2 || ($list[0] == 'www' && count($list) == 3))) $index++;
$calc = 0;
$words = preg_split ('/\s+/' , $query);
foreach($words as $i => $word) {
if($local) $word = iconv("utf-8", "cp1251", $word);
$words[$i] = mb_strtolower($word, $local ? "cp1251" : "utf-8");
}
$hlwords = array();
foreach($item->doc->title->hlword as $word) {
if($local) $word = iconv("utf-8", "cp1251", $word);
$hlwords[] = mb_strtolower($word, $local ? "cp1251" : "utf-8");
}
foreach($words as $i => $word) {
foreach($hlwords as $i => $hlword) {
if(mb_stripos($hlword, $word, 0, $local ? "cp1251" : "utf-8") === 0) $calc++;
}
}
if($calc >= count($words)) $keys++;
$count++;
if ($count >= 10) break;
}
$json['additional'] = Array(
'PagesMainSearch' => $index,
'PagesKeyTitle' => $keys
);
function json_unescape ($matches) {
return mb_convert_encoding(pack('H*',$matches[1]),'UTF-8','UTF-16');
}
/*$return = preg_replace_callback(
'/\\\\u([0-9a-zA-Z]{4})/',
'json_unescape',
json_encode($json)
);*/
//echo $return; // 256 - JSON_UNESCAPED_UNICODE
echo json_encode($json); // 256 - JSON_UNESCAPED_UNICODE
exit;
break;
case "textnonunic":
$items = 0;
$doc = <<<DOC
<?xml version='1.0' encoding='utf-8'?>
<request>
<query>$query</query>
<sortby>rlv</sortby>
<groupings><groupby attr="d" mode="deep" groups-on-page="11" docs-in-group="0" /></groupings>
</request>
DOC;
$context = stream_context_create(array(
'http' => array('method' => "POST", 'header' => "Content-type: application/xml", 'content' => $doc
)));
$response = @file_get_contents('https://yandex.ru/search/xml?&q=Создание&user=' . $user . '&key=' . $key, false, $context);
preg_match_all("/(?<=<group>)(.*)(?=<\/group>)/siU", $response, $result);
//print_r($result[0]);
$i = 0;
foreach ($result[0] as $site) {
preg_match_all("/(?<=<domain>)(.*)(?=<\/domain>)/siU", $site, $sites_url);
preg_match_all("/(?<=<passages>)(.*)(?=<\/passages>)/siU", $site, $sites_passage);
$sites_url_result[] = $sites_url[0][0];
$length = 0;
$length_of_current_q = 0;
foreach ($sites_passage[0] as $site_hlword) {
preg_match_all("/(?<=<hlword>)(.*)(?=<\/hlword>)/siU", $site_hlword, $hlword);
$site_hlword = str_replace("<hlword>", "", $site_hlword);
$site_hlword = str_replace("</hlword>", "", $site_hlword);
$site_hlword = str_replace("<passage>", "", $site_hlword);
$site_hlword = str_replace("</passage>", "", $site_hlword);
$len_each_word = explode(" ", $site_hlword);
foreach ($len_each_word as $var) {
$var = str_replace(".", "", $var);
$var = str_replace("..", "", $var);
$var = str_replace("...", "", $var);
$var = str_replace(",", "", $var);
$var = str_replace("?", "", $var);
$var = str_replace("!", "", $var);
$var = str_replace(":", "", $var);
$var = str_replace(";", "", $var);
$var = str_replace("\"", "", $var);
$var = str_replace("'", "", $var);
$var_final_result[] = $var;
if (strlen($var) > 4) {
$var = trim($var);
$length_of_current_q = $length_of_current_q + strlen($var);
}
}
$hlword_final_result = null;
foreach ($hlword[0] as $word) {
$word = str_replace(".", "", $word);
$word = str_replace("..", "", $word);
$word = str_replace("...", "", $word);
$word = str_replace(",", "", $word);
$word = str_replace("?", "", $word);
$word = str_replace("!", "", $word);
$word = str_replace(":", "", $word);
$word = str_replace(";", "", $word);
$word = str_replace("\"", "", $word);
$word = str_replace("'", "", $word);
if (strlen($word) > 4) {
$word = trim($word);
$length = $length + strlen($word);
$hlword_final_result[] = $word;
}
}
$textnonunic = $length / ($length_of_current_q / 100);
$textnonunic = round($textnonunic);
$latest_array[$sites_url_result[$i]] = $textnonunic;
$i++;
}
}
arsort($latest_array);
foreach ($latest_array as $key => $var) {
echo $var . " " . $key . "\n";
$items++;
}
break;
case "yandexpospage":
// New Action
if(!$local) {
$query = iconv('cp1251', 'utf-8', $query);
}
$doc = <<<DOC
<?xml version='1.0' encoding='utf-8'?>
<request>
<query>$query</query>
<page>$page</page>
<groupings><groupby attr="d" mode="deep" groups-on-page="$count" docs-in-group="1" /></groupings>
</request>
DOC;
$context = stream_context_create(array(
'http' => array('method' => "POST", 'header' => "Content-type: application/xml", 'content' => $doc
)));
//exit;
//$region .= '&rstr=-66';
$regiontext = '&lr=' . $region;
if ($onlyregion) $regiontext .= '&rstr=-' . $region;
if ($rstr) $regiontext .= '&rstr=' . $rstr;
$response = @file_get_contents('https://yandex.ru/search/xml?user=' . $user . '&key=' . $key . $regiontext, false, $context);
if (!$response) {
$curl = @curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://yandex.ru/search/xml?user=' . $user . '&key=' . $key . $regiontext);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $doc);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_TIMEOUT, 1000);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
$response = @curl_exec($curl);
$err = @curl_error($curl);
@curl_close($curl);
}
if (!$response) {
echo 0;
die();
}
preg_match_all("/<domain>([^<]+)<\/domain>/m", $response, $result);
preg_match_all("/<url>([^<]+)<\/url>/si", $response, $urls);
preg_match("/<error[^>]*>([^<]+)<\/error>/si", $response, $error);
if (count($error)) {
if($error[1] == 'имит запросов исчерпан') $error[1] = "Лимит запросов исчерпан";
echo $error[1];
die();
}
if (!count($result[1])) {
echo '0' . "\n" . 'result is empty';
die();
}
// К нижему регистру
$result[1] = toLowerCaseArray($result[1]);
$site = mb_strtolower($site);
$result[1] = excludeOfResult($result[1], $arr_exception_site);
//@ob_clean();
$wwwsite = 'www.' . $site;
// var_dump($result[1]);
if (in_array($site, $result[1]) || in_array($wwwsite, $result[1])) {
$pSite = array_search($site, $result[1]);
$pWSite = array_search($wwwsite, $result[1]);
if (!is_bool($pSite)) {
$posTop100 = $pSite + 1;
} elseif (!is_bool($pWSite)) {
$posTop100 = $pWSite + 1;
} else {
$posTop100 = "1000";
}
} else {
$posTop100 = "1000";
}
$resTop10 = array_slice($result[1], 0, 10);
$resTop10 = shortenDomain($resTop10);
$url = (int)$posTop100 <= 100 && isset($urls[1][$posTop100 - 1]) ? "|" . $urls[1][$posTop100 - 1] : "";
echo $posTop100 . $url . "\r\n";
foreach ($resTop10 as $key => $value) {
$value = str_replace("www.", "", strip_tags($value));
echo $Punycode->decode($value) . "\r\n";
}
$xml = simplexml_load_string($response);
$index = $keys = $count = 0;
foreach($xml->response->results->grouping->group as $i => $item) {
$fragmanets = parse_url($item->doc->url);
$list = explode('.', $fragmanets['host']);
if(in_array($fragmanets['path'], array('/', '/index.php')) && (count($list) <= 2 || ($list[0] == 'www' && count($list) == 3))) $index++;
$calc = 0;
$words = preg_split ('/\s+/' , $query);
foreach($words as $i => $word) {
if($local) $word = iconv("utf-8", "cp1251", $word);
$words[$i] = mb_strtolower($word, $local ? "cp1251" : "utf-8");
}
$hlwords = array();
foreach($item->doc->title->hlword as $word) {
if($local) $word = iconv("utf-8", "cp1251", $word);
$hlwords[] = mb_strtolower($word, $local ? "cp1251" : "utf-8");
}
foreach($words as $i => $word) {
foreach($hlwords as $i => $hlword) {
if(mb_stripos($hlword, $word, 0, $local ? "cp1251" : "utf-8") === 0) $calc++;
}
}
if($calc >= count($words)) $keys++;
$count++;
if ($count >= 10) break;
}
echo $index . "\r\n";
echo $keys . "\r\n";
break;
// End
case "getalllimit":
$context = stream_context_create(array(
'http' => array('method' => "GET", 'header' => "Content-type: application/xml" )));
$response = @file_get_contents('https://yandex.ru/search/xml?action=limits-info&user=' . $user . '&key=' . $key , false, $context);
echo $response;
break;
case "yandexpos":
case "yandexposurl":
if(!$local)
$query = iconv('cp1251', 'utf-8', $query);
$doc = <<<DOC
<?xml version='1.0' encoding='utf-8'?>
<request>
<query>$query</query>
<page>$page</page>
<groupings><groupby attr="d" mode="deep" groups-on-page="$count" docs-in-group="1" /></groupings>
</request>
DOC;
$context = stream_context_create(array(
'http' => array('method' => "POST", 'header' => "Content-type: application/xml", 'content' => $doc
)));
//exit;
//$region .= '&rstr=-66';
$regiontext = '&lr=' . $region;
if ($onlyregion) $regiontext .= '&rstr=-' . $region;
if ($rstr) $regiontext .= '&rstr=' . $rstr;
$response = @file_get_contents('https://yandex.ru/search/xml?user=' . $user . '&key=' . $key . $regiontext, false, $context);
if (!$response) {
$curl = @curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://yandex.ru/search/xml?user=' . $user . '&key=' . $key . $regiontext);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $doc);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_TIMEOUT, 1000);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
$response = @curl_exec($curl);
$err = @curl_error($curl);
@curl_close($curl);
}
if (!$response) {
echo 0;
die();
}
//echo $response;
preg_match_all("/<domain>([^<]+)<\/domain>/m", $response, $result);
preg_match_all("/<url>([^<]+)<\/url>/si", $response, $urls);
preg_match("/<error[^>]*>([^<]+)<\/error>/si", $response, $error);
if (count($error)) {
if($error[1] == 'имит запросов исчерпан') $error[1] = "Лимит запросов исчерпан";
echo $error[1];
die();
}
if (!count($result[1])) {
echo '0' . "\n" . 'result is empty';
die();
}
if(isset($_GET['d'])) {
$_site = !empty($_GET['site']) ? $_GET['site'] : NULL;
$_tsite = $Punycode->encode($_site);
echo '<pre>';
var_dump($query);
var_dump($_site);
var_dump($_tsite);
var_dump($sites);
var_dump($result);
echo '</pre>';
}
@ob_clean();
foreach ($result[1] as $key => $value) {
$value = strip_tags($value);
if (($site) && (in_array(strtoupper($value), $sites))) {
echo $key + 1, "\r\n";
if ($action == 'yandexposurl') {
echo "\n" . @$urls[1][$key];
}
exit;
}
}
die('1000');
//var_dump($response->response->results->grouping->group); die;
if ($response->response->error) {
die('error ' . $response->response->error . '');
}
$i = 1;
foreach ($response->response->results->grouping->group As $item) {
$domain = $item->doc->domain;
if ((strtolower($site) == strtolower($domain)) or (strtolower('www.' . $site) == strtolower($domain))) {
echo $i;
die;
}
$i++;
}
die('0');
case "yandexsnippet":
$query = iconv('cp1251', 'utf-8', $query);
$doc = <<<DOC
<?xml version='1.0' encoding='utf-8'?>
<request>
<query>$query</query>
<page>$page</page>
<groupings><groupby attr="d" mode="deep" groups-on-page="$count" docs-in-group="1" /></groupings>
</request>
DOC;
$context = stream_context_create(array(
'http' => array('method' => "POST", 'header' => "Content-type: application/xml", 'content' => $doc
)));
//exit;
//$region .= '&rstr=-66';
$regiontext = '&lr=' . $region;
if ($onlyregion) $regiontext .= '&rstr=-' . $region;
if ($rstr) $regiontext .= '&rstr=' . $rstr;
$response = @file_get_contents('https://yandex.ru/search/xml?user=' . $user . '&key=' . $key . $regiontext, false, $context);
if (!$response) {
$curl = @curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://yandex.ru/search/xml?user=' . $user . '&key=' . $key . $regiontext);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $doc);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_TIMEOUT, 1000);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
$response = @curl_exec($curl);
$err = @curl_error($curl);
@curl_close($curl);
}
if (!$response) {
echo 0;
die();
}
preg_match_all("/<domain>([^<]+)<\/domain>/m", $response, $result);
preg_match_all("/<url>([^<]+)<\/url>/si", $response, $urls);
preg_match("/<error[^>]*>([^<]+)<\/error>/si", $response, $error);
if (count($error)) {
if($error[1] == 'имит запросов исчерпан') $error[1] = "Лимит запросов исчерпан";
echo $error[1];
die();
}
if (!count($result[1])) {
echo '0' . "\n" . 'result is empty';
die();
}
@ob_clean();
foreach ($result[1] as $key => $value) {
//print_r($value);
$value = strip_tags($value);
//print_r($value);
if (($site) && (in_array(strtoupper($value), $sites))) {
echo $key + 1, "\r\n";
echo "---\r\n";
preg_match_all("/(?<=<hlword>)(.*)(?=<\/hlword>)/siU", $response, $hlword);
$response = str_replace("<hlword>", "", $response);
$response = str_replace("</hlword>", "", $response);
$response = str_replace("<passage>", "", $response);
$response = str_replace("</passage>", "", $response);
$response = str_replace("</passage>", "", $response);
//print_r($response);
$response = simplexml_load_string($response, 'SimpleXMLElement', LIBXML_NOCDATA);
$a = str_replace("www.", "", $response->response->results->grouping->group[$key]->doc->domain);
$array = json_decode(json_encode($response), TRUE);
$b = $array[response][results][grouping][group][$key][doc][snippets][adresa];
echo "<pre>";
//print_r($r);
echo "</pre>";
//вывод
echo $response->response->results->grouping->group[$key]->doc->title, "\r\n";
echo "---\r\n";
echo "</br>";
if (!$response->response->results->grouping->group[$key]->doc->passages) {
echo $response->response->results->grouping->group[$key]->doc->headline, "\r\n";
} else {
echo $response->response->results->grouping->group[$key]->doc->passages, "\r\n";
}
echo "---\r\n";
if ($response->response->results->grouping->group[$key]->doc->snippets->adresa->item) {
$r = $response->response->results->grouping->group[$key]->doc->snippets->adresa->item->attributes();
echo "</br>";
echo '' . $r[time] . ' ' . $r[phone] . '', "\r\n";
echo $r[address];
echo "\r\n";
}
echo "---\r\n";
if ($action == 'yandexsnippet') {
if (substr($urls[1][$key], -1) == '/') {
$urls[1][$key] = substr($urls[1][$key], 0, -1);
echo @$urls[1][$key];
} else {
echo @$urls[1][$key];
}
}
//конец вывода
exit;
}
}
die('1000');
//var_dump($response->response->results->grouping->group); die;
if ($response->response->error) {
die('error ' . $response->response->error . '');
}
$i = 1;
foreach ($response->response->results->grouping->group As $item) {
$domain = $item->doc->domain;
if ((strtolower($site) == strtolower($domain)) or (strtolower('www.' . $site) == strtolower($domain))) {
echo $i;
die;
}
$i++;
}
die('0');
case "wordstat":
/*
* Ильин Олег
* 27.08.2013
* запрос к яндексу на WordStat
*/
$_uAgent = getUserAgent();
$agent = $_uAgent[0];
$fuid01 = $_uAgent[1];
$cookie = $_uAgent[2];
$word = isset($_GET['words']) ? $_GET['words'] : "";
$fields_string = array();
$fields_string[] = "words=" . $word;
$fields_string[] = "page_type=words";
$fields_string[] = "map=world";
$fields_string[] = "type=list";
$fields_string[] = "page=1";
if (isset($_GET['unban_wordstat'])) {
$fields_string[] = "captcha_value=" . $_GET['captcha_value'];
$fields_string[] = "captcha_key=" . $_GET['captcha_key'];
}
$paramIsOk = true;
switch ($type) {
case 'left':
case 'right':
$url = 'http://wordstat.yandex.ru/stat/words/';
break;
case 'count':
$url = 'http://wordstat.yandex.ru/stat/regions/';
break;
default:
$paramIsOk = false;
break;
}
if (!paramIsOk) {
echo "error param";
exit();
}
/*
https://passport.yandex.ru/passport?mode=auth&
https://passport.yandex.ru/passport?mode=auth&msg=&retpath=http://wordstat.yandex.ru/
retpath:http://wordstat.yandex.ru/
*/
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, implode('&', $fields_string));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_REFERER, "http://wordstat.yandex.ru/");
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
$result = curl_exec($ch);
curl_close($ch);
$yResponse = json_decode($result);
if ($yResponse) {
if ($yResponse->captcha) {
if (isset($_GET['people']) && $_GET['people'] == 1) {
header("Content-Type:text/html; charset=utf-8");
?>
<form>
<img src='<?php echo $yResponse->captcha->url; ?>'/>
<br>
<input name='captcha_value'>
<input type='hidden' value='<?php echo $word; ?>' name='words'>
<input type='hidden' value='<?php echo isset($_GET['nr']) ? $_GET['nr'] : 1; ?>' name='nr'>
<input type='hidden' value='<?php echo $type; ?>' name='type'>
<input type='hidden' value='wordstat' name='action'>
<input type='hidden' value='<?php echo $yResponse->captcha->key; ?>' name='captcha_key'>
<input type='submit' value='unlock' name='unban_wordstat'>
</form>
<?php
} else {
echo "error capcha";
echo $result;
}
} elseif ($yResponse->blocked) echo "error block";
else if ($yResponse->data && $yResponse->key) {
echo $agent . "\n";
echo $fuid01 . "\n";
echo $yResponse->key . "\n";
echo base64_encode($yResponse->data);
} else
echo "error not data";
} else {
echo "error not decode";
}
exit();
break; //--- /WordStat ---//
case "deletedomain":
$api_key = '32a3dbe79f1edbcdb9c5';
$parser = new GoogleTopVisorParser($api_key);
$filters = new stdClass();
$s = $_GET['site'];
$s = $Punycode->decode($s);
$filters->domain = $s;
$response = $parser->deleteDomain($filters);
if($response && !empty($response)) {
echo $response->result;
} else {
echo 0;
}
break;
case "countpos":
$api_key = '32a3dbe79f1edbcdb9c5';
$parser = new GoogleTopVisorParser($api_key);
$filters = new stdClass();
$s = $_GET['site'];
$s = $Punycode->decode($s);
$filters->domain = $s;
$filters->city = (isset($_GET['city'])) ? $_GET['city'] : '';
if(empty($filters->city) && isset($_GET['g_city'])) {
$filters->city = $_GET['g_city'];
}
$response = $parser->getCountPos($filters);
break;
case "checkdomain":
$api_key = '32a3dbe79f1edbcdb9c5';
$parser = new GoogleTopVisorParser($api_key);
$filters = new stdClass();
$s = $_GET['site'];
$s = $Punycode->decode($s);
$filters->domain = $s;
$response = $parser->checkDomain($filters);
if($response && !empty($response) && isset($response[0])) {
echo $response[0]->percent;
} else {
echo '-1';
}
break;
case "repositiongooglepos":
$api_key = '32a3dbe79f1edbcdb9c5';
$parser = new GoogleTopVisorParser($api_key);
$filters = new stdClass();
$s = $_GET['site'];
$s = $Punycode->decode($s);
$filters->domain = $s;
$response = $parser->startReposition($filters);
if($response->result && $response->error === false) {
echo 'Position update started';
} else if($response->error !== false) {
echo $response->message;
}
break;
case "googleposurlall":
case "allgooglepos":
case "googleallpos":
$api_key = '32a3dbe79f1edbcdb9c5';
$parser = new GoogleTopVisorParser($api_key);
$filters = new stdClass();
$site = $_GET['site'];
$site = $Punycode->decode($site);
$filters->domain = $site; //$site;
$filters->phrases = $queries_by_cities;
$tmp = $parser->googleAllPos($filters);
$data = array();
foreach($tmp as $key => $item) {
$info = $item->dates[count($item->dates) - 1];
$data[] = array(
'Id' => $key,
'Position' => (($info->position == ' ' || !$info->position) && $info->position != '0') ? '-1' : (($info->position == '0') ? '1000' : $info->position),
'URL' => ($info->page) ? $info->page : ''
);
}
$result = array(
'data' => $data
);
header('Content-Type: application/json');
echo json_encode($result);
exit();
case "googlepos":
case "googleposurl":
$api_key = '32a3dbe79f1edbcdb9c5';
$parser = new GoogleTopVisorParser($api_key);
$filters = new stdClass();
$s = $_GET['site'];
$s = $Punycode->decode($s);
$filters->domain = $s; //$site;
$filters->phrase = $query;
$filters->city = (isset($_GET['city'])) ? $_GET['city'] : '';
if(empty($filters->city) && isset($_GET['g_city'])) {
$filters->city = $_GET['g_city'];
}
$response = $parser->googlePos($filters);
if(isset($response->dates)) {
$tmp = $response->dates[count($response->dates) - 1];
if($tmp->position == ' ') {
echo '-1';
} elseif($tmp->position == '0') {
echo '1000' . "\r\n";
} else {
echo $tmp->position . "\r";
if($action == 'googleposurl') {
echo "---\r\n";
echo "---\r\n";
echo "---\r\n";
echo "---\r\n";
echo "---\r\n";
echo $tmp->page;
}
}
} else {
echo '-1';
}
/*$parse = new GoogleParse($action, $site, $sites, $query, $topage);
$parse->run();*/
exit;
case "update":
//$URI = "http://kiks.yandex.ru/su/";
$dirname = dirname($_SERVER['SCRIPT_FILENAME']) . '/';
$filename = trim($_SERVER['SCRIPT_NAME'], '/');
if (move_uploaded_file($_FILES['File']['tmp_name'], $dirname . $filename)) {
echo "File success uploaded";
} else {
echo "Error File failes uploaded!";
}
exit;
case "getversion":
//$time = filemtime("ysearch.php");
//echo date("j-n-Y",$time);
$filename = trim($_SERVER['SCRIPT_NAME'], '/');
echo md5(file_get_contents($filename));
break;
}
/*
?>
<?php
$action = $login = $_GET['action'];
$login = $_GET['user'];
$passwd = $_GET['passwd'];
$url = "https://passport.yandex.ru/passport?mode=auth";
// $url = "https://passport.yandex.ru/passport?mode=auth";
//$url = "http://xml.yandex.ru";
$doc = "login=$user&passwd=$passwd&from=password&retpath=http://xml.yandex.ru/stat.xml&idkey=07T13395784623V990G5eu&display=page×tamp=" . time() . '0000';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Expect:'));
$dir = dirname(__FILE__);
if (!file_exists("yxml.txt")) {
$COOKIEJAR = <<<DOC
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.
.yandex.ru TRUE / FALSE 0 yandex_login itbcom4
#HttpOnly_.yandex.ru TRUE / TRUE 2147483647 sessionid2 2:1374832713.12373494376999.5.138859587.8:1374832713001:1536207396:7.1.1.1.-1.96260.231.4b9714fd4e702c4c5c543925accbeed3
.yandex.ru TRUE / FALSE 2147483647 my YzYBAAA=
.yandex.ru TRUE / FALSE 2147483647 yandexuid 984302381374832712
.yandex.ru TRUE / FALSE 0 ys udn.aXRiY29tNA%3D%3D
.yandex.ru TRUE / FALSE 2147483647 yp 1690192713.udn.aXRiY29tNA%3D%3D
#HttpOnly_.yandex.ru TRUE / FALSE 0 Session_id 2:1374832713.12373494376999.0.138859587.8:1374832713001:1536207396:7.0.1.1.-1.96260.7632.98adc147f50130ebc82f8fa404b435bb
.yandex.ru TRUE / FALSE 2147483647 L Z05CcUZDRX1+ZmZiZV5sWnZ/CFJ9Yl4BARoaCBsJW3kEEDFBGWoACS0dVRE7KAQoGxxCN2F8VwAaFx4hZzkOSQ==.1374832712.9858.297177.30b954c2eb5b5d8aa6e2ccc3d2970ce7
DOC;
file_put_contents($dir . "/yxml.txt", $COOKIEJAR);
}
curl_setopt($curl, CURLOPT_COOKIEJAR, $dir . "/yxml.txt");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $doc);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
// var_dump($response);
//$url = "http://xml.yandex.ru/stat.xml";
$url = "https://yandex.ru/search/xml";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 2);
curl_setopt($curl, CURLOPT_COOKIEFILE, $dir . "/yxml.txt");
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
$response = curl_exec($curl);
preg_match_all("/(?<=<b class=\"text\">)(\d{1,3})(?=<\/b>)/siU", $response, $count);
//var_dump($response);
$err = curl_error($curl);
$remains = $count[0][0] - $count[0][1];
if ($action == "GetAllLimit") {
echo "\n";
echo "total = " . $count[0][0];
echo "\n";
echo "used = " . $count[0][1];
}*/