Initial commit

This commit is contained in:
LucasJavaudin 2025-07-28 15:53:50 +02:00
parent a1069e56bc
commit 286d89ad3d
3 changed files with 108 additions and 0 deletions

31
ods.csv Normal file
View File

@ -0,0 +1,31 @@
zone_origin,zone_destination,origin_x,origin_y,destination_x,destination_y
764,541,2.24530477352331,48.8347645451668,2.148600996275,48.7951221273305
538,863,2.15386620557529,48.8060072829673,2.17181932343479,48.8450994726178
104,763,2.40352283948468,48.8568662725772,2.24267475441837,48.8436374088146
69,94,2.29798995583081,48.8328331333799,2.34041045806128,48.8985300765386
84,322,2.29289082770489,48.877761174813,2.78702580000552,48.8501682092641
84,1060,2.29289082770489,48.877761174813,2.40124544796948,48.813124151778
1051,1079,2.33679614132317,48.7552477134484,2.53531897140623,48.785296409886
1043,99,2.46544270108551,48.7811096806273,2.37741739152331,48.883136354461
1089,959,2.5172675382388,48.7976520502832,2.50303350809214,48.9012679569104
1081,1058,2.49893552227025,48.8422718400072,2.38297575764604,48.8141705283258
131,163,2.61092156730628,48.6911283193282,2.57156207245643,48.6578262435715
117,168,2.81956687450666,48.8556384232404,2.7827648723145,48.875203794514
145,195,2.5711297857824,48.3262342138275,2.69636902647986,48.4048331329728
269,195,2.69222756376317,48.2685639505921,2.69636902647986,48.4048331329728
312,237,2.80768810571496,49.0532993347927,2.88088671518603,48.9653856246601
245,270,2.59217655065731,49.0190938958613,2.86161354891991,48.973343967919
242,254,2.66743336082088,48.5419210945901,2.6791224366718,48.6041248619187
359,403,2.06782239538375,48.9608293536687,2.09850546417701,48.9981668838852
364,442,1.85383323300484,48.9759591595761,1.74191912138972,48.9935476543489
676,438,2.24192912937909,48.7165283047375,2.16634817232331,48.7705992556186
574,458,2.29779994548061,48.594563798139,2.09709414508562,48.874752964087
1246,493,2.10286847682099,49.0565790714291,2.04534579973676,48.935437592091
655,532,2.26159705634266,48.7333075990665,2.21311703742605,48.7813323590488
131,683,2.61092156730628,48.6911283193282,2.53735831258199,48.6770669040302
822,756,2.22764878222806,48.7872435190096,2.30561487740419,48.8016856649222
1282,1158,2.0245231049303,49.0288569472425,2.07523019873142,49.0350566131641
718,676,2.26727381416908,48.7470611153692,2.24192912937909,48.7165283047375
505,496,1.93949508967669,48.5713824819609,1.83108492303569,48.6422577894188
69,811,2.29806065849271,48.8328038037464,2.26417781250754,48.8240833192653
878,979,2.49855525523787,48.9435428398679,2.35618625519865,48.9190736969263
1 zone_origin zone_destination origin_x origin_y destination_x destination_y
2 764 541 2.24530477352331 48.8347645451668 2.148600996275 48.7951221273305
3 538 863 2.15386620557529 48.8060072829673 2.17181932343479 48.8450994726178
4 104 763 2.40352283948468 48.8568662725772 2.24267475441837 48.8436374088146
5 69 94 2.29798995583081 48.8328331333799 2.34041045806128 48.8985300765386
6 84 322 2.29289082770489 48.877761174813 2.78702580000552 48.8501682092641
7 84 1060 2.29289082770489 48.877761174813 2.40124544796948 48.813124151778
8 1051 1079 2.33679614132317 48.7552477134484 2.53531897140623 48.785296409886
9 1043 99 2.46544270108551 48.7811096806273 2.37741739152331 48.883136354461
10 1089 959 2.5172675382388 48.7976520502832 2.50303350809214 48.9012679569104
11 1081 1058 2.49893552227025 48.8422718400072 2.38297575764604 48.8141705283258
12 131 163 2.61092156730628 48.6911283193282 2.57156207245643 48.6578262435715
13 117 168 2.81956687450666 48.8556384232404 2.7827648723145 48.875203794514
14 145 195 2.5711297857824 48.3262342138275 2.69636902647986 48.4048331329728
15 269 195 2.69222756376317 48.2685639505921 2.69636902647986 48.4048331329728
16 312 237 2.80768810571496 49.0532993347927 2.88088671518603 48.9653856246601
17 245 270 2.59217655065731 49.0190938958613 2.86161354891991 48.973343967919
18 242 254 2.66743336082088 48.5419210945901 2.6791224366718 48.6041248619187
19 359 403 2.06782239538375 48.9608293536687 2.09850546417701 48.9981668838852
20 364 442 1.85383323300484 48.9759591595761 1.74191912138972 48.9935476543489
21 676 438 2.24192912937909 48.7165283047375 2.16634817232331 48.7705992556186
22 574 458 2.29779994548061 48.594563798139 2.09709414508562 48.874752964087
23 1246 493 2.10286847682099 49.0565790714291 2.04534579973676 48.935437592091
24 655 532 2.26159705634266 48.7333075990665 2.21311703742605 48.7813323590488
25 131 683 2.61092156730628 48.6911283193282 2.53735831258199 48.6770669040302
26 822 756 2.22764878222806 48.7872435190096 2.30561487740419 48.8016856649222
27 1282 1158 2.0245231049303 49.0288569472425 2.07523019873142 49.0350566131641
28 718 676 2.26727381416908 48.7470611153692 2.24192912937909 48.7165283047375
29 505 496 1.93949508967669 48.5713824819609 1.83108492303569 48.6422577894188
30 69 811 2.29806065849271 48.8328038037464 2.26417781250754 48.8240833192653
31 878 979 2.49855525523787 48.9435428398679 2.35618625519865 48.9190736969263

