Evaluating bids

Webscraping y manipulación de datos

Published on the March 03, 2016 in IT & Programming

About this project

Open

Requerimiento: Crear un sistema que escanee periódicamente una página web, obtenga cierta información de dicha página web y la inserte en una base de datos.

Los datos se encuentran organizados en la página web de la siguiente forma:
Deportes. Solo se usa para soccer. Del resto solo encontramos ligas
Ligas.
Es el nivel más alto a excepción de soccer que es un deporte y tiene varias ligas.
Eventos. O también conocidos como juegos. Están asociados a una liga y una fecha.
Esta es una de las informaciones que se escanean de la página, que eventos hay cada dia, quien juega contra quién y a qué hora es el evento. Una vez iniciado el evento se va recolectando el score y almacenando en la base de datos.
Un evento puede estar dividido en varias partes. Ejemplo:
NBA:
Juego completo
primera mitad
segunda mitad
primer cuarto
segundo cuarto
tercer cuarto
cuarto cuarto
NFL
Juego completo
primera mitad
segunda mitad
primer cuarto
segundo cuarto
tercer cuarto
cuarto cuarto
NHL
Juego completo
Primer tercio
Segundo tercio
Tercer tercio
Logros. Es la información principal que se necesita.
Están asociados a los equipos de un evento. En la página los logros están organizados por casas. Un evento tendra varios logros de casas distintas.
Los logros que necesitamos son los siguientes:
ML: El logro del equipo a ganar
rl: el logro del runline
total: el logro de alta y baja.
Casas: se refiere a una casa de apuesta que saca sus logros para un evento dado. Cada grupo saca sus logros de acuerdo a su propia perspectiva del evento, por esta razón los logros de una casa para un evento puede ser distinto para otra casa en el mismo evento. Las casas en el fuente están representadas por un número.
Describo las posibles casas con las que trabajaremos.
238: pinnacle
19: 5dimes
43: bet365
169: heritage
118: betcris
300: SportsInteraction
1275: JustBet
227: The Greek Sportsbook
92: Bodog
180: Intertops
192: Ladbrokes
349: Will Hill
442: IslandCasino
83: BetUs
93: Bookmaker
1096: BetOnline
123: Diamond Sportsbook
999996: Bovada
186: JazzSports
23: ABCislands
999991: Sportsbetting
423: LooseLines
139: YouWager
1537: Sportbet
999998: SBR Sportsbook
626: matchbook
1602: GtBets
1680: Mybookie.ag
1671: 138
URL: Las url’s para acceder a una información se divide en 3 partes.
Base: http://www.sportsbookreview.com/betting-odds/ es la raiz comun para acceder a cual informacion de logros de cualquier liga.
Liga: Es el primer parámetro que le sigue a la url y que identifica el tipo de liga al que queremos obtener la información. A continuación las ligas:
nfl-football/ defecto rl
nba-basketball/ defecto rl
nhl-hockey/ defecto ml
mlb-baseball/ defecto ml
college-football/ defecto rl
ncaa-basketball/ defecto rl
soccer/ defecto ml
tennis/ defecto ml
ufc/ defecto ml
boxing/ defecto ml
cfl-football/ defecto rl
wnba-basketball/ defecto rl
arena-football/ defecto rl
logro: es el segundo parámetros que le pasamos a la url y nos permite obtener información de un tipo de logro, ya sea ml, rl o total, de la liga seleccionada. Depende de la liga, hay un tipo de logro por defecto que no es necesario pasar por parámetro.
Si no se pasa este parámetro por defecto carga este logro. En el numeral anterior está en cada liga el logro por defecto al que no se necesita pasar el parámetro por url.
ml: money-line/
rl: pointspread/
total: totals/
tipo evento: si el logro que queremos obtener es del evento juego completo, o mitad de tiempo, o algún cuarto, esta información la configuramos en el tercer parámetro que se le pasa a la url. Por defecto en todas las URL se muestra el juego completo, dicho parámetro no se pasa por url, si no se pasa este parámetro se asume que se está pidiendo el tiempo completo.
1st-half/
2nd-half/
1st-quarter/
2nd-quarter/
3rd-quarter/
4th-quarter/
A modo de ejemplo vayamos a: http://www.sportsbookreview.com/betting-odds/nba-basketball/?date=20151208
Visualizamos los logros para NBA del dia 08 dic 2015. Vemos 6 eventos para ese dia. El primero es a las 7pm y los equipos del evento son: golden state e indiana.
Se visualiza unas columnas con los siguientes nombres: pinnacle, 5dimes, bet365, heritage, betcris, etc. Esas son casas.cada casa saca su logros. En este caso los logros que vemos son tipo RL.

