Всем привет! С помощью php+curl вытягиваю данные с страницы вот в таком формате:
<script language="JavaScript" type="text/JavaScript">
<!--
EunMYhUOY='<a ';fGIxF='href="';LlrkCq='tel: ';bieDrewu='8987';OHHrbfeq='999';FUsQSB='8877';ofdbPB='">8&nbs';fcxUjv='p;(987)';bYXDSyb='&nbs';yHgZyNgu='p;99';imXjVXm='9-8';PdKuSwHIWO='877&';svlWzWXZ='nbsp;';mvouOLx='</a>';IycCH='';aNtZrzOzLw='';xHKimRw='';pybFxAd='';zcdAvjesEE='';nBOjCvNq='';fPndbK='';document.write(EunMYhUOY+fGIxF+LlrkCq+bieDrewu+OHHrbfeq+FUsQSB+ofdbPB+fcxUjv+bYXDSyb+yHgZyNgu+imXjVXm+PdKuSwHIWO+svlWzWXZ+mvouOLx+IycCH+aNtZrzOzLw+xHKimRw+pybFxAd+zcdAvjesEE+nBOjCvNq+fPndbK+'');
//-->
</script>
и
<script language="JavaScript" type="text/JavaScript">
<!--
emawuxLPX='E-m';gYqwwul='ail';biBZUa=': <a h';utOoqSHpF='ref="';lIYiyIh='mail';sVnbDDs='to:ab';HVNoNW='cda';YMEFZZAVin='bcd23';jChNMgcpd='@ma';PIsUHYRsZu='il.ru';lpjxYdp='">abcd';prxKLljT='abcd23';JZycfkL='@ma';YiiTWMgpM='il.ru</';BSduR='a>';buxjHyo='';sDGGMiVAL='';cDBsbSmD='';SOnGJM='';gGQlCdPwvL='';fSsxbVDW='';MMxbhof='';gWCsHhfx='';BQiSoZ='';document.write(emawuxLPX+gYqwwul+biBZUa+utOoqSHpF+lIYiyIh+sVnbDDs+HVNoNW+YMEFZZAVin+jChNMgcpd+PIsUHYRsZu+lpjxYdp+prxKLljT+JZycfkL+YiiTWMgpM+BSduR+buxjHyo+sDGGMiVAL+cDBsbSmD+SOnGJM+gGQlCdPwvL+fSsxbVDW+MMxbhof+gWCsHhfx+BQiSoZ+'');
//-->
</script>
Каждый раз переменные js меняются и значения внутри меняют свою длинну, как мне используя регулярку выцепить в первом случае: 89879998877 и во втором случае: abcdabcd@mail.ru
Ломаю голову но никак не соображу решение :( Буду признателен за помощь
Логика простая, рандомные переменные содержат части html страницы. document.write выводит значения переменных в определенном порядке, что в итоге получаются корректные данные. Мой пример разбора такого js скрипта:
<?php
$js1 = <<< EOT
<script language="JavaScript" type="text/JavaScript">
<!--
EunMYhUOY='<a ';fGIxF='href="';LlrkCq='tel: ';bieDrewu='8987';OHHrbfeq='999';FUsQSB='8877';ofdbPB='">8&nbs';fcxUjv='p;(987)';bYXDSyb='&nbs';yHgZyNgu='p;99';imXjVXm='9-8';PdKuSwHIWO='877&';svlWzWXZ='nbsp;';mvouOLx='</a>';IycCH='';aNtZrzOzLw='';xHKimRw='';pybFxAd='';zcdAvjesEE='';nBOjCvNq='';fPndbK='';document.write(EunMYhUOY+fGIxF+LlrkCq+bieDrewu+OHHrbfeq+FUsQSB+ofdbPB+fcxUjv+bYXDSyb+yHgZyNgu+imXjVXm+PdKuSwHIWO+svlWzWXZ+mvouOLx+IycCH+aNtZrzOzLw+xHKimRw+pybFxAd+zcdAvjesEE+nBOjCvNq+fPndbK+'');
//-->
</script>
EOT;
$js2 = <<< EOT
<script language="JavaScript" type="text/JavaScript">
<!--
emawuxLPX='E-m';gYqwwul='ail';biBZUa=': <a h';utOoqSHpF='ref="';lIYiyIh='mail';sVnbDDs='to:ab';HVNoNW='cda';YMEFZZAVin='bcd23';jChNMgcpd='@ma';PIsUHYRsZu='il.ru';lpjxYdp='">abcd';prxKLljT='abcd23';JZycfkL='@ma';YiiTWMgpM='il.ru</';BSduR='a>';buxjHyo='';sDGGMiVAL='';cDBsbSmD='';SOnGJM='';gGQlCdPwvL='';fSsxbVDW='';MMxbhof='';gWCsHhfx='';BQiSoZ='';document.write(emawuxLPX+gYqwwul+biBZUa+utOoqSHpF+lIYiyIh+sVnbDDs+HVNoNW+YMEFZZAVin+jChNMgcpd+PIsUHYRsZu+lpjxYdp+prxKLljT+JZycfkL+YiiTWMgpM+BSduR+buxjHyo+sDGGMiVAL+cDBsbSmD+SOnGJM+gGQlCdPwvL+fSsxbVDW+MMxbhof+gWCsHhfx+BQiSoZ+'');
//-->
</script>
EOT;
$js = $js1;
// Регулярные выражения для парсинга js
$patternKeyValue = "#([^;=\n]+)='([^']*)'#";
$patternRes = "#document\.write\((\S+)\)#";
$patternHref = '#href="\S+:([^"]*)"#';
$matches = [];
$keyValue = [];
// Парсим все переменные в js
preg_match_all($patternKeyValue, $js, $matches);
if (count($matches) != 3 && count($matches[1]) != count($matches[2])) {
echo "Can not parse data\n";
exit(1);
}
$arrayCount = count($matches[0]);
for ($i = 0; $i < $arrayCount; $i++) {
$keyValue[$matches[1][$i]] = $matches[2][$i];
}
// Парсим вывод этих переменных на html страницу
preg_match($patternRes, $js, $matches);
if (count($matches) != 2) {
echo "Can not parse data\n";
exit(1);
}
// Складываем значение переменных в строку
$keys = explode("+", $matches[1]);
$result = "";
foreach ($keys as $key) {
if (!isset($keyValue[$key])) {
continue;
}
$result .= $keyValue[$key];
}
// Конечный результат
preg_match($patternHref, $result, $matches);
var_dump($matches);
Или можно воспользоваться библиотекой для php которая сможет выполнить javascript https://www.php.net/manual/en/book.v8js.php
Виртуальный выделенный сервер (VDS) становится отличным выбором
Друзья, интересует вопрос, возможно ли как то прикрутить в админку на php сервис приема писем(такой себе эквивалент почтового ящика)Кто может...
Есть сервис (ака генератор лендингов для примера)Живёт на домене mydomain
В обычном запросе SELECT можно писать любые выражения для выборки, даже не относящиеся к какой-либо колонке какой-либо таблицеНапример я могу...