Compare commits

..

3 commits

Author SHA1 Message Date
f6c60b41dd Handle curl 2024-12-30 19:07:15 +01:00
215b5cf275 Handle null browser/os 2024-12-30 18:06:09 +01:00
6aef5ed35e Use ua-parser for better results 2024-12-30 16:48:02 +01:00
5 changed files with 40 additions and 16 deletions

12
app.py
View file

@ -3,13 +3,14 @@ from datetime import timedelta
from dotenv import load_dotenv from dotenv import load_dotenv
from threading import Thread from threading import Thread
from os import getenv from os import getenv
import monitoring
import html import html
load_dotenv() load_dotenv()
# IMPORT DES MODULES # IMPORT DES MODULES
from modules.Classes import * from modules.api import *
from modules.curl import *
import modules.monitoring as monitoring
theaters = [Theater(data["node"]) for data in theaters = [Theater(data["node"]) for data in
requests.get("https://www.allocine.fr/_/localization_city/Brest").json()["values"]["theaters"]] requests.get("https://www.allocine.fr/_/localization_city/Brest").json()["values"]["theaters"]]
@ -55,7 +56,6 @@ def getShowtimes(date):
return data return data
showtimes = [] showtimes = []
for i in range(0, 7): for i in range(0, 7):
day_showtimes = getShowtimes(datetime.today() + timedelta(days=i)) day_showtimes = getShowtimes(datetime.today() + timedelta(days=i))
@ -87,12 +87,16 @@ def home():
if delta > 6: delta = 6 if delta > 6: delta = 6
if delta < 0: delta = 0 if delta < 0: delta = 0
useragent = request.headers.get('User-Agent')
Thread(target=monitoring.log, kwargs={ Thread(target=monitoring.log, kwargs={
'ip': request.environ.get("HTTP_X_FORWARDED_FOR", request.remote_addr), 'ip': request.environ.get("HTTP_X_FORWARDED_FOR", request.remote_addr),
'useragent': request.headers.get('User-Agent'), 'useragent': useragent,
'day': delta 'day': delta
}).start() }).start()
if useragent.startswith("curl/"):
return handle_curl(showtimes[delta])
dates = [] dates = []
for i in range(0, 7): for i in range(0, 7):

20
modules/curl.py Normal file
View file

@ -0,0 +1,20 @@
border_top = "" + "" * 58 + ""
border_bottom = "" + "" * 58 + ""
separator = "" + "" * 58 + ""
def handle_curl(movies):
table = [border_top, "{:^58}".format("CinéBrest"), separator]
for film in movies:
title_line = f"{film['title']:<57}"
table.append(title_line)
for cinema, seances in film['seances'].items():
cinema_line = f"║ ├─ {cinema:<54}"
seances_line = f"║ │ └─ : {', '.join(seances):<43}"
table.extend([cinema_line, seances_line])
table.append(separator)
table[-1] = border_bottom
return "\n".join(table)

View file

@ -1,11 +1,11 @@
import psycopg2
from psycopg2 import OperationalError
import time import time
from typing import Optional, Any
import logging import logging
import psycopg2
from os import getenv from os import getenv
import httpagentparser
from dotenv import load_dotenv from dotenv import load_dotenv
from typing import Optional, Any
from psycopg2 import OperationalError
from ua_parser import parse_os, parse_user_agent
load_dotenv() load_dotenv()
@ -153,12 +153,11 @@ if isInit:
def log(ip:str, useragent:str, day:int) -> bool: def log(ip:str, useragent:str, day:int) -> bool:
if not isInit: return True if not isInit: return True
ua_data = httpagentparser.detect(useragent) os = parse_os(useragent)
os = ua_data.get('os', {}).get("name", "unknown") browser = parse_user_agent(useragent)
browser = ua_data.get('browser', {}).get("name", "unknown")
success = db.execute_query(f"INSERT INTO cinema_queries (ip, time, browser, os, day) VALUES (\'{ip}\', current_timestamp, \'{browser}\', \'{os}\', {day});")
return success
if __name__ == "__main__": os_family = os.family if os != None else "unknown"
ua ="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0" browser_family = browser.family if browser != None else "unknown"
print(httpagentparser.detect(ua))
success = db.execute_query(f"INSERT INTO cinema_queries (ip, time, browser, os, day) VALUES (\'{ip}\', current_timestamp, \'{browser_family}\', \'{os_family}\', {day});")
return success

View file

@ -2,3 +2,4 @@ Flask
psycopg2 psycopg2
requests requests
python-dotenv python-dotenv
ua-parser[regex]