Si vemos los logros del evento Golden-indiana para la casa heritage obtenemos lo siguiente:
golden state: -6 -105
indiana: +6 -115
esos son los logros para RL del evento golden-indiana de la casa heritage.
Si queremos ver los ML vamos a la siguiente url:
http://www.sportsbookreview.com/betting-odds/nba-basketball/money-line/?date=20151208
en este caso los logros del evento Golden-indiana para la casa heritage ML son:
-235
+195
Si queremos ver los TOTAL:
http://www.sportsbookreview.com/betting-odds/nba-basketball/totals/?date=20151208
Si queremos ver ML primera mitad:
http://www.sportsbookreview.com/betting-odds/nba-basketball/totals/1st-half/?date=20151208
Si queremos ver RL tercer cuarto:
http://www.sportsbookreview.com/betting-odds/nba-basketball/totals/3rd-quarter/?date=20151208
Solo cambia la url, un formato específico para cada tipo/liga.

Desde la creación de las distintas ligas, el tiempo de escaneos hasta el orden de los escaneos es configurable.



El usuario con privilegios de administrador accede al sistema y se dirige a la interfaz “administrar ligas”
Visualiza las listas creadas.
Podrá visualizar el nombre de la liga, si la liga se encuentra activa o inactiva, la fecha de la última actualización, y un botón para entrar a esa liga.
Describimos la información que puede tener una liga y las posibles configuraciones:
Nombre: Será el nombre de la liga, seguimos con el ejemplo de la liga NBA.
Eventos: son los juegos que están asociados a una liga. El administrador podrá configurar el status de eventos o de alguna parte del evento, pudiendo habilitarlo o deshabilitarlo.
Tipos de eventos: Serán las posibles partes que puede tener un evento dentro de esta liga. Siguiendo el ejemplo de la liga NBA serían los siguientes:
Juego completo
ML: http://www.sportsbookreview.com/betting-odds/nba-basketball/money-line/
RL: http://www.sportsbookreview.com/betting-odds/nba-basketball/
TOTAL: http://www.sportsbookreview.com/betting-odds/nba-basketball/totals/
primera mitad
ML: http://www.sportsbookreview.com/betting-odds/nba-basketball/money-line/1st-half/
RL: http://www.sportsbookreview.com/betting-odds/nba-basketball/1st-half/
TOTAL: http://www.sportsbookreview.com/betting-odds/nba-basketball/totals/1st-half/
segunda mitad
ML: http://www.sportsbookreview.com/betting-odds/nba-basketball/money-line/2nd-half/
RL: http://www.sportsbookreview.com/betting-odds/nba-basketball/2nd-half/
TOTAL: http://www.sportsbookreview.com/betting-odds/nba-basketball/totals/2nd-half/
primer cuarto
ML: http://www.sportsbookreview.com/betting-odds/nba-basketball/money-line/1st-quarter/
RL: http://www.sportsbookreview.com/betting-odds/nba-basketball/1st-quarter/
TOTAL: http://www.sportsbookreview.com/betting-odds/nba-basketball/totals/1st-quarter/
segundo cuarto
ML: http://www.sportsbookreview.com/betting-odds/nba-basketball/money-line/2nd-quarter/
RL: http://www.sportsbookreview.com/betting-odds/nba-basketball/2nd-quarter/
TOTAL: http://www.sportsbookreview.com/betting-odds/nba-basketball/totals/2nd-quarter/
tercer cuarto
ML: http://www.sportsbookreview.com/betting-odds/nba-basketball/money-line/3rd-quarter/
RL: http://www.sportsbookreview.com/betting-odds/nba-basketball/3rd-quarter/
TOTAL: http://www.sportsbookreview.com/betting-odds/nba-basketball/totals/3rd-quarter/
cuarto cuarto
ML: http://www.sportsbookreview.com/betting-odds/nba-basketball/money-line/4th-quarter/
RL: http://www.sportsbookreview.com/betting-odds/nba-basketball/4th-quarter/
TOTAL: http://www.sportsbookreview.com/betting-odds/nba-basketball/totals/4th-quarter/
Así como la liga tiene un status, las partes y los tipos de logros de cada parte también tienen un status. Si alguno se encuentra inactivo, al momento de escanear no se toma en cuenta esa información.

