Pour la première partie de cette SAE, nous avions à notre disposition un fichier log d'un serveur qui héberge un site de Disques Vinyles. Dans ce fichier log se situent toutes les informations qu'un serveur peut avoir d'un client comme l'adresse IP, l'OS et le navigateur utilisé. L'objectif était de traiter ces données afin d'extraire les adresses IP, éviter les doublons et de les afficher sur une carte. Cela permet d'obtenir une visualisation claire des utilisateurs ayant visité le site.
De plus, à partir de la structure de ce fichier .log, il nous était demandé de le reformater en .Json ou .XML
La deuxième partie de cette SAE reposait sur notre capacité à pouvoir créer une interface graphique. Nous devions donc recréer le célèbre jeu du Casse-Brique en langage Python avec l'aide de la librairie Tkinter.
from time import sleep
import requests
import folium
json_table2 = []
def get_ip():
ip_table = []
with open("log.log", 'r') as fichier:
print("Traitement du fichier log...")
for line in fichier:
line_table = line.split(" ")
if line_table[0] not in ip_table:
ip_table.append(line_table[0])
return ip_table
def get_json(trame):
global json_table
url = "http://ip-api.com/batch"
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=trame, headers=headers)
if response.status_code == 200:
#Enlever les crochets
return response.json() # Résultats de localisation
else:
print(f"Erreur HTTP {response.status_code}: {response.text}")
return [] # Retourner une liste vide en cas d'erreur
def send_ip2api():
global json_table2
#Envoie d'une liste de 100 @IP : 15 x par minute
compteur = 0
ip_table = get_ip()
len_iptable = len(ip_table)
print("Envoie de 15 requètes")
while len(ip_table) > 0:
if compteur < 15:
trame = ip_table[:100]
#Envoie de la trame
json_table = (get_json(trame))
#Mettre mieux la liste
for i in json_table:
json_table2.append(i)
ip_table = ip_table[100:]
compteur += 1
else:
print("Attente de 60s")
sleep(60)
compteur = 0
return json_table
def create_map():
final = []
m = folium.Map(location=[48.8566, 2.3522], zoom_start=2)
#Obtenir une liste simple
for loc in json_table2:
final.append(loc)
print(len(final))
print(final)
for i in final:
if 'lat' in i and 'lon' in i:
lat = i['lat']
lon = i['lon']
folium.Marker([lat, lon]).add_to(m)
m.save('carte.html')
print("Carte créée avec succès")
send_ip2api()
create_map()