Lendo os resultados da Megasena direto do site da caixa
22/11/2016
php loteria megasenaNão sei o motivo, mas a caixa tentou dificultar um pouco o acesso aos resultados da megasena por meios automáticos.
1a parte - download usando o curl
$url = "megasena"; $class = "numbers mega-sena"; $c = curl_init(); $cookie_file = __DIR__.DIRECTORY_SEPARATOR."megasena.txt"; curl_setopt_array($c, array( CURLOPT_URL => "http://www.loterias.caixa.gov.br/wps/portal/loterias/landing/".$url, CURLOPT_REFERER => "http://www.loterias.caixa.gov.br", CURLOPT_USERAGENT => "Spider", CURLOPT_HEADER => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_CONNECTTIMEOUT => 6, CURLOPT_TIMEOUT => 6, CURLOPT_MAXREDIRS => 1, CURLOPT_FOLLOWLOCATION => true, CURLOPT_COOKIESESSION => true, CURLOPT_COOKIEFILE => $cookie_file, CURLOPT_COOKIEJAR => $cookie_file )); try { $content = curl_exec($c); $data = curl_getinfo($c); $data["content"] = $content; unset($content); $data["errno"] = curl_errno($c); $data["errmsg"] = curl_error($c); if ((int)$data["errno"] !== 0 || (int)$data["http_code"] !== 200) { echo "error number: ".$data["errno"]; echo "error message: ".$data["errmsg"]; echo "http status: ".$data["http_code"]; print_r($data); exit; } } catch (HttpException $ex) { print_r($ex); exit; } curl_close($c);
2a parte - identificação no html
$doc = new DOMDocument(); @$doc->loadHTML($data["content"]); unset($data); $tagsSorteio = $doc->getElementById("resultados"); $tagsSorteio = $tagsSorteio->getElementsByTagName("h2"); foreach ($tagsSorteio as $h2){ $esteConcurso = trim(str_replace("Resultado Concurso" ,"",$h2->textContent)); $esteConcurso = substr($esteConcurso, 0, 4); $posicao = strpos( $h2->textContent , "(") + 1; $estaData = substr($h2->textContent, $posicao, 10); $estaData = split("/", $estaData); $estaData = $estaData[2]."-".$estaData[1]."-".$estaData[0]; } $tags = $doc->getElementsByTagName("ul"); $data = null; foreach ($tags as $tag) { if ($tag->getAttribute("class") == $class) { $data = trim($tag->textContent); break; } } $arr = str_split($data, 2); print_r($arr);