Status de sincronización de eventos: Tantos los eventos como su partes tienen estatus de sincronización que se describen a continuación:
En espera: cuando el evento se consigue en la página pero ninguna de las casa seleccionada ha publicado logros.
Iniciado. Cuando alguna de las casas ya ha publicado logros, estos logros se pasan a sincronizar con la db local.
Cerrado: Cuando un evento o una parte del evento no se seguirá sincronizando los logros porque ya este evento inicio pero si se seguirá sincronizando los scores y/o tiempo del juego. Hay 2 formas de saber si inicio.
Hora de inicio: Algunos eventos o partes de eventos cierran por la hora de inicio. Esto debe ser configurable. Ejemplo, en NBA los eventos y/o partes de eventos que cierran con la hora de inicio son: Juego completo, primera mitad y primer cuarto.

Por culminación de antecesor: Este es otro método para saber si un evento o parte de evento cerró. También es configurable en el sistema. Los eventos que dependen de otros en la liga NBA son los siguientes:
Segunda mitad depende de primera mitad.

Segundo cuarto depende de primer cuarto
tercer cuarto depende de segundo cuarto
cuarto cuarto depende de tercer cuarto.
Culminado. Es cuando ya el evento o parte del evento término. Se puede obtener esta información por el fuente del score de cada evento.

Tiempo de escaneo de eventos. Representa el tiempo en minuto que tiene que esperar el sistema para volver a escanear. Si el valor para la liga  nba es “3” cada 3 minutos hace el escaneo de sus eventos y actualiza la db local.

Orden de escaneos: Debido a que un evento/logro puede tener varias casa que den información, solo se debe seleccionar la información de una única casa. Para esto se debe establecer un orden de selección. Este orden de selección va asociado a la liga.
Este orden es configurable y se puede cambiar en cualquier momento.
En el caso de NBA se pudiera tener un orden como el siguiente:
5dimes
justbet
heritages
betcris
pinnacle
La interpretación del orden es la siguiente: Cuando el sistema escanea va a utilizar el logro de la casa 5dimes. Si 5dimes aún no tiene logro para este evento, toma la de justbet. Si justbet aún no tiene logro para este evento, toma la de heritage.
Si heritage aún no tiene logro para este evento, toma la de betcris, si betcris aún no tiene logro para este evento, toma la de pinnacle, si pinnacle aún no tiene logro para este evento el sistema asume que aún no hay logros para este evento y mantiene el evento con status “en espera”.
Si en el próximo escaneo encuentra el logro en la casa heritage, utiliza este logro. Si para el próximo escaneo consigue logro en justbet, heritage y betcris, utiliza justbet porque es el que tiene más prioridad. Por último cuando consiga logros en 5dimes, será su referencia de ese momento en adelante porque es la acsa con más prioridad.

Actualización de logros: Una vez que para un evento/tipologro se tenga los valores requeridos, estos valores son almacenados en la DB local. Luego en el próximo escaneo se verifica si los valores son iguales. En caso de serlo no ocurre nada.
Si en el nuevo escaneo se detecta que el valor es distinto ya sea porque encontró una casa con más prioridad o la casa cambio los logros para este evento/tipoLogro, se procede a actualizar el logro en la db local. La tabla que almacena logros en la DB local será una tabla tipo histórico, así que cuando digo “se actualizará” me refiero a que se agregara un nuevo registro con el nuevo valor encontrado y este registro representará el valor actual del logro, los registros anteriores quedarán como históricos. Los registros históricos tendrán una vida útil de 30 días después de la fecha de inicio del evento.


Aquí ordeno un poco algo del codigo y te explico donde se encuentra cada cosa. https://gist.github.com/diazhh/ef21f9447ea94569361b

El objetivo del sistema es crear y actualizar la información necesaria para las apuesta en las páginas de parley, pero hasta el momento el sistema encuentra la información y la almacena en una db. Ahora toca el proceso de esa información encontrada enviarla a las bases de datos de las paginas de apuestas.


El sistema podrá actualizar varias páginas a la vez, y cada configuración de cada página podría ser diferente una de otra.

Se creará un sistema de “clientes” que no será más que las paginas de apuestas que se actualizará mediante el centinela. Estos clientes tendrán configuraciones particulares como se describió en el párrafo anterior. También tendrán un sistema donde usuarios podrán hacer las configuraciones necesarias.
Estos usuarios perteneceran a los “clientes” y sus configuración o interfaces serán propio de cada cliente.

