cache = $cache; } public function sendCode(Chat $chat, $code) { $params = [ 'log' => 'on', 'mes' => '', 'legend' => 'on', 'nostat' => '', 'notext' => '', 'refresh' => '0', 'bonus' => '', 'kladMap' => '', 'notags' => '', 'cod' => $code, 'action' => 'entcod', ]; $data = http_build_query($params); $contextData = [ 'http' => [ 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $data, ], ]; $context = stream_context_create($contextData); if (!$this->getLink($chat)) { throw new \Exception('Не задана ссылка'); } $result = file_get_contents($this->getLink($chat), false, $context); $contextData['result'] = $result; file_put_contents(getenv('OPENSHIFT_DATA_DIR').'log.txt', serialize($contextData)); return $this->parseResult($result); } private function parseResult($html) { $crawler = new Crawler($html); $answer = [ $this->parseCodeEnter($html), $this->parseTask($crawler), ]; $answer = array_merge($answer, $this->parseCodes($crawler)); $answer = array_filter($answer); return implode(PHP_EOL, $answer); } private function parseCodeEnter($html) { $html = iconv('cp1251', 'utf8', $html); $regex = '/\<\!\-\-errorText\-\-\>\
\(.+?)\<\/strong\>\<\/p\>\<\!\-\-errorTextEnd\-\-\>/i';
$result = [];
preg_match($regex, $html, $result);
return $result[1];
}
private function parseTask(Crawler $crawler)
{
return $crawler->filter('body > p')->reduce(function ($node) {
return strpos($node->text(), 'Задание ');
})->text();
}
private function parseCodes(Crawler $crawler)
{
$codesHtml = $crawler->filter('body > .dcodes')->html();
$codesHtml = preg_replace('/\(.+?)\<\/span\>/i', '*[$1]*', $codesHtml);
$codesHtml = preg_replace('/\
/i', PHP_EOL, $codesHtml);
$codesHtml = strip_tags($codesHtml);
$codesHtml = explode(PHP_EOL, $codesHtml);
array_shift($codesHtml);
return $codesHtml;
}
private function getLink(Chat $chat)
{
return $this->cache->fetch("link_{$chat->getId()}");
}
}