Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Filter visitas únicas

Estas en el tema de Filter visitas únicas en el foro de Python en Foros del Web. Saludos, requiero hacer un conteo de "hits" pero solo contar uno por cada 24 horas (visitas únicas), alguna idea? Me explico, esto me cuenta todas ...
  #1 (permalink)  
Antiguo 20/04/2013, 21:39
 
Fecha de Ingreso: enero-2007
Mensajes: 32
Antigüedad: 17 años, 3 meses
Puntos: 0
Filter visitas únicas

Saludos, requiero hacer un conteo de "hits" pero solo contar uno por cada 24 horas (visitas únicas), alguna idea?

Me explico, esto me cuenta todas las visitas del último mes:

Código:
visits = hit.objects.filter(time__gte=last_month).values("remote_addr").distinct().count()
Como hago para que solo me cuente una por día?

Gracias...
  #2 (permalink)  
Antiguo 20/04/2013, 22:07
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Filter visitas únicas

Es bastante simple simple, simplemente filtras por fechas mayores o iguales a ayer y listo.
Código Python:
Ver original
  1. import datetime
  2. ...
  3. last_day = datetime.date.today() - datetime.timedelta(days=1)
  4. visits = hit.objects.filter(time__gte=last_day).values("remote_addr").distinct().count()
  #3 (permalink)  
Antiguo 20/04/2013, 22:28
 
Fecha de Ingreso: enero-2007
Mensajes: 32
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Filter visitas únicas

Gracias por tu respuesta, sin embargo, es probable que no me explicara bien, si quiero obtener el último mes de estadística, sin embargo, quiero que si hay 200 visitas un día solo me cuente una... me explico?

Asumamos:

Día 1 = 1 visita
Día 2 = 100 visitas
Día 3 = 0 visitas
Día 4 = 8 visitas

Total 3 visitas únicas

Gracias...
  #4 (permalink)  
Antiguo 21/04/2013, 00:00
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Filter visitas únicas

Código Python:
Ver original
  1. from django.db.models import Count
  2. ...
  3. visits = hit.objects.filter(time__gte=last_month).values("remote_addr").annotate(visit_count=Count('id'))
Esto debería funcionar asumiendo que tu campo es date y no datetime en cuyo caso tendrías que hacer algunos cambios.
  #5 (permalink)  
Antiguo 21/04/2013, 00:23
 
Fecha de Ingreso: enero-2007
Mensajes: 32
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Filter visitas únicas

Perdón, debí aclararlo correcto:

Código:
time = models.DateTimeField(auto_now_add=True)
Gracias por la ayuda...
  #6 (permalink)  
Antiguo 22/04/2013, 08:05
 
Fecha de Ingreso: enero-2007
Mensajes: 32
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Filter visitas únicas

Este es el SQL que requiero
Código:
select distinct date_format(time,'%m-%d-%Y') AS day from maincore_hit;
En realidad es una cuenta, pero para no complicarlo la puedo hacer "a mano", no tengo ni idea de como hacerlo con Django

Ideas?
  #7 (permalink)  
Antiguo 22/04/2013, 08:08
 
Fecha de Ingreso: enero-2007
Mensajes: 32
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Filter visitas únicas

Por ahí leí que esto debería funcionar pero a mi no me funciona:

Código Python:
Ver original
  1. visits = App_hit.objects.filter(hit__time__gte=last_month).extra({"day", "date_format(hit__time,'%m-%d-%Y')"})

Última edición por chrids; 22/04/2013 a las 08:38
  #8 (permalink)  
Antiguo 22/04/2013, 09:36
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Filter visitas únicas

Eso depende de que base de datos estés usando. Ademas el extra debería ir.

Código Python:
Ver original
  1. time
  2. visits = App_hit.objects.filter(hit__time__gte=last_month).extra({"day", "date_format(time,'%m-%d-%Y')"})

O ver como se llama la columna hit__time cuando hace el query, por que cuando hace el join obviamente hit__time no es el nombre de la columna.
  #9 (permalink)  
Antiguo 22/04/2013, 09:49
 
Fecha de Ingreso: enero-2007
Mensajes: 32
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Filter visitas únicas

Tenés razón, ya tengo el nombre del campo, pero me sale este error con ese extra

Código:
'set' object has no attribute 'items'
Ahora, me pregunto, hay una manera menos "sucia" de hacer esto?

Porque de ser así, es más fácil correr el SQL query plano y ya... a todo esto, como se hace eso?
  #10 (permalink)  
Antiguo 22/04/2013, 09:51
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Filter visitas únicas

No funciona por que no le estas enviando un diccionario si no un set.

Le tienes que enviar:
Código Python:
Ver original
  1. {"day": "date_format(time,'%m-%d-%Y')"}
y no
Código Python:
Ver original
  1. {"day", "date_format(time,'%m-%d-%Y')"}
  #11 (permalink)  
Antiguo 22/04/2013, 10:21
 
Fecha de Ingreso: enero-2007
Mensajes: 32
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Filter visitas únicas

Cita:
Iniciado por razpeitia Ver Mensaje
No funciona por que no le estas enviando un diccionario si no un set.

Le tienes que enviar:
Código Python:
Ver original
  1. {"day": "date_format(time,'%m-%d-%Y')"}
y no
Código Python:
Ver original
  1. {"day", "date_format(time,'%m-%d-%Y')"}
Tenés razón, es que soy bastante n00b en python, las cosas avanzadas se me están complicando, aunque ya me estoy acomodando...

No funciona el extra, no se refleja:
Código:
>>> visits = App_hit.objects.filter(hit__time__gte=last_month).extra({"day": "date_format(`maincore_hit`.`time`),'%m-%d-%Y')"}).values("day").distinct().count()

(0.000) SELECT COUNT(DISTINCT `apps_app_hit`.`id`) FROM `apps_app_hit` INNER JOIN `maincore_hit` ON (`apps_app_hit`.`hit_id` = `maincore_hit`.`id`) WHERE `maincore_hit`.`time` >= '2013-03-23 12:15:05' ; args=(u'2013-03-23 12:15:05',)
Otra idea?
  #12 (permalink)  
Antiguo 22/04/2013, 18:51
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Filter visitas únicas

Mira en vista que no tengo código ni de las vistas, ni de los modelos, ni de nada por el estilo te dejo un link a un repo que cree con un ejemplo que funciona para sqlite3, solamente lo tienes que adaptar a cualquier otra db que uses.

https://github.com/razpeitia/fdw-1047824

Tengo entendido que es mas o menos lo que intentas hacer. Solamente modificado a tu gusto.
  #13 (permalink)  
Antiguo 22/04/2013, 23:30
 
Fecha de Ingreso: enero-2007
Mensajes: 32
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Filter visitas únicas

Cita:
Iniciado por razpeitia Ver Mensaje
Mira en vista que no tengo código ni de las vistas, ni de los modelos, ni de nada por el estilo te dejo un link a un repo que cree con un ejemplo que funciona para sqlite3, solamente lo tienes que adaptar a cualquier otra db que uses.

[url]https://github.com/razpeitia/fdw-1047824[/url]

Tengo entendido que es mas o menos lo que intentas hacer. Solamente modificado a tu gusto.
Sos un re capo!!! solucionado...

Muchas gracias...

Etiquetas: django
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:51.