Create project, create webscraper for Euromilhões page, begin works on REST API
This commit is contained in:
commit
e88a6b2d0a
|
@ -0,0 +1,130 @@
|
|||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
.pnpm-debug.log*
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Snowpack dependency directory (https://snowpack.dev/)
|
||||
web_modules/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional stylelint cache
|
||||
.stylelintcache
|
||||
|
||||
# Microbundle cache
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variable files
|
||||
.env
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.local
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# Next.js build output
|
||||
.next
|
||||
out
|
||||
|
||||
# Nuxt.js build / generate output
|
||||
.nuxt
|
||||
dist
|
||||
|
||||
# Gatsby files
|
||||
.cache/
|
||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||
# public
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# vuepress v2.x temp and cache directory
|
||||
.temp
|
||||
.cache
|
||||
|
||||
# Docusaurus cache and generated files
|
||||
.docusaurus
|
||||
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
|
||||
# TernJS port file
|
||||
.tern-port
|
||||
|
||||
# Stores VSCode versions used for testing VSCode extensions
|
||||
.vscode-test
|
||||
|
||||
# yarn v2
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
|
@ -0,0 +1,3 @@
|
|||
# jogos-santa-casa-api
|
||||
|
||||
Um REST API para consultar as chave dos últimos sorteio dos jogos Santacasa.
|
|
@ -0,0 +1,3 @@
|
|||
# jogos-santa-casa-api
|
||||
|
||||
A REST API to check the keys for the latest draws of Jogos Santacasa.
|
|
@ -0,0 +1,980 @@
|
|||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html lang="pt">
|
||||
|
||||
<head>
|
||||
|
||||
<!-- meta -->
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=7" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<meta name="description" content="Jogos & Jackpots, Euromilh<6C>es, Totoloto, Totobola, Lotaria Cl<43>ssica, Lotaria Popular">
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
|
||||
<title>Jogos Santa Casa - <20>ltimos Resultados - Euromilh<6C>es</title>
|
||||
<link rel="shortcut icon" href="/html/favicon.ico" />
|
||||
<!--CSS-->
|
||||
<link type="text/css" rel="stylesheet" href="/html/css/34/jogosantacasa_34.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/html/css/34/fonts_34.css" />
|
||||
<link type="text/css" rel="stylesheet" href="/html/css/34/colorbox_34.css" />
|
||||
|
||||
<!--[if IE]>
|
||||
<link rel="stylesheet" type="text/css" href="/html/css/34/jogosantacasa-ie7_34.css">
|
||||
<![endif]-->
|
||||
|
||||
<!--SCRIPT-->
|
||||
<script type="text/javascript" src="/html/scripts/25/add-ins/jquery-1.5.2.min_25.js"></script>
|
||||
<script type="text/javascript" src="/html/scripts/25/add-ins/jquery.tools.min_25.js"></script>
|
||||
<script type="text/javascript" src="/html/scripts/25/add-ins/jsc_search_25.js"></script>
|
||||
|
||||
<script type="text/javascript" src="/html/scripts/25/core/jsc_mobile_25.js"></script>
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
var _gaq = _gaq || [];
|
||||
|
||||
_gaq.push(['_setAccount', 'UA-34735701-1']);
|
||||
_gaq.push(['_trackPageview']);
|
||||
|
||||
(function() {
|
||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||
ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js';
|
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
</script>
|
||||
<!--PER PAGE RESOURCES -->
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript" src="/html/scripts/25/add-ins/jquery.tools.min_25.js"></script>
|
||||
<script type="text/javascript" src="/html/scripts/25/add-ins/jquery.jstyling_25.js"></script>
|
||||
<script type="text/javascript" src="/html/scripts/25/add-ins/jquery.jscrollpane.min_25.js"></script>
|
||||
<script type="text/javascript" src="/html/scripts/25/add-ins/jquery.colorbox_25.js"></script>
|
||||
<script type="text/javascript" src="/html/scripts/25/add-ins/jsc_results_board_25.js"></script>
|
||||
|
||||
<script type="text/javascript" src="/html/scripts/25/core/jsc_ui_25.js"></script>
|
||||
<script type="text/javascript" src="/html/scripts/25/core/jsc_main_25.js"></script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
var Breadcrumb = {};
|
||||
Breadcrumb.location = 'Chaves e Resultados/<2F>ltimos Resultados/Euromilh<6C>es';
|
||||
</script>
|
||||
|
||||
<!--20131108 - Start Politica de cookies -->
|
||||
<script type="text/javascript" src="/html/scripts/25/add-ins/jquery.cookie_disclaimer_25.js"></script>
|
||||
<form id="frmPrivacyContent" name="frmPrivacyContent" method="post" action="/web/AjudaComoApostar/">
|
||||
<input type="hidden" name="contentId" id="contentId" value="4523"/>
|
||||
</form>
|
||||
<a id="cookiediv"></a>
|
||||
<script>cookiestatus();</script>
|
||||
<!--20131108 - End Politica de cookies -->
|
||||
|
||||
<div class="header">
|
||||
<h1><a href="/">Jogos Santa Casa</a></h1>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="info" class="logout">
|
||||
<div class="loginWrapper">
|
||||
<h2><strong>Bem-vindo(a) </strong> ao Portal Jogos Santa Casa
|
||||
<span>Se ainda n<>o est<73> registado(a) clique em "<a href="/web/ContaRegistar/">Abrir Conta</a>"</span>
|
||||
|
||||
</h2>
|
||||
</div>
|
||||
<div class="contentMyAccout">
|
||||
|
||||
<script>
|
||||
var timerCookie = getCookie('mycookie');
|
||||
if(timerCookie){
|
||||
document.cookie = 'mycookie=;expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/';
|
||||
}
|
||||
function getCookie(c_name) {
|
||||
if (document.cookie.length > 0) {
|
||||
c_start = document.cookie.indexOf(c_name + "=");
|
||||
if (c_start != -1) {
|
||||
c_start = c_start + c_name.length + 1;
|
||||
c_end = document.cookie.indexOf(";", c_start);
|
||||
if (c_end == -1) {
|
||||
c_end = document.cookie.length;
|
||||
}
|
||||
return unescape(document.cookie.substring(c_start, c_end));
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
</script>
|
||||
|
||||
<a href="/web/JogarApostar/" class="shoppingCart">Carrinho de Apostas: <strong>(00)<span> €0,00</span></strong></a>
|
||||
|
||||
<div class="links">
|
||||
<a href="/web/ContaRegistar/" class="myAccout"><span>ABRIR CONTA</span></a>
|
||||
<a href="/web/login/view" class="login loginPopup redirect-to-self"><span>LOGIN</span></a>
|
||||
<div class="recoverPass">
|
||||
<span class="recoverPass">Recuperar </span><a href="/web/ContaRecupUser/" class="recoverPass"><span>Utilizador</span></a>
|
||||
<span class="recoverPass">ou </span><a href="/web/ContaRecupPassword/" class="recoverPass"><span>Password</span></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
JSC.MAIN.loginPopup(false);
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="menu">
|
||||
<ul class="firstLevel">
|
||||
<li class="firstLevel">
|
||||
<a href="/">IN<EFBFBD>CIO</a>
|
||||
</li>
|
||||
<li class="firstLevel childrens">
|
||||
<a href="/web/Jogar/">JOGAR</a>
|
||||
<ul class="secondLevel">
|
||||
<li class="secondLevel"><a href="/web/Jogar/">Jogos e Jackpots</a></li>
|
||||
<li class="secondLevel"><a href="/web/JogarEuromilhoes/">Euromilh<EFBFBD>es</a></li>
|
||||
<li class="secondLevel"><a href="/web/JogarTotoloto/">Totoloto</a></li>
|
||||
<li class="secondLevel"><a href="/web/JogarLotClass/">Lotaria Cl<43>ssica</a></li>
|
||||
<li class="secondLevel"><a href="/web/JogarLotPop/">Lotaria Popular</a></li>
|
||||
<li class="secondLevel"><a href="/web/JogarRaspadinha/">Raspadinha</a></li>
|
||||
<li class="secondLevel"><a href="/web/JogarTotobola/">Totobola</a></li>
|
||||
|
||||
|
||||
<li class="secondLevel childrens"><a href="/web/JogarRapido/">Jogar R<>pido</a>
|
||||
<ul class="thirdLevel">
|
||||
<li class="thirdLevel"><a href="/web/JogarRapido/euromilhoes">Euromilh<EFBFBD>es</a></li>
|
||||
<li class="thirdLevel"><a href="/web/JogarRapido/totoloto">Totoloto</a></li>
|
||||
<li class="thirdLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="secondLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="firstLevel">
|
||||
<a href="/web/JogarRaspadinha/">RASPADINHA</a>
|
||||
</li>
|
||||
|
||||
<li class="firstLevel childrens">
|
||||
<a href="/web/SCCartazResult/">CHAVES E RESULTADOS</a>
|
||||
<ul class="secondLevel">
|
||||
<li class="secondLevel childrens">
|
||||
<a href="/web/SCCartazResult/euroMilhoes">Euromilh<EFBFBD>es</a>
|
||||
<ul class="thirdLevel">
|
||||
<li class="thirdLevel"><a href="/web/SCCartazResult/"><EFBFBD>ltimos Resultados</a></li>
|
||||
<li class="thirdLevel"><a href="/web/SCCartazResult/cmil"><EFBFBD>ltimos Resultados Chuva de Milion<6F>rios</a></li>
|
||||
<li class="thirdLevel"><a href="/web/SCEstatisticas/">Estat<EFBFBD>sticas</a></li>
|
||||
<li class="thirdLevel"><a href="/web/SCMotorBusca/">Motor de Pesquisa</a></li>
|
||||
<li class="thirdLevel"><a href="/web/SCQuantoGanhou/euromilhoes">Quanto Ganhei?</a></li>
|
||||
<li class="thirdLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="secondLevel childrens">
|
||||
<a href="/web/SCCartazResult/m1lhao">M1lh<EFBFBD>o</a>
|
||||
<ul class="thirdLevel">
|
||||
<li class="thirdLevel"><a href="/web/SCCartazResult/m1lhao"><EFBFBD>ltimos Resultados</a></li>
|
||||
<li class="thirdLevel"><a href="/web/SCQuantoGanhou/m1lhao">Quanto Ganhei?</a></li>
|
||||
<li class="thirdLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="secondLevel childrens">
|
||||
<a href="/web/SCCartazResult/totolotoNew">Totoloto</a>
|
||||
<ul class="thirdLevel">
|
||||
<li class="thirdLevel"><a href="/web/SCCartazResult/totolotoNew"><EFBFBD>ltimos Resultados</a></li>
|
||||
<li class="thirdLevel"><a href="/web/SCEstatisticas/totolotoN">Estat<EFBFBD>sticas</a></li>
|
||||
<li class="thirdLevel"><a href="/web/SCMotorBusca/totolotoN">Motor de Pesquisa</a></li>
|
||||
<li class="thirdLevel"><a href="/web/SCQuantoGanhou/totolotoN">Quanto Ganhei?</a></li>
|
||||
<li class="thirdLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="secondLevel childrens">
|
||||
<a href="/web/SCCartazResult/lotClass">Lotaria Cl<43>ssica</a>
|
||||
<ul class="thirdLevel">
|
||||
<li class="thirdLevel"><a href="/web/SCCartazResult/lotClass"><EFBFBD>ltimos Resultados</a></li>
|
||||
<li class="thirdLevel"><a href="/web/SCMotorBusca/lotariaClassica">Motor de Pesquisa</a></li>
|
||||
|
||||
<li class="thirdLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="secondLevel childrens">
|
||||
<a href="/web/SCCartazResult/lotPop">Lotaria Popular</a>
|
||||
<ul class="thirdLevel">
|
||||
<li class="thirdLevel"><a href="/web/SCCartazResult/lotPop"><EFBFBD>ltimos Resultados</a></li>
|
||||
<li class="thirdLevel"><a href="/web/SCMotorBusca/lotariaPopular">Motor de Pesquisa</a></li>
|
||||
|
||||
<li class="thirdLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="secondLevel childrens">
|
||||
<a href="/web/SCCartazResult/bolaNormal">Totobola</a>
|
||||
<ul class="thirdLevel">
|
||||
<li class="thirdLevel"><a href="/web/SCCartazResult/bolaNormal"><EFBFBD>ltimos Resultados</a></li>
|
||||
<li class="thirdLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="secondLevel childrens">
|
||||
<a href="/web/SCCartazResult/bolaExtra1">Totobola Extra</a>
|
||||
<ul class="thirdLevel">
|
||||
<li class="thirdLevel"><a href="/web/SCCartazResult/bolaExtra1"><EFBFBD>ltimos Resultados</a></li>
|
||||
<li class="thirdLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="secondLevel childrens">
|
||||
<a href="/web/SCListaPremios/">Lista de Pr<50>mios</a>
|
||||
<ul class="thirdLevel">
|
||||
<li class="thirdLevel"><a href="/web/SCListaPremios/featuredPrizes">Destaque</a></li>
|
||||
<li class="thirdLevel"><a href="/web/SCListaPremios/prizeHistory">Hist<EFBFBD>rico de Pr<50>mios</a></li>
|
||||
<li class="thirdLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="secondLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="firstLevel childrens helpers">
|
||||
<a id="help_1_0_0_10">COMO JOGAR</a>
|
||||
<ul class="secondLevel">
|
||||
<li class="secondLevel"><a id="help_1_0_0_10">Como abrir a minha conta?</a></li>
|
||||
<li class="secondLevel"><a id="help_1_1_0_9">Como carrego o cart<72>o de jogador?</a></li>
|
||||
|
||||
<li class="secondLevel childrens">
|
||||
<a id="help_1_2_0_20">Como aposto?</a>
|
||||
<ul class="thirdLevel">
|
||||
<li class="thirdLevel"><a id="help_1_2_0_20">Euromilh<EFBFBD>es</a></li>
|
||||
<li class="thirdLevel"><a id="help_1_2_0_7722">M1lh<EFBFBD>o</a></li>
|
||||
<li class="thirdLevel"><a id="help_1_2_0_21">Totoloto</a></li>
|
||||
<li class="thirdLevel"><a id="help_1_2_0_23">Lotarias</a></li>
|
||||
<li class="thirdLevel"><a id="help_1_2_0_2730">Raspadinha</a></li>
|
||||
<li class="thirdLevel"><a id="help_1_2_0_22">Totobola</a></li>
|
||||
|
||||
<li class="thirdLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
|
||||
<li class="secondLevel childrens">
|
||||
<a id="help_1_3_0_13">Apostas</a>
|
||||
<ul class="thirdLevel">
|
||||
|
||||
<li class="thirdLevel"><a id="help_1_3_0_13">Como pago?</a></li>
|
||||
<li class="thirdLevel"><a id="help_1_3_0_14">Como recebo os pr<70>mios?</a></li>
|
||||
|
||||
|
||||
<li class="thirdLevel"><a id="help_1_3_0_15">Como cancelo?</a></li>
|
||||
<li class="thirdLevel"><a id="help_1_3_0_16">O que s<>o as Apostas Pendentes?</a></li>
|
||||
<li class="thirdLevel"><a id="help_1_3_0_8">O que <20> o Registo Autom<6F>tico Apostas?</a></li>
|
||||
|
||||
<li class="thirdLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="secondLevel childrens">
|
||||
<a id="help_1_4_0_17">Outras Funcionalidades</a>
|
||||
<ul class="thirdLevel">
|
||||
<li class="thirdLevel"><a id="help_1_4_0_17">Chave Cega</a></li>
|
||||
<li class="thirdLevel"><a id="help_1_4_0_18">Jogar R<>pido</a></li>
|
||||
<li class="thirdLevel"><a id="help_1_4_0_19">Jogar via SMS</a></li>
|
||||
<li class="thirdLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="secondLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="firstLevel childrens">
|
||||
|
||||
<a class='loginPopup' href="/web/Conta/">A MINHA CONTA</a>
|
||||
|
||||
<ul class="secondLevel">
|
||||
|
||||
<li class="secondLevel childrens">
|
||||
<a class='loginPopup' href="/web/ContaApostas/">As Minhas Apostas</a>
|
||||
<ul class="thirdLevel">
|
||||
<li class="thirdLevel"><a class='loginPopup' href="/web/ContaApostas/">Apostas em Jogo</a></li>
|
||||
<li class="thirdLevel"><a class='loginPopup' href="/web/ContaHistoricoApostas/">Hist<EFBFBD>rico de Apostas</a></li>
|
||||
|
||||
<li class="thirdLevel"><a class='loginPopup' href="/web/RegistoAutomaticoApostas/">Registo Autom<6F>tico de Apostas</a></li>
|
||||
<li class="thirdLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
|
||||
<li class="secondLevel childrens">
|
||||
<a class='loginPopup' href="/web/ChavesFavoritas/">As Minhas Chaves</a>
|
||||
<ul class="thirdLevel">
|
||||
<li class="thirdLevel"><a class='loginPopup' href="/web/ChavesFavoritas/">Chaves Favoritas</a></li>
|
||||
<li class="thirdLevel"><a class='loginPopup' href="/web/NumerosSorteAzar/">N<EFBFBD> da Fortuna e N<> do Azar</a></li>
|
||||
<li class="thirdLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li class="secondLevel childrens">
|
||||
<a class='loginPopup' href="/web/ContaDados/">Os Meus Dados Pessoais</a>
|
||||
<ul class="thirdLevel">
|
||||
<li class="thirdLevel"><a class='loginPopup' href="/web/ContaDados/">O Meu Perfil</a></li>
|
||||
<li class="thirdLevel"><a class='loginPopup' href="/web/ContaUserPassword/">Utilizador e Password</a></li>
|
||||
<li class="thirdLevel"><a class='loginPopup' href="/web/ContaCartoes/">Cart<EFBFBD>o de Jogador</a></li>
|
||||
<li class="thirdLevel"><a class='loginPopup' href="/web/GestaoNotificacoes/">Gest<EFBFBD>o de Notifica<63><61>es</a></li>
|
||||
<li class="thirdLevel"><a class='loginPopup' href="/web/ContaEncerrar/">Encerrar Conta</a></li>
|
||||
<li class="thirdLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="secondLevel"><a class='loginPopup' href="/web/ContaCorrente/">A Minha Conta Corrente</a></li>
|
||||
<li class="secondLevel childrens">
|
||||
<a class='loginPopup' href="/web/ContaPremios/">Receber os Meus Pr<50>mios</a>
|
||||
<ul class="thirdLevel">
|
||||
<li class="thirdLevel"><a class='loginPopup' href="/web/ContaPremios/">Pagamento de Pr<50>mios</a></li>
|
||||
<li class="thirdLevel"><a class='loginPopup' href="/web/ContaConfigResgPr/">Rece<EFBFBD><EFBFBD>o Autom<6F>tica de Pr<50>mios</a></li>
|
||||
<li class="thirdLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="secondLevel">
|
||||
<a class='loginPopup' href="/web/Autoexclusao/">Autoexclus<EFBFBD>o</a>
|
||||
</li>
|
||||
<li class="secondLevelLast"></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="firstLevelLast"></li>
|
||||
</ul>
|
||||
|
||||
<form name="helpTopic" method="post" action="/web/AjudaComoApostar/" style="display: hidden;"></form>
|
||||
<form name="searchFormTop" method="post" action="/web/AjudaProcurar/search">
|
||||
<div class="searchContent">
|
||||
<span>
|
||||
<input type="text" name="searchInput" id="searchInput" maxlength="255" />
|
||||
</span>
|
||||
<input name="hidQuery" id="hidQuery" type="hidden" value=""/>
|
||||
<input name="numPage" id="numPage" type="hidden" value="1"/>
|
||||
<input type="submit" name="Search" id="Search" value="bot<6F>o Pesquisar" />
|
||||
<!--[if IE]>
|
||||
<input type="text" style="display: none;" disabled="disabled" size="1" />
|
||||
<![endif]-->
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
|
||||
|
||||
<div class="clear"></div>
|
||||
<div class="contentMain">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<form name="frmContestSelection" id="frmContestSelection" method="post" action="/web/SCCartazResult/euroMilhoes">
|
||||
|
||||
<div class="mainRegistration breadCrumbLevel3">
|
||||
<div class="breadcrumbs">
|
||||
<ul>
|
||||
<li><a href="/">In<EFBFBD>cio /</a></li>
|
||||
<li><a href="/web/SCCartazResult/">Chaves e Resultados</a> /</li>
|
||||
<li><a href="/web/SCCartazResult/"><EFBFBD>ltimos Resultados</a> /</li>
|
||||
<li>Euromilh<EFBFBD>es</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="contentRecoverPass">
|
||||
<div class="bgTopSection">
|
||||
<div class="bgBottomSection">
|
||||
<div class="bgCenter title">
|
||||
<div class="hgroup">
|
||||
<h2><EFBFBD>ltimos Resultados</h2>
|
||||
<h3>Veja os n<>meros do <20>ltimo sorteio do Euromilh<6C>es.</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bgTopSection">
|
||||
<div class="bgBottomSection">
|
||||
<div class="bgCenter title">
|
||||
<div class="hgroup">
|
||||
<h3 class="consult">Consultar Sorteios</h3>
|
||||
</div>
|
||||
<div class=" selectField2 floatLeft">
|
||||
<select name="selectContest">
|
||||
|
||||
<option selected value="12107.0">044/2022 - sexta-feira</option>
|
||||
|
||||
<option value="12106.0">043/2022 - ter<65>a-feira</option>
|
||||
|
||||
<option value="12105.0">042/2022 - sexta-feira</option>
|
||||
|
||||
<option value="12104.0">041/2022 - ter<65>a-feira</option>
|
||||
|
||||
<option value="12103.0">040/2022 - sexta-feira</option>
|
||||
|
||||
<option value="12102.0">039/2022 - ter<65>a-feira</option>
|
||||
|
||||
<option value="12101.0">038/2022 - sexta-feira</option>
|
||||
|
||||
<option value="12100.0">037/2022 - ter<65>a-feira</option>
|
||||
|
||||
<option value="12099.0">036/2022 - sexta-feira</option>
|
||||
|
||||
<option value="12098.0">035/2022 - ter<65>a-feira</option>
|
||||
|
||||
<option value="12097.0">034/2022 - sexta-feira</option>
|
||||
|
||||
<option value="12096.0">033/2022 - ter<65>a-feira</option>
|
||||
|
||||
<option value="12095.0">032/2022 - sexta-feira</option>
|
||||
|
||||
<option value="12094.0">031/2022 - ter<65>a-feira</option>
|
||||
|
||||
<option value="12093.0">030/2022 - sexta-feira</option>
|
||||
|
||||
<option value="12092.0">029/2022 - ter<65>a-feira</option>
|
||||
|
||||
<option value="12091.0">028/2022 - sexta-feira</option>
|
||||
|
||||
<option value="12090.0">027/2022 - ter<65>a-feira</option>
|
||||
|
||||
<option value="12089.0">026/2022 - sexta-feira</option>
|
||||
|
||||
<option value="11936.0">025/2022 - ter<65>a-feira</option>
|
||||
|
||||
<option value="11935.0">024/2022 - sexta-feira</option>
|
||||
|
||||
<option value="11934.0">023/2022 - ter<65>a-feira</option>
|
||||
|
||||
<option value="11933.0">022/2022 - sexta-feira</option>
|
||||
|
||||
<option value="11932.0">021/2022 - ter<65>a-feira</option>
|
||||
|
||||
<option value="11931.0">020/2022 - sexta-feira</option>
|
||||
|
||||
<option value="11930.0">019/2022 - ter<65>a-feira</option>
|
||||
|
||||
<option value="11929.0">018/2022 - sexta-feira</option>
|
||||
|
||||
<option value="11928.0">017/2022 - ter<65>a-feira</option>
|
||||
|
||||
<option value="11927.0">016/2022 - sexta-feira</option>
|
||||
|
||||
<option value="11926.0">015/2022 - ter<65>a-feira</option>
|
||||
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="formBtn lightGray">
|
||||
<input name="Consultar" value="Consultar" type="button" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bgTopSection">
|
||||
<div class="bgBottomSection">
|
||||
|
||||
<div class="bgCenter sendBtn betnow">
|
||||
<strong class="euromilhoes floatLeft">euro milh<6C>es</strong>
|
||||
<span class="dataInfo">Sorteio: 044/2022 - sexta-feira<br>
|
||||
Data do Sorteio - 03/06/2022</span>
|
||||
<div class="clear"></div>
|
||||
|
||||
<div class="betHeader twocol">
|
||||
<ul>
|
||||
<li>Chave</li>
|
||||
<li class="last">Ordem de sa<73>da</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="betMiddle twocol regPad">
|
||||
<ul class="colums">
|
||||
<li>12 28 29 34 48 + 9 11</li>
|
||||
|
||||
<li>29 12 48 28 34 + 9 11</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="betHeader fourcolRow">
|
||||
<ul>
|
||||
<li>Pr<EFBFBD>mios</li>
|
||||
<li>Acertos</li>
|
||||
<li class="twoRows twoLines">
|
||||
<em>N<EFBFBD>mero de vencedores</em>
|
||||
<span>
|
||||
<small>Portugal</small>
|
||||
<small>Total</small>
|
||||
</span>
|
||||
</li>
|
||||
<li class="last">Valor
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="stripped betMiddle customfiveCol regPad">
|
||||
|
||||
<ul class="colums">
|
||||
<li>1.<2E> Pr<50>mio</li>
|
||||
<li>5 N<>meros + 2 Estrelas</li>
|
||||
<li class="litleCol">0</li>
|
||||
<li class="litleCol">0</li>
|
||||
<li>
|
||||
(1)
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="colums">
|
||||
<li>2.<2E> Pr<50>mio</li>
|
||||
<li>5 N<>meros + 1 Estrela</li>
|
||||
<li class="litleCol">1</li>
|
||||
<li class="litleCol">2</li>
|
||||
<li>
|
||||
€ 347.955,69
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="colums">
|
||||
<li>3.<2E> Pr<50>mio</li>
|
||||
<li>5 N<>meros + 0 Estrelas</li>
|
||||
<li class="litleCol">2</li>
|
||||
<li class="litleCol">3</li>
|
||||
<li>
|
||||
€ 54.215,31
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="colums">
|
||||
<li>4.<2E> Pr<50>mio</li>
|
||||
<li>4 N<>meros + 2 Estrelas</li>
|
||||
<li class="litleCol">4</li>
|
||||
<li class="litleCol">23</li>
|
||||
<li>
|
||||
€ 2.202,61
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="colums">
|
||||
<li>5.<2E> Pr<50>mio</li>
|
||||
<li>4 N<>meros + 1 Estrela</li>
|
||||
<li class="litleCol">49</li>
|
||||
<li class="litleCol">563</li>
|
||||
<li>
|
||||
€ 165,75
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="colums">
|
||||
<li>6.<2E> Pr<50>mio</li>
|
||||
<li>3 N<>meros + 2 Estrelas</li>
|
||||
<li class="litleCol">106</li>
|
||||
<li class="litleCol">1.322</li>
|
||||
<li>
|
||||
€ 74,62
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="colums">
|
||||
<li>7.<2E> Pr<50>mio</li>
|
||||
<li>4 N<>meros + 0 Estrelas</li>
|
||||
<li class="litleCol">109</li>
|
||||
<li class="litleCol">1.452</li>
|
||||
<li>
|
||||
€ 47,74
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="colums">
|
||||
<li>8.<2E> Pr<50>mio</li>
|
||||
<li>2 N<>meros + 2 Estrelas</li>
|
||||
<li class="litleCol">1.676</li>
|
||||
<li class="litleCol">19.667</li>
|
||||
<li>
|
||||
€ 17,62
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="colums">
|
||||
<li>9.<2E> Pr<50>mio</li>
|
||||
<li>3 N<>meros + 1 Estrela</li>
|
||||
<li class="litleCol">2.554</li>
|
||||
<li class="litleCol">30.360</li>
|
||||
<li>
|
||||
€ 12,73
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="colums">
|
||||
<li>10.<2E> Pr<50>mio</li>
|
||||
<li>3 N<>meros + 0 Estrelas</li>
|
||||
<li class="litleCol">6.316</li>
|
||||
<li class="litleCol">71.744</li>
|
||||
<li>
|
||||
€ 10,03
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="colums">
|
||||
<li>11.<2E> Pr<50>mio</li>
|
||||
<li>1 N<>mero + 2 Estrelas</li>
|
||||
<li class="litleCol">10.068</li>
|
||||
<li class="litleCol">106.808</li>
|
||||
<li>
|
||||
€ 8,16
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="colums">
|
||||
<li>12.<2E> Pr<50>mio</li>
|
||||
<li>2 N<>meros + 1 Estrela</li>
|
||||
<li class="litleCol">43.188</li>
|
||||
<li class="litleCol">459.619</li>
|
||||
<li>
|
||||
€ 5,97
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="colums">
|
||||
<li>13.<2E> Pr<50>mio</li>
|
||||
<li>2 N<>meros + 0 Estrelas</li>
|
||||
<li class="litleCol">104.809</li>
|
||||
<li class="litleCol">1.086.312</li>
|
||||
<li>
|
||||
€ 4,07
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="impostoAltosPremiados">
|
||||
Os pr<70>mios atribu<62>dos de valor superior a € 5.000,00 est<73>o sujeitos a imposto do selo, <20> taxa legal de 20%, nos termos da legisla<6C><61>o em vigor.
|
||||
</div>
|
||||
|
||||
|
||||
<div class="betHeader onecol">
|
||||
<ul>
|
||||
<li class="last">Estat<EFBFBD>sticas</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="betMiddle twocol">
|
||||
|
||||
<ul class="noLine">
|
||||
|
||||
<li>
|
||||
|
||||
Receita il<69>quida apostas *
|
||||
</li>
|
||||
|
||||
<li>
|
||||
€ 53.326.543,60
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="noLine">
|
||||
|
||||
<li>
|
||||
|
||||
Montante para pr<70>mios *
|
||||
</li>
|
||||
|
||||
<li>
|
||||
€ 26.663.271,80
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="noLine">
|
||||
|
||||
<li class="stronger">
|
||||
(1)
|
||||
Previs<69>o 1<> Pr<50>mio c / Jackpot
|
||||
</li>
|
||||
|
||||
<li class="stronger">
|
||||
€ 51.000.000,00
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="noLine">
|
||||
|
||||
<li>
|
||||
|
||||
N<> de Bilhetes registados em Portugal
|
||||
</li>
|
||||
|
||||
<li>
|
||||
1.372.443
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="noLine">
|
||||
|
||||
<li>
|
||||
|
||||
N<> de Combina<6E><61>es registadas em Portugal
|
||||
</li>
|
||||
|
||||
<li>
|
||||
2.336.128
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="noLine">
|
||||
|
||||
<li>
|
||||
|
||||
N<> de Apostas registadas em Portugal
|
||||
</li>
|
||||
|
||||
<li>
|
||||
2.475.202
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>*Valor total referente a todos os pa<70>ses participantes no Euromilh<6C>es</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="footer">
|
||||
<div class="top">
|
||||
<ul class="contentTitle">
|
||||
<li class="title"><span>Jogar</span>
|
||||
<div class="borderLeftGray">
|
||||
<ul class="contentLinks">
|
||||
|
||||
<li><a href="/web/JogarEuromilhoes/" title="Euromilh<6C>es">Euromilh<EFBFBD>es</a></li>
|
||||
<li><a href="/web/JogarTotoloto/" title="Totoloto">Totoloto</a></li>
|
||||
<li><a href="/web/JogarLotClass/" title="Lotaria Cl<43>ssica">Lotaria Cl<43>ssica</a></li>
|
||||
<li><a href="/web/JogarLotPop/" title="Lotaria Popular">Lotaria Popular</a></li>
|
||||
<li><a href="/web/JogarRaspadinha/" title="Raspadinha">Raspadinha</a></li>
|
||||
<li><a href="/web/JogarTotobola/" title="Totobola">Totobola</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="title"><span>Chaves e Resultados</span>
|
||||
<div class="borderLeftGray">
|
||||
<ul class="contentLinks">
|
||||
<li><a href="/web/SCCartazResult/" title="<22>ltimos Resultados"><EFBFBD>ltimos Resultados</a></li>
|
||||
<li><a href="/web/SCEstatisticas/" title="Estat<61>sticas">Estat<EFBFBD>sticas</a></li>
|
||||
<li><a href="/web/SCMotorBusca/" title="Motor de Pesquisa">Motor de Pesquisa</a></li>
|
||||
<li><a href="/web/SCQuantoGanhou/euromilhoes" title="Quanto Ganhei?">Quanto Ganhei?</a></li>
|
||||
<li><a href="/web/SCListaPremios/" title="Lista Pr<50>mios">Lista de Pr<50>mios</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="title"><span>Ajuda</span>
|
||||
<div class="borderLeftGray">
|
||||
<ul class="contentLinks">
|
||||
<li>
|
||||
<form id="frmFooterContent_10" name="frmContent_10" method="post" action="/web/AjudaComoApostar/">
|
||||
<input type="hidden" name="contactos" id="contactos" value="1"/>
|
||||
<input type="hidden" name="contentId" id="contentId" value="10.0"/>
|
||||
<a href="javascript:document.forms['frmFooterContent_10'].submit();" title="Como abrir a minha conta?">Como abrir a minha conta?</a>
|
||||
</form>
|
||||
</li>
|
||||
<li>
|
||||
<form id="frmFooterContent_12" name="frmContent_12" method="post" action="/web/AjudaComoApostar/">
|
||||
<input type="hidden" name="contactos" id="contactos" value="1"/>
|
||||
<input type="hidden" name="contentId" id="contentId" value="12.0"/>
|
||||
<a href="javascript:document.forms['frmFooterContent_12'].submit();" title="Como recuperar password?">Como recuperar password?</a>
|
||||
</form>
|
||||
</li>
|
||||
<li>
|
||||
<form id="frmFooterContent_11" name="frmContent_11" method="post" action="/web/AjudaComoApostar/">
|
||||
<input type="hidden" name="contactos" id="contactos" value="1"/>
|
||||
<input type="hidden" name="contentId" id="contentId" value="11.0"/>
|
||||
<a href="javascript:document.forms['frmFooterContent_11'].submit();" title="Como utilizo o carrinho de apostas?">Como utilizo o carrinho de apostas?</a>
|
||||
</form>
|
||||
</li>
|
||||
<li>
|
||||
<form id="frmFooterContent_9" name="frmContent_9" method="post" action="/web/AjudaComoApostar/">
|
||||
<input type="hidden" name="contactos" id="contactos" value="1"/>
|
||||
<input type="hidden" name="contentId" id="contentId" value="9.0"/>
|
||||
<a href="javascript:document.forms['frmFooterContent_9'].submit();" title="Como carrego o cart<72>o de jogador?">Como carrego o cart<72>o de jogador?</a>
|
||||
</form>
|
||||
</li>
|
||||
<li>
|
||||
<form id="frmFooterContent_8" name="frmContent_8" method="post" action="/web/AjudaComoApostar/">
|
||||
<input type="hidden" name="contactos" id="contactos" value="1"/>
|
||||
<input type="hidden" name="contentId" id="contentId" value="8.0"/>
|
||||
<a href="javascript:document.forms['frmFooterContent_8'].submit();" title="O que <20> o Registo Autom<6F>tico de Apostas?">O que <20> o Registo Autom<6F>tico de Apostas?</a>
|
||||
</form>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/web/AjudaFAQ/" title="FAQ's">FAQ's</a>
|
||||
</li>
|
||||
<li>
|
||||
<form id="frmAjudaContactos" name="frmAjudaContactos" method="post" action="/web/AjudaContactos/">
|
||||
<input type="hidden" name="contactos" id="contactos" value="1"/>
|
||||
<a href="javascript:document.forms['frmAjudaContactos'].submit();" title="Contactos">Contactos</a>
|
||||
</form>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="title"><span>Not<EFBFBD>cias e Informa<6D><61>es</span>
|
||||
<div class="borderLeftGray">
|
||||
<ul class="contentLinks">
|
||||
<li>
|
||||
<form id="frmFooterContent_1" name="frmContent_1" method="post" action="/web/AjudaComoApostar/">
|
||||
<input type="hidden" name="contactos" id="contactos" value="1"/>
|
||||
<input type="hidden" name="contentId" id="contentId" value="1"/>
|
||||
<a href="javascript:document.forms['frmFooterContent_1'].submit();" title="Condi<64><69>es do Cart<72>o de Jogador">Condi<EFBFBD><EFBFBD>es do Cart<72>o de Jogador</a>
|
||||
</form>
|
||||
</li>
|
||||
<li><a href="/web/SCInstitucional/" title="Institucional">Institucional</a></li>
|
||||
<li><a href="/web/SCNoticias/" title="Comunicados e Informa<6D><61>es">Comunicados e Informa<6D><61>es</a></li>
|
||||
<li><a href="/web/SCMediador/" title="Pontos de Venda">Pontos de Venda</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="bgLast">
|
||||
<p><EFBFBD>ltimo</p>
|
||||
<span> elemento</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<a href="/web/SCRss/" class="rssButton">Rss</a>
|
||||
</div>
|
||||
|
||||
<div class="bottom">
|
||||
<div class="contentLeft">
|
||||
<a href="http://www.scml.pt" class="logoSantaCasa">Logo Santa Casa</a> <span>Proibido jogar a menores de 18 anos</span>
|
||||
<a target="_blank" href="http://jogoresponsavel.jogossantacasa.pt/" class="logoJogoResponsavel">Logo Jogo Respons<6E>vel</a>
|
||||
</div>
|
||||
<div class="contentRight">
|
||||
<span>
|
||||
<ul>
|
||||
<li>
|
||||
<form id="frmFooterPrivacyContent" name="frmFooterPrivacyContent" method="post" action="/web/AjudaComoApostar/">
|
||||
<input type="hidden" name="contentId" id="contentId" value="4523"/>
|
||||
<a href="javascript:document.forms['frmFooterPrivacyContent'].submit();" title="Pol<6F>tica de Privacidade">Pol<EFBFBD>tica de Privacidade</a>
|
||||
</form>
|
||||
</li>
|
||||
<li>
|
||||
<form id="frmFooterContent_1.0" name="frmContent_1.0" method="post" action="/web/AjudaComoApostar/">
|
||||
<input type="hidden" name="contactos" id="contactos" value="0"/>
|
||||
<input type="hidden" name="contentId" id="contentId" value="1.0"/>
|
||||
<a href="javascript:document.forms['frmFooterContent_1.0'].submit();" title="Termos e Condi<64><69>es do Cart<72>o de Jogador">Termos e Condi<64><69>es do Cart<72>o de Jogador</a>
|
||||
</form>
|
||||
</li>
|
||||
<li>
|
||||
<form id="frmContactos" name="frmContactos" method="post" action="/web/AjudaContactos/">
|
||||
<input type="hidden" name="contactos" id="contactos" value="0"/>
|
||||
<a href="javascript:document.forms['frmContactos'].submit();" title="Contactos">Contactos</a>
|
||||
</form>
|
||||
</li>
|
||||
<li><a href="/web/AjudaMapa/" title="Mapa Site">Mapa Site</a></li>
|
||||
</ul>
|
||||
</span>
|
||||
<span>Os conte<74>dos deste site, publicados a partir de 1 de janeiro de 2012, cumprem as regras do Acordo Ortogr<67>fico.</span>
|
||||
<span>Produzido por SCML © 2012. Todos os direitos reservados.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"name": "jogos-santa-casa-api",
|
||||
"version": "1.0.0",
|
||||
"description": "A REST API to check the keys for the latest draws of Jogos Santacasa.",
|
||||
"main": "dist/server/app.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"start": "nodemon ."
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@types/node": "^17.0.40",
|
||||
"axios": "^0.27.2",
|
||||
"cheerio": "^1.0.0-rc.11",
|
||||
"express": "^4.18.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/express": "^4.17.13",
|
||||
"nodemon": "^2.0.16",
|
||||
"typescript": "^4.7.3"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,111 @@
|
|||
import axios from "axios";
|
||||
import * as cheerio from "cheerio";
|
||||
|
||||
import * as fs from "fs";
|
||||
|
||||
import handlePromise from "../util/promiseHandler";
|
||||
|
||||
const EUROMILHOES_URL =
|
||||
"https://www.jogossantacasa.pt/web/SCCartazResult/euroMilhoes";
|
||||
|
||||
type Key = {
|
||||
numbers: string;
|
||||
stars: string;
|
||||
};
|
||||
|
||||
type Keys = {
|
||||
sortedKey: Key;
|
||||
orderedKey: Key;
|
||||
};
|
||||
|
||||
type Prize = {
|
||||
placement: string;
|
||||
|
||||
requiredNumberGuesses: string;
|
||||
requiredStarGuesses: string;
|
||||
|
||||
winners: {
|
||||
portugal: string;
|
||||
total: string;
|
||||
};
|
||||
};
|
||||
|
||||
type EurmomilhoesData = {
|
||||
keys: Keys;
|
||||
prizes: Prize[];
|
||||
};
|
||||
|
||||
/** */
|
||||
function storeData() {}
|
||||
|
||||
/** */
|
||||
async function scrapeWebpage() {
|
||||
return new Promise(function (resolve, reject) {
|
||||
/* const [resolved, result] = await handlePromise(axios.get(EUROMILHOES_URL));
|
||||
|
||||
if (resolved == false) {
|
||||
console.error(result);
|
||||
|
||||
// Return no results
|
||||
console.error(result);
|
||||
return;
|
||||
}
|
||||
|
||||
fs.writeFileSync("index.html", result.data); */
|
||||
|
||||
const result = fs.readFileSync("index.html");
|
||||
|
||||
const $ = cheerio.load(result);
|
||||
|
||||
const keyLists = $(".betMiddle.twocol.regPad ul li");
|
||||
const key = keyLists.first().text().trim();
|
||||
let splitKey = key.split("+");
|
||||
|
||||
const orderedKey = keyLists.eq(1).text();
|
||||
splitKey = orderedKey.split("+");
|
||||
|
||||
const prizesDiv = $(".stripped.betMiddle.customfiveCol.regPad ul");
|
||||
|
||||
const prizes: Prize[] = [];
|
||||
|
||||
prizesDiv.each(function (i, elem) {
|
||||
const column = $(this).find("li");
|
||||
|
||||
const rightGuessesRow = column.eq(1).text();
|
||||
// TODO: Learn Regex and use it here
|
||||
const rightGuessesSplit = rightGuessesRow.split("+");
|
||||
|
||||
const rightnumbers = rightGuessesSplit[0].split(" ")[0];
|
||||
const rightStars = rightGuessesSplit[1].split(" ")[1];
|
||||
|
||||
const portugalWinners = column.eq(2).text();
|
||||
const totalWinners = column.eq(3).text();
|
||||
|
||||
const prize = {
|
||||
placement: (i + 1).toString(),
|
||||
requiredNumberGuesses: rightnumbers,
|
||||
requiredStarGuesses: rightStars,
|
||||
|
||||
winners: {
|
||||
portugal: portugalWinners,
|
||||
total: totalWinners,
|
||||
},
|
||||
};
|
||||
|
||||
prizes.push(prize);
|
||||
});
|
||||
|
||||
const data: EurmomilhoesData = {
|
||||
keys: {
|
||||
orderedKey: { numbers: "0", stars: "0" },
|
||||
sortedKey: { numbers: "0", stars: "0" },
|
||||
},
|
||||
|
||||
prizes: prizes,
|
||||
};
|
||||
|
||||
resolve(data);
|
||||
});
|
||||
}
|
||||
|
||||
export default scrapeWebpage;
|
|
@ -0,0 +1,27 @@
|
|||
import express from "express";
|
||||
|
||||
import apiRouter from "./routes/apiRouter";
|
||||
|
||||
const app = express();
|
||||
const PORT = 8080;
|
||||
|
||||
// IDEAS:
|
||||
|
||||
// Web scrape the data using a scraper
|
||||
// Store data in DB for ~1h
|
||||
// When a request is made
|
||||
// - Return data from the DB if the data is fresh
|
||||
// - Update DB and return new data
|
||||
//
|
||||
// OR
|
||||
// Automatically fetch new data every 1h?
|
||||
|
||||
app.use("/api", apiRouter);
|
||||
|
||||
app.get("/", (req, res) => {
|
||||
res.send("Hello, world!");
|
||||
});
|
||||
|
||||
app.listen(PORT, () => {
|
||||
console.log(`Server listening on http://localhost:${PORT}`);
|
||||
});
|
|
@ -0,0 +1,18 @@
|
|||
import { Router } from "express";
|
||||
|
||||
import handlePromise from "../../../util/promiseHandler";
|
||||
import scrapeWebpage from "../../../scrapers/euromilhoes";
|
||||
|
||||
const euromilhoesRouter = Router();
|
||||
|
||||
euromilhoesRouter.get("/", async (req, res) => {
|
||||
const [resolved, result] = await handlePromise(scrapeWebpage());
|
||||
|
||||
if (resolved == true) {
|
||||
res.json(result);
|
||||
} else {
|
||||
res.sendStatus(500);
|
||||
}
|
||||
});
|
||||
|
||||
export default euromilhoesRouter;
|
|
@ -0,0 +1,9 @@
|
|||
import { Router } from "express";
|
||||
import euromilhoesRouter from "./api/euromilhoes";
|
||||
|
||||
const apiRouter = Router();
|
||||
|
||||
// TODO: Find a way to dynamilly create routes using files in routes/api
|
||||
apiRouter.use("/euromilhoes", euromilhoesRouter);
|
||||
|
||||
export default apiRouter;
|
|
@ -0,0 +1,16 @@
|
|||
/**
|
||||
* Util function to allow one liners when dealing with promises. Credit to [fireship.io](https://https://youtu.be/ITogH7lJTyE)
|
||||
* @param promise The promise to be resolved
|
||||
* @returns
|
||||
*/
|
||||
async function handlePromise(promise: Promise<any>) {
|
||||
try {
|
||||
const result = await promise;
|
||||
|
||||
return [true, result];
|
||||
} catch (reason) {
|
||||
return [false, reason];
|
||||
}
|
||||
}
|
||||
|
||||
export default handlePromise;
|
|
@ -0,0 +1,101 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
/* Visit https://aka.ms/tsconfig.json to read more about this file */
|
||||
|
||||
/* Projects */
|
||||
// "incremental": true, /* Enable incremental compilation */
|
||||
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
|
||||
// "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */
|
||||
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */
|
||||
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
|
||||
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
|
||||
|
||||
/* Language and Environment */
|
||||
"target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
|
||||
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
||||
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
||||
// "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
|
||||
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
||||
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
|
||||
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
|
||||
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
|
||||
// "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
|
||||
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
|
||||
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
||||
|
||||
/* Modules */
|
||||
"module": "commonjs" /* Specify what module code is generated. */,
|
||||
"rootDir": "./src" /* Specify the root folder within your source files. */,
|
||||
// "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
|
||||
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
||||
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
|
||||
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
||||
// "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
|
||||
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
|
||||
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||
// "resolveJsonModule": true, /* Enable importing .json files */
|
||||
// "noResolve": true, /* Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project. */
|
||||
|
||||
/* JavaScript Support */
|
||||
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
|
||||
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
|
||||
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
|
||||
|
||||
/* Emit */
|
||||
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
|
||||
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
|
||||
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
||||
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
|
||||
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
|
||||
"outDir": "./dist" /* Specify an output folder for all emitted files. */,
|
||||
// "removeComments": true, /* Disable emitting comments. */
|
||||
// "noEmit": true, /* Disable emitting files from a compilation. */
|
||||
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
||||
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */
|
||||
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
|
||||
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
|
||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
|
||||
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
|
||||
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
|
||||
// "newLine": "crlf", /* Set the newline character for emitting files. */
|
||||
// "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
|
||||
// "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */
|
||||
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
|
||||
// "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */
|
||||
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
|
||||
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
|
||||
|
||||
/* Interop Constraints */
|
||||
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
||||
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
||||
"esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */,
|
||||
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
||||
"forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
|
||||
|
||||
/* Type Checking */
|
||||
"strict": true /* Enable all strict type-checking options. */,
|
||||
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */
|
||||
// "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
|
||||
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
|
||||
// "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
|
||||
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
|
||||
// "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */
|
||||
// "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */
|
||||
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
|
||||
// "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */
|
||||
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */
|
||||
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
|
||||
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
|
||||
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
|
||||
// "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
|
||||
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
|
||||
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */
|
||||
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
|
||||
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
|
||||
|
||||
/* Completeness */
|
||||
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
|
||||
"skipLibCheck": true /* Skip type checking all .d.ts files. */
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue