drogon/db_layer/capturas_interface.py
2018-12-23 18:30:11 +01:00

126 lines
4.5 KiB
Python

from core.mysql_wrapper import get_anunciosdb
class CapturasInterface:
def __init__(self):
self.anunciosdb = get_anunciosdb()
def insert_captura(self, ad_data):
columns = ', '.join(ad_data.keys())
placeholders_string = ', '.join(['%s'] * len(ad_data))
query_statement = """ INSERT INTO capturas
( fecha_captura, {} )
VALUES( NOW(), {} )""".format(columns, placeholders_string)
query_parameters = tuple([v for v in ad_data.values()])
self.anunciosdb.query(query_statement, query_parameters)
def old_ads_exist(self):
query_statement = """
SELECT uc.referencia
FROM anuncios.ultima_captura_full as uc
LEFT JOIN (SELECT cl.ad_url as ad_url
FROM tasks.capturing_last as cl
WHERE cl.status = 'Dead ad'
OR cl.status = 'Pending') as da
ON da.ad_url LIKE CONCAT('%', uc.referencia, '%')
WHERE uc.fecha_captura BETWEEN (NOW() - INTERVAL 90 day) AND (NOW() - INTERVAL 10 day)
AND da.ad_url is null
"""
cursor_result = self.anunciosdb.query(query_statement)
resultados = cursor_result.fetchall()
if resultados:
return True
else:
return False
def get_old_ad(self):
query_statement = """
SELECT uc.referencia
FROM anuncios.ultima_captura_full as uc
LEFT JOIN (SELECT cl.ad_url as ad_url
FROM tasks.capturing_last as cl
WHERE cl.status = 'Dead ad'
OR cl.status = 'Pending') as da
ON da.ad_url LIKE CONCAT('%', uc.referencia, '%')
WHERE uc.fecha_captura BETWEEN (NOW() - INTERVAL 90 day) AND (NOW() - INTERVAL 10 day)
AND da.ad_url is null
ORDER BY RAND()
LIMIT 1
"""
cursor_result = self.anunciosdb.query(query_statement, dictionary=True)
try:
return cursor_result.fetchone()
except:
return None
def not_geocoded_captura_exists(self):
query_statement = """
SELECT COUNT(referencia) as cantidad
FROM anuncios.capturas
WHERE `precision` IS NULL"""
cursor_result = self.anunciosdb.query(query_statement)
result = cursor_result.fetchone()[0]
return result > 0
def get_not_geocoded_captura(self):
query_statement = """
SELECT *
FROM anuncios.capturas
WHERE `precision` IS NULL
LIMIT 1
"""
cursor_result = self.anunciosdb.query(query_statement, dictionary=True)
return cursor_result.fetchone()
def update_geo_data(self, referencia, fecha_captura, latitude, longitude, precision):
query_statement = """
UPDATE anuncios.capturas
SET latitud = %(latitud)s, longitud = %(longitud)s, `precision` = %(precision)s
WHERE referencia = %(referencia)s AND fecha_captura = %(fecha_captura)s
"""
query_parameters = {'referencia': referencia,
'fecha_captura': fecha_captura,
'latitud': latitude,
'longitud': longitude,
'precision': precision}
self.anunciosdb.query(query_statement, query_parameters)
def get_market_snapshot(self, start_date, end_date):
query_statement = """
SELECT *
FROM `anuncios`.`capturas` `t1`
WHERE
(
(
`t1`.`fecha_captura` =
(
SELECT
max(`t2`.`fecha_captura`)
FROM `anuncios`.`capturas` `t2`
WHERE (`t1`.`referencia` = `t2`.`referencia`)
)
)
AND (`t1`.`fecha_captura` BETWEEN %(start_date)s AND %(end_date)s)
)
"""
query_parameters = {'start_date': start_date.strftime('%Y-%m-%d 00:00:00'),
'end_date': end_date.strftime('%Y-%m-%d 00:00:00')}
cursor_result = self.anunciosdb.query(query_statement, query_parameters, dictionary=True)
return cursor_result.fetchall()
capturas_interface = CapturasInterface()