/** * Sets answer for current question. * @param $answer */ public function setAnswer($answer) { $matches = array(); $answer = Utils::cleanStyles($answer); preg_match_all('/{\\d+\\:SHORTANSWER\\:\\%\\d+\\%(.*?)\\#\\}+?/', $answer, $matches); if (empty($matches)) { throw new \UnexpectedValueException("No se ha obtenido ningun valor esperado de respuesta"); } array_shift($matches); $this->answer = reset($matches[0]); }
/** * @inheritdoc */ public function setQuestionText($text) { $this->question_text = Utils::cleanStyles($text); }
public function scrapeId($course, $id) { $this->validateConfig($course, $id); $url = $this->getUri($course, $id); $crawler = $this->scrapper->request('GET', $url); $crawler = $crawler->filter('#region-main-wrap'); list($curso, $seccion) = $this->getInfoFromUri($url); if (!$seccion || !$curso) { throw new \Exception('Curso o sección inválida'); } $fullname = "{$curso}section{$seccion}"; $dir = $this->download_dir . "{$curso}/{$fullname}"; if (!is_dir($dir)) { mkdir($dir, 0775, true); } $this->getContent('img', $crawler, $curso, $fullname, $dir); $this->getContent('source', $crawler, $curso, $fullname, $dir); $parent = $crawler->filter('div.btn-audio'); if ($parent->count()) { /** @var DOMElement $node */ foreach ($parent as $node_div) { $sources = $node_div->getElementsByTagName('a'); if (!empty($sources)) { /** @var DOMElement $node */ foreach ($sources as $node) { // Obtenemos el source de la imagen. $url = $node->getAttribute('href'); $text = $node->textContent; // La guardamos $filename = basename($url); $filename = urldecode($filename); $node->setAttribute('onclick', "playAudio('/android_asset/www/src/{$curso}/{$fullname}/{$text}')"); $node->removeAttribute('href'); $node->appendChild($node_div->cloneNode(false)); $node_div->parentNode->insertBefore($node, $node_div->parentNode->childNodes->item(2)); $node_div->parentNode->removeChild($node_div); } } } } $iframe = $crawler->filter('iframe.iframeform'); if ($iframe->count()) { /** @var DOMElement $node */ foreach ($iframe as $node) { // Obtenemos el source de la imagen. $url = $node->getAttribute('src'); $index = strpos($url, '/iframe-ingles/'); $url = substr($url, $index, strlen($url) - 1); // La guardamos $node->setAttribute('src', '..' . $url); } } $quiz = $crawler->filter('li.activity.quiz.modtype_quiz div.activityinstance a'); if ($quiz->count()) { /** @var DOMElement $node */ foreach ($quiz as $node) { // Obtenemos el source de la imagen. $id = $node->getAttribute('href'); $matches = array(); preg_match('/id\\=(\\d+)/', $id, $matches); $id = Utils::getExamIndex($matches[1]); $node->setAttribute('href', "quiz{$id}.html"); } } $backto = $crawler->filter('div.backto a'); if ($backto->count()) { /** @var DOMElement $node */ foreach ($backto as $node) { // Obtenemos el source de la imagen. $node->setAttribute('href', 'mainA1.html'); } } $backto = $crawler->filter('img.smallicon'); if ($backto->count()) { /** @var DOMElement $node */ foreach ($backto as $node) { if (strpos($node->getAttribute('src'), '/up') !== FALSE) { // Obtenemos el source de la imagen. $node->setAttribute('src', '../dist/images/up.svg'); } } } $body = $crawler->html(); $html = strtr($this->template, array(':content' => $body)); file_put_contents("{$this->download_dir}/{$fullname}.html", $html); }
/** * Sets text for answer. * * @param string $texto */ public function setRespuesta($texto) { $this->respuesta = Utils::cleanStyles($texto); }