El administrador del sistema creará el cliente y agregara un usuario a dicho cliente. Luego el usuario accede al sistema y hará las configuraciones necesarias de cada cliente.
Existirán 2 perfiles de usuarios:
Operador: Tendrá acceso a las siguientes funcionalidades:
Relacionar ligas: Podrá hacer las relaciones de ligas entre el centinela y la página cliente. El centinela obtiene información de ciertas ligas tal como se describió en la parte superior. Las páginas de apuestas pueden crear eventos para estas ligas y para que el centinela sepa el id de la liga en la página cliente, se debe configurar previamente estas relaciones.
Esto se hace en una interfaz que selecciona las ligas en la db de la página cliente y le permite al usuario relacionar con las ligas del centinela. Así que el usuario accede a una interfaz donde configura que NBA del centinela es “Basquet NBA” de la página cliente.
Cargar eventos: El centinela encuentra cierta cantidad de eventos en la página y la guarda en su base de datos, ahora hay que agregar esos eventos a la página de apuesta. El operador entrará en una interfaz en el que selecciona una liga, allí mostrará los eventos encontrados por el sistema de fecha hoy en adelante y los listará mostrando a los equipos que participan en cada evento. Esa misma interfaz seleccionara en la base de datos del cliente los equipos perteneciente a la liga seleccionada y mostrará al lado de los nombres de los equipos del evento del centinela, select menu para que el operador seleccione el nombre del equipo de la base de datos de la pagina y asi haga un emparejamiento.
Esta pagina tendra un paginador y solo mostrará 10 eventos a la vez. Una vez que el operador empareje todos los equipos de los eventos del centinela con los equipos de la base de datos local, hara click sobre un botón llamado “crear eventos” a lo cual el sistema creará en la base de datos cliente el/los nuevo(s) evento(s) y hará la relación entre el evento del centinela y el evento de la página cliente, de esta forma cuando el centinela detecte algún cambio en el evento(cambios de logros, horarios) haga el cambio en la base de datos del cliente.
Configuración de actualizaciones: En el centinela previamente se configuró el tiempo de actualización de una liga, sin embargo el cliente puede configurar otro tiempo. Ejemplo, la liga NBA se actualiza cada 3 min en el centinela, pero el operador de una página configuro qué quiere que las actualizaciones tengan un mínimo de 10 minutos de diferencias. Si el centinela encontró cambios en un vento y actualiza la página cliente y 3 minutos después el centinela encuentra otros cambios en dicha liga, no actualizará sino hasta que pasen mínimo 10 min.
Estas configuraciones serán por ligas.
Configuraciones de alarmas: Fue la aplicación que tú hiciste. Se agregara esta funcionalidad. Se configura a una liga de la página los parámetros por logros que serán usados cada vez que se actualice un evento para comparar si es permitida o no la actualización.
Hay 2 niveles de alarmas, la primera manda un correo a los usuarios de la página cliente, la 2da alarma aparte de enviar el correo cierra el evento en la página cliente. Debe existir una opción para silenciar la alarma, esto se hace ocultando de la base de datos cliente la actualización que dio la alarma para que no la tome en cuenta y no dispare nuevamente la alarma.
Visualización de eventos: Esta interfaz permitirá al operador seleccionar una liga y ver los eventos creados en la página cliente, agrupados por las fechas de los eventos. Tendrá un selector de fechas para cargar los eventos de una fecha dada de dicha liga. También servirá de histórico.

Si el evento está activo, el operador podrá pausarlo. Esto quiere decir que si el centinela encuentra algún cambio para este evento no lo actualizará en la db del cliente. Esto también se conoce como “pasar a manual” ya que los operadores tienen el control total del evento desde la página de apuesta.

En cualquier estado que se encuentre el evento, el usuario podrá ver su historial de cambios(cambios de logros y cambios de horarios)
Configuración de diferencia de horario: Ya que el centinela se trae los juegos en un horario que podrá ser distinto al local de la página, se debe configurar la diferencia en horas de este horario. Así a la hora de cargar el evento el sistema calculará la nueva hora basado en esta configuración.
Administrador: podrá hacer lo mismo que el operador y además podrá configurar lo siguiente:
parámetros de configuración a db de la página cliente:
host
usuario
clave
db
visualización de cambios. En la interfaz “Visualización de eventos” tambien podra ver quien cargó un evento, y quien pauso y/o reactivo la actualización de un evento y cambio de la “configuración de diferencia horario”, cambio de configuracion de actualizaciones, configuración de alarmas.

Category IT & Programming
Is this a project or a position? Project
I currently have I have specifications
Required availability Part time
Experience in this type of projects Yes (I have managed this kind of project before)

Delivery term: Not specified

Other projects posted by H. D.