3
requirements.txt Normal file
View File

@ -0,0 +1,3 @@
pandas==2.3.1
pytz==2025.2
requests==2.32.4

74
run.py Normal file
View File

@ -0,0 +1,74 @@
import requests
import pandas as pd
import os
from datetime import datetime
import time
import pytz
OD_FILE = "./ods.csv"
TOMTOM_OUTPUT_FILE = "./tomtom.csv"
TOMTOM_API_KEY = "TODO"
def csv(file_path, dataframe):
if not os.path.exists(file_path):
dataframe.to_csv(file_path, index=False, header=True)
else:
dataframe.to_csv(file_path, mode="a", index=False, header=False)
def tomtom_requests():
utc_now = datetime.utcnow().replace(tzinfo=pytz.utc)
paris_tz = pytz.timezone("Europe/Paris")
paris_now = utc_now.astimezone(paris_tz)
if not (
(6 <= paris_now.hour < 10)
or (16 <= paris_now.hour < 20)
or (paris_now.hour == 10 and paris_now.minute == 0)
or (paris_now.hour == 20 and paris_now.minute == 0)
):
# Run only the requests between 6 a.m. and 10 a.m. and between 4 p.m. and 8 p.m.
print("Skipping TomTom requests")
return
ods = pd.read_csv(OD_FILE)
data = list()
for _, row in ods.iterrows():
url1 = "https://api.tomtom.com/routing/1/calculateRoute/"
orig_des = (
str(row["origin_y"])
+ ","
+ str(row["origin_x"])
+ ":"
+ str(row["destination_y"])
+ ","
+ str(row["destination_x"])
+ "/json?"
)
apikey = f"key={TOMTOM_API_KEY}"
depart_time = "&departAt=now"
travelmode = "&travelMode=car"
url = url1 + orig_des + apikey + depart_time + travelmode
output = requests.request("GET", url, headers={})
time.sleep(0.5)
output = output.json()
if "routes" in output.keys():
duration = output["routes"][0]["summary"]["travelTimeInSeconds"]
distance = output["routes"][0]["summary"]["lengthInMeters"]
else:
duration = 0
distance = 0
row = {
"origin": row["zone_origin"],
"destination": row["zone_destination"],
"date": paris_now.strftime("%Y-%m-%d"),
"departure_time": paris_now.strftime("%H:%M"),
"travel_time": time.strftime("%H:%M:%S", time.gmtime(duration)),
"distance": distance,
}
data.append(row)
df = pd.DataFrame(data)
csv(TOMTOM_OUTPUT_FILE, df)
print("Done")
tomtom_requests()