Ade-free-rooms / getFreeRoomsFromAde2.py
Olivier-Truong's picture
Update getFreeRoomsFromAde2.py
c810bff verified
import re, requests
from datetime import datetime, timezone
class getJSESSIONID:
def __init__(self):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0"}
self.JSESSIONID = None
self.rq = None
self.repH = {}
self.repT = ""
self.sess = requests.Session()
def getCookie(self):
self.rq = self.sess.get("https://planif.esiee.fr/", headers=self.headers)
self.repH, self.repT = (self.rq.headers, self.rq.text)
self.JSESSIONID = self.repH.get("Set-Cookie")
return self.JSESSIONID
s = getJSESSIONID()
class getXHR1:
def __init__(self, JSESSIONID: str):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Cookie": JSESSIONID, "X-GWT-Module-Base": "https://planif.esiee.fr/direct/gwtdirectplanning/", "X-GWT-Permutation": "84978C43E1DD9746A3991E03E83BCE38", "Content-Type": "text/x-gwt-rpc; charset=utf-8"}
self.rq = None
self.repH = {}
self.repT = ""
self.reqT = "7|0|7|https://planif.esiee.fr/direct/gwtdirectplanning/|65782F4BD6A979FD5D493428851A7CD3|com.adesoft.gwt.core.client.rpc.ConfigurationServiceProxy|method1getInitialConfiguration|J|java.lang.String/2004016611|fr|1|2|3|4|2|5|6|ZQrtw$m|7|"
def post(self):
self.rq = s.sess.post("https://planif.esiee.fr/direct/gwtdirectplanning/ConfigurationServiceProxy", headers=self.headers, data=self.reqT)
self.repH, self.repT = (self.rq.headers, self.rq.text)
#print(self.repH, "\n\n\n\n")
class getXHR4:
def __init__(self, JSESSIONID: str):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Cookie": JSESSIONID, "X-GWT-Module-Base": "https://planif.esiee.fr/direct/gwtdirectplanning/", "X-GWT-Permutation": "84978C43E1DD9746A3991E03E83BCE38", "Content-Type": "text/x-gwt-rpc; charset=utf-8"}
self.rq = None
self.repH = {}
self.repT = ""
self.reqT = "7|0|9|https://planif.esiee.fr/direct/gwtdirectplanning/|1DB505FD9B7EA449BBDD73013628438C|com.adesoft.gwt.core.client.rpc.WebClientServiceProxy|method1login|J|com.adesoft.gwt.core.client.rpc.data.LoginRequest/3705388826|com.adesoft.gwt.directplan.client.rpc.data.DirectLoginRequest/635437471|lecteur1||1|2|3|4|2|5|6|ZQrwXtk|7|0|0|0|0|0|8|9|-1|0|0|"
def post(self):
self.rq = s.sess.post("https://planif.esiee.fr/direct/gwtdirectplanning/WebClientServiceProxy", headers=self.headers, data=self.reqT)
self.repH, self.repT = (self.rq.headers, self.rq.text)
#print(self.repH, "\n\n\n\n", self.repT)
class getXHR5:
def __init__(self, JSESSIONID: str):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Cookie": JSESSIONID, "X-GWT-Module-Base": "https://planif.esiee.fr/direct/gwtdirectplanning/", "X-GWT-Permutation": "84978C43E1DD9746A3991E03E83BCE38", "Content-Type": "text/x-gwt-rpc; charset=utf-8"}
self.rq = None
self.repH = {}
self.repT = ""
self.reqT = "7|0|5|https://planif.esiee.fr/direct/gwtdirectplanning/|1DB505FD9B7EA449BBDD73013628438C|com.adesoft.gwt.core.client.rpc.WebClientServiceProxy|method4getProjectList|J|1|2|3|4|1|5|ZQrwXtk|"
def post(self):
self.rq = s.sess.post("https://planif.esiee.fr/direct/gwtdirectplanning/WebClientServiceProxy", headers=self.headers, data=self.reqT)
self.repH, self.repT = (self.rq.headers, self.rq.text)
#print(self.repH, "\n\n\n\n", self.repT)
d2d2 = {}
ch = self.repT.split('{"')[1:]
for e in ch:
n, a = e.split('""')[:2]
d2d2[a] = n
return d2d2
class getXHR7:
def __init__(self, JSESSIONID: str, idAnnee: str):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Cookie": JSESSIONID, "X-GWT-Module-Base": "https://planif.esiee.fr/direct/gwtdirectplanning/", "X-GWT-Permutation": "84978C43E1DD9746A3991E03E83BCE38", "Content-Type": "text/x-gwt-rpc; charset=utf-8"}
self.rq = None
self.repH = {}
self.repT = ""
self.idAnnee = idAnnee
self.reqT = f"7|0|7|https://planif.esiee.fr/direct/gwtdirectplanning/|BB468225DBC62C7786D92BE512B62089|com.adesoft.gwt.directplan.client.rpc.DirectPlanningServiceProxy|method13loadProject|J|I|Z|1|2|3|4|3|5|6|7|ZQrwXtk|{self.idAnnee}|1|"
def post(self):
self.rq = s.sess.post("https://planif.esiee.fr/direct/gwtdirectplanning/DirectPlanningServiceProxy", headers=self.headers, data=self.reqT)
self.repH, self.repT = (self.rq.headers, self.rq.text)
#print(self.repH, "\n\n\n\n", self.repT)
class getXHRAmphis:
def __init__(self, JSESSIONID: str):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Cookie": JSESSIONID + """Direct Planning Tree '{"state":{"sortField":"s:NAME", "sortDir":"s:ASC", "expanded":["s:-3","s:49"]}}'""", "X-GWT-Module-Base": "https://planif.esiee.fr/direct/gwtdirectplanning/", "X-GWT-Permutation": "84978C43E1DD9746A3991E03E83BCE38", "Content-Type": "text/x-gwt-rpc; charset=utf-8"}
self.rq = None
self.repH = {}
self.repT = ""
self.reqT = '7|0|20|https://planif.esiee.fr/direct/gwtdirectplanning/|BB468225DBC62C7786D92BE512B62089|com.adesoft.gwt.directplan.client.rpc.DirectPlanningServiceProxy|method4getChildren|J|java.lang.String/2004016611|com.adesoft.gwt.directplan.client.ui.tree.TreeResourceConfig/2234901663|{"795""true""2""-1""0""0""0""false"[2]{"ColorField""COLOR""LabelColor""255,255,255""false""false"{"StringField""NAME""LabelName""01-Amphis""false""false""01-Enseignement.01-Amphis""classroom""3""2"[0]|[I/2970817851|java.util.LinkedHashMap/3008245022|COLOR|com.adesoft.gwt.core.client.rpc.config.OutputField/870745015|LabelColor||com.adesoft.gwt.core.client.rpc.config.FieldType/3992110146|NAME|LabelName|java.util.ArrayList/4159755760|com.extjs.gxt.ui.client.data.SortInfo/1143517771|com.extjs.gxt.ui.client.Style$SortDir/640452531|1|2|3|4|3|5|6|7|ZQrwXtk|8|7|0|9|2|-1|-1|10|0|2|6|11|12|0|13|11|14|15|11|0|0|6|16|12|0|17|16|14|15|4|0|0|18|0|18|0|19|20|1|16|18|0|'
def post(self):
self.rq = s.sess.post("https://planif.esiee.fr/direct/gwtdirectplanning/DirectPlanningServiceProxy", headers=self.headers, data=self.reqT)
self.repH, self.repT = (self.rq.headers, self.rq.text)
#print(self.repH, "\n\n\n\n", self.repT)
amphisLst = self.repT.replace("]{\\\"Color", "Color").split("]{\\\"")[1:]
#print(amphisLst)
lst = []
for ae in amphisLst:
#print(">>", ae.split('\\"\\"'))
lst.append({ae.split('\\"\\"')[18]: ae.split('\\"\\"')[0]})
return lst
class getXHREnseignRooms:
def __init__(self, JSESSIONID: str):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Cookie": JSESSIONID + """Direct Planning Tree '{"state":{"sortField":"s:NAME", "sortDir":"s:ASC"}}'""", "X-GWT-Module-Base": "https://planif.esiee.fr/direct/gwtdirectplanning/", "X-GWT-Permutation": "84978C43E1DD9746A3991E03E83BCE38", "Content-Type": "text/x-gwt-rpc; charset=utf-8"}
self.rq = None
self.repH = {}
self.repT = ""
self.reqT = '7|0|20|https://planif.esiee.fr/direct/gwtdirectplanning/|BB468225DBC62C7786D92BE512B62089|com.adesoft.gwt.directplan.client.rpc.DirectPlanningServiceProxy|method4getChildren|J|java.lang.String/2004016611|com.adesoft.gwt.directplan.client.ui.tree.TreeResourceConfig/2234901663|{"-3""true""0""-1""2""2""0""false"[1]{"StringField""NAME""LabelName""Salles""false""false""""classroom""3""0"[0]|[I/2970817851|java.util.LinkedHashMap/3008245022|COLOR|com.adesoft.gwt.core.client.rpc.config.OutputField/870745015|LabelColor||com.adesoft.gwt.core.client.rpc.config.FieldType/3992110146|NAME|LabelName|java.util.ArrayList/4159755760|com.extjs.gxt.ui.client.data.SortInfo/1143517771|com.extjs.gxt.ui.client.Style$SortDir/640452531|1|2|3|4|3|5|6|7|ZQrwXtk|8|7|0|9|2|-1|-1|10|0|2|6|11|12|0|13|11|14|15|11|0|0|6|16|12|0|17|16|14|15|4|0|0|18|0|18|0|19|20|1|16|18|0|'
def post(self):
self.rq = s.sess.post("https://planif.esiee.fr/direct/gwtdirectplanning/DirectPlanningServiceProxy", headers=self.headers, data=self.reqT)
self.repH, self.repT = (self.rq.headers, self.rq.text)
#print(self.repH, "\n\n\n\n", self.repT)
amphisLst = self.repT.replace("]{\\\"Color", "Color").split("]{\\\"")[1:]
#print(amphisLst)
lst = []
for ae in amphisLst:
#print(">>", ae.split('\\"\\"'))
lst.append({ae.split('\\"\\"')[18]: ae.split('\\"\\"')[0]})
return lst
class getXHRVideo16:
def __init__(self, JSESSIONID: str):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Cookie": JSESSIONID + """Direct Planning Tree '{"state":{"sortField":"s:NAME", "sortDir":"s:ASC", "expanded":["s:-3","s:49","s:791"]}}'""", "X-GWT-Module-Base": "https://planif.esiee.fr/direct/gwtdirectplanning/", "X-GWT-Permutation": "84978C43E1DD9746A3991E03E83BCE38", "Content-Type": "text/x-gwt-rpc; charset=utf-8"}
self.rq = None
self.repH = {}
self.repT = ""
self.reqT = '7|0|20|https://planif.esiee.fr/direct/gwtdirectplanning/|BB468225DBC62C7786D92BE512B62089|com.adesoft.gwt.directplan.client.rpc.DirectPlanningServiceProxy|method4getChildren|J|java.lang.String/2004016611|com.adesoft.gwt.directplan.client.ui.tree.TreeResourceConfig/2234901663|{"175""true""3""-1""0""0""0""false"[2]{"ColorField""COLOR""LabelColor""255,255,255""false""false"{"StringField""NAME""LabelName""vidéo capacité 16""false""false""01-Enseignement.03-Vidéo.vidéo capacité 16""classroom""3""2"[0]|[I/2970817851|java.util.LinkedHashMap/3008245022|COLOR|com.adesoft.gwt.core.client.rpc.config.OutputField/870745015|LabelColor||com.adesoft.gwt.core.client.rpc.config.FieldType/3992110146|NAME|LabelName|java.util.ArrayList/4159755760|com.extjs.gxt.ui.client.data.SortInfo/1143517771|com.extjs.gxt.ui.client.Style$SortDir/640452531|1|2|3|4|3|5|6|7|ZQrwXtk|8|7|0|9|2|-1|-1|10|0|2|6|11|12|0|13|11|14|15|11|0|0|6|16|12|0|17|16|14|15|4|0|0|18|0|18|0|19|20|1|16|18|0|'
def post(self):
self.rq = s.sess.post("https://planif.esiee.fr/direct/gwtdirectplanning/DirectPlanningServiceProxy", headers=self.headers, data=self.reqT)
self.repH, self.repT = (self.rq.headers, self.rq.text)
#print(self.repH, "\n\n\n\n", self.repT)
roomsLst = self.repT.replace("]{\\\"Color", "Color").split("]{\\\"")[1:]
lst = []
for ae in roomsLst:
lst.append({ae.split('\\"\\"')[18]: ae.split('\\"\\"')[0]})
return lst
class getXHRVideo28:
def __init__(self, JSESSIONID: str):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Cookie": JSESSIONID + """Direct Planning Tree '{"state":{"sortField":"s:NAME", "sortDir":"s:ASC", "expanded":["s:-3","s:49","s:2271"]}}'""", "X-GWT-Module-Base": "https://planif.esiee.fr/direct/gwtdirectplanning/", "X-GWT-Permutation": "84978C43E1DD9746A3991E03E83BCE38", "Content-Type": "text/x-gwt-rpc; charset=utf-8"}
self.rq = None
self.repH = {}
self.repT = ""
self.reqT = '7|0|20|https://planif.esiee.fr/direct/gwtdirectplanning/|BB468225DBC62C7786D92BE512B62089|com.adesoft.gwt.directplan.client.rpc.DirectPlanningServiceProxy|method4getChildren|J|java.lang.String/2004016611|com.adesoft.gwt.directplan.client.ui.tree.TreeResourceConfig/2234901663|{"3352""true""3""19""0""0""0""false"[2]{"ColorField""COLOR""LabelColor""255,255,255""false""false"{"StringField""NAME""LabelName""vidéo capacité 28""false""false""01-Enseignement.03-Vidéo.vidéo capacité 28""classroom""3""2"[0]|[I/2970817851|java.util.LinkedHashMap/3008245022|COLOR|com.adesoft.gwt.core.client.rpc.config.OutputField/870745015|LabelColor||com.adesoft.gwt.core.client.rpc.config.FieldType/3992110146|NAME|LabelName|java.util.ArrayList/4159755760|com.extjs.gxt.ui.client.data.SortInfo/1143517771|com.extjs.gxt.ui.client.Style$SortDir/640452531|1|2|3|4|3|5|6|7|ZQrwXtk|8|7|0|9|2|-1|-1|10|0|2|6|11|12|0|13|11|14|15|11|0|0|6|16|12|0|17|16|14|15|4|0|0|18|0|18|0|19|20|1|16|18|0|'
def post(self):
self.rq = s.sess.post("https://planif.esiee.fr/direct/gwtdirectplanning/DirectPlanningServiceProxy", headers=self.headers, data=self.reqT)
self.repH, self.repT = (self.rq.headers, self.rq.text)
#print(self.repH, "\n\n\n\n", self.repT)
roomsLst = self.repT.replace("]{\\\"Color", "Color").split("]{\\\"")[1:]
lst = []
for ae in roomsLst:
lst.append({ae.split('\\"\\"')[18]: ae.split('\\"\\"')[0]})
return lst
class getXHRVideo30:
def __init__(self, JSESSIONID: str):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Cookie": JSESSIONID + """Direct Planning Tree '{"state":{"sortField":"s:NAME", "sortDir":"s:ASC", "expanded":["s:-3","s:49","s:2271"]}}'""", "X-GWT-Module-Base": "https://planif.esiee.fr/direct/gwtdirectplanning/", "X-GWT-Permutation": "84978C43E1DD9746A3991E03E83BCE38", "Content-Type": "text/x-gwt-rpc; charset=utf-8"}
self.rq = None
self.repH = {}
self.repT = ""
self.reqT = '7|0|20|https://planif.esiee.fr/direct/gwtdirectplanning/|BB468225DBC62C7786D92BE512B62089|com.adesoft.gwt.directplan.client.rpc.DirectPlanningServiceProxy|method4getChildren|J|java.lang.String/2004016611|com.adesoft.gwt.directplan.client.ui.tree.TreeResourceConfig/2234901663|{"2271""true""3""9""0""0""0""false"[2]{"ColorField""COLOR""LabelColor""255,255,255""false""false"{"StringField""NAME""LabelName""vidéo capacité 30""false""false""01-Enseignement.03-Vidéo.vidéo capacité 30""classroom""3""2"[0]|[I/2970817851|java.util.LinkedHashMap/3008245022|COLOR|com.adesoft.gwt.core.client.rpc.config.OutputField/870745015|LabelColor||com.adesoft.gwt.core.client.rpc.config.FieldType/3992110146|NAME|LabelName|java.util.ArrayList/4159755760|com.extjs.gxt.ui.client.data.SortInfo/1143517771|com.extjs.gxt.ui.client.Style$SortDir/640452531|1|2|3|4|3|5|6|7|ZQrwXtk|8|7|0|9|2|-1|-1|10|0|2|6|11|12|0|13|11|14|15|11|0|0|6|16|12|0|17|16|14|15|4|0|0|18|0|18|0|19|20|1|16|18|0|'
def post(self):
self.rq = s.sess.post("https://planif.esiee.fr/direct/gwtdirectplanning/DirectPlanningServiceProxy", headers=self.headers, data=self.reqT)
self.repH, self.repT = (self.rq.headers, self.rq.text)
#print(self.repH, "\n\n\n\n", self.repT)
roomsLst = self.repT.replace("]{\\\"Color", "Color").split("]{\\\"")[1:]
lst = []
for ae in roomsLst:
lst.append({ae.split('\\"\\"')[18]: ae.split('\\"\\"')[0]})
return lst
class getXHRVideo32:
def __init__(self, JSESSIONID: str):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Cookie": JSESSIONID + """Direct Planning Tree '{"state":{"sortField":"s:NAME", "sortDir":"s:ASC", "expanded":["s:-3","s:49","s:2271"]}}'""", "X-GWT-Module-Base": "https://planif.esiee.fr/direct/gwtdirectplanning/", "X-GWT-Permutation": "84978C43E1DD9746A3991E03E83BCE38", "Content-Type": "text/x-gwt-rpc; charset=utf-8"}
self.rq = None
self.repH = {}
self.repT = ""
self.reqT = '7|0|20|https://planif.esiee.fr/direct/gwtdirectplanning/|BB468225DBC62C7786D92BE512B62089|com.adesoft.gwt.directplan.client.rpc.DirectPlanningServiceProxy|method4getChildren|J|java.lang.String/2004016611|com.adesoft.gwt.directplan.client.ui.tree.TreeResourceConfig/2234901663|{"2700""true""3""5""0""0""0""false"[2]{"ColorField""COLOR""LabelColor""255,255,255""false""false"{"StringField""NAME""LabelName""vidéo capacité 32""false""false""01-Enseignement.03-Vidéo.vidéo capacité 32""classroom""3""2"[0]|[I/2970817851|java.util.LinkedHashMap/3008245022|COLOR|com.adesoft.gwt.core.client.rpc.config.OutputField/870745015|LabelColor||com.adesoft.gwt.core.client.rpc.config.FieldType/3992110146|NAME|LabelName|java.util.ArrayList/4159755760|com.extjs.gxt.ui.client.data.SortInfo/1143517771|com.extjs.gxt.ui.client.Style$SortDir/640452531|1|2|3|4|3|5|6|7|ZQrwXtk|8|7|0|9|2|-1|-1|10|0|2|6|11|12|0|13|11|14|15|11|0|0|6|16|12|0|17|16|14|15|4|0|0|18|0|18|0|19|20|1|16|18|0|'
def post(self):
self.rq = s.sess.post("https://planif.esiee.fr/direct/gwtdirectplanning/DirectPlanningServiceProxy", headers=self.headers, data=self.reqT)
self.repH, self.repT = (self.rq.headers, self.rq.text)
#print(self.repH, "\n\n\n\n", self.repT)
roomsLst = self.repT.replace("]{\\\"Color", "Color").split("]{\\\"")[1:]
lst = []
for ae in roomsLst:
lst.append({ae.split('\\"\\"')[18]: ae.split('\\"\\"')[0]})
return lst
class getXHRVideo40:
def __init__(self, JSESSIONID: str):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Cookie": JSESSIONID + """Direct Planning Tree '{"state":{"sortField":"s:NAME", "sortDir":"s:ASC", "expanded":["s:-3","s:49","s:2271"]}}'""", "X-GWT-Module-Base": "https://planif.esiee.fr/direct/gwtdirectplanning/", "X-GWT-Permutation": "84978C43E1DD9746A3991E03E83BCE38", "Content-Type": "text/x-gwt-rpc; charset=utf-8"}
self.rq = None
self.repH = {}
self.repT = "" # ZQrwXtk
self.reqT = '7|0|20|https://planif.esiee.fr/direct/gwtdirectplanning/|BB468225DBC62C7786D92BE512B62089|com.adesoft.gwt.directplan.client.rpc.DirectPlanningServiceProxy|method4getChildren|J|java.lang.String/2004016611|com.adesoft.gwt.directplan.client.ui.tree.TreeResourceConfig/2234901663|{"5819""true""3""1""0""0""0""false"[2]{"ColorField""COLOR""LabelColor""255,255,255""false""false"{"StringField""NAME""LabelName""vidéo capacité 40""false""false""01-Enseignement.03-Vidéo.vidéo capacité 40""classroom""3""2"[0]|[I/2970817851|java.util.LinkedHashMap/3008245022|COLOR|com.adesoft.gwt.core.client.rpc.config.OutputField/870745015|LabelColor||com.adesoft.gwt.core.client.rpc.config.FieldType/3992110146|NAME|LabelName|java.util.ArrayList/4159755760|com.extjs.gxt.ui.client.data.SortInfo/1143517771|com.extjs.gxt.ui.client.Style$SortDir/640452531|1|2|3|4|3|5|6|7|ZQrwXtk|8|7|0|9|2|-1|-1|10|0|2|6|11|12|0|13|11|14|15|11|0|0|6|16|12|0|17|16|14|15|4|0|0|18|0|18|0|19|20|1|16|18|0|'
def post(self):
self.rq = s.sess.post("https://planif.esiee.fr/direct/gwtdirectplanning/DirectPlanningServiceProxy", headers=self.headers, data=self.reqT)
self.repH, self.repT = (self.rq.headers, self.rq.text)
#print(self.repH, "\n\n\n\n", self.repT)
roomsLst = self.repT.replace("]{\\\"Color", "Color").split("]{\\\"")[1:]
lst = []
for ae in roomsLst:
lst.append({ae.split('\\"\\"')[18]: ae.split('\\"\\"')[0]})
return lst
class getXHRVideo48:
def __init__(self, JSESSIONID: str):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Cookie": JSESSIONID + """Direct Planning Tree '{"state":{"sortField":"s:NAME", "sortDir":"s:ASC", "expanded":["s:-3","s:49","s:2271"]}}'""", "X-GWT-Module-Base": "https://planif.esiee.fr/direct/gwtdirectplanning/", "X-GWT-Permutation": "84978C43E1DD9746A3991E03E83BCE38", "Content-Type": "text/x-gwt-rpc; charset=utf-8"}
self.rq = None
self.repH = {}
self.repT = "" # ZQrwXtk
self.reqT = '7|0|20|https://planif.esiee.fr/direct/gwtdirectplanning/|BB468225DBC62C7786D92BE512B62089|com.adesoft.gwt.directplan.client.rpc.DirectPlanningServiceProxy|method4getChildren|J|java.lang.String/2004016611|com.adesoft.gwt.directplan.client.ui.tree.TreeResourceConfig/2234901663|{"184""true""3""3""0""0""0""false"[2]{"ColorField""COLOR""LabelColor""255,255,255""false""false"{"StringField""NAME""LabelName""vidéo capacité 48""false""false""01-Enseignement.03-Vidéo.vidéo capacité 48""classroom""3""2"[0]|[I/2970817851|java.util.LinkedHashMap/3008245022|COLOR|com.adesoft.gwt.core.client.rpc.config.OutputField/870745015|LabelColor||com.adesoft.gwt.core.client.rpc.config.FieldType/3992110146|NAME|LabelName|java.util.ArrayList/4159755760|com.extjs.gxt.ui.client.data.SortInfo/1143517771|com.extjs.gxt.ui.client.Style$SortDir/640452531|1|2|3|4|3|5|6|7|ZQrwXtk|8|7|0|9|2|-1|-1|10|0|2|6|11|12|0|13|11|14|15|11|0|0|6|16|12|0|17|16|14|15|4|0|0|18|0|18|0|19|20|1|16|18|0|'
def post(self):
self.rq = s.sess.post("https://planif.esiee.fr/direct/gwtdirectplanning/DirectPlanningServiceProxy", headers=self.headers, data=self.reqT)
self.repH, self.repT = (self.rq.headers, self.rq.text)
#print(self.repH, "\n\n\n\n", self.repT)
roomsLst = self.repT.replace("]{\\\"Color", "Color").split("]{\\\"")[1:]
lst = []
for ae in roomsLst:
lst.append({ae.split('\\"\\"')[18]: ae.split('\\"\\"')[0]})
return lst
class getXHRVideo52:
def __init__(self, JSESSIONID: str):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Cookie": JSESSIONID + """Direct Planning Tree '{"state":{"sortField":"s:NAME", "sortDir":"s:ASC", "expanded":["s:-3","s:49","s:2271"]}}'""", "X-GWT-Module-Base": "https://planif.esiee.fr/direct/gwtdirectplanning/", "X-GWT-Permutation": "84978C43E1DD9746A3991E03E83BCE38", "Content-Type": "text/x-gwt-rpc; charset=utf-8"}
self.rq = None
self.repH = {}
self.repT = "" # ZQrwXtk
self.reqT = '7|0|12|https://planif.esiee.fr/direct/gwtdirectplanning/|A0AD6035033F296E20376B66C2082700|com.adesoft.gwt.directplan.client.rpc.DirectPlanningPlanningServiceProxy|method8getTimetable|J|com.adesoft.gwt.core.client.rpc.data.planning.PlanningSelection/886937684|I|Z|java.util.List|java.util.ArrayList/4159755760|java.lang.Integer/3438268394|Cumul|1|2|3|4|6|5|6|7|7|8|9|ZQrwXtk|6|10|7|11|0|11|1|11|2|11|3|11|4|11|5|11|6|25|12|0|10|1|11|184|10|1|11|22|1235|197|1|10|0|'
def post(self):
self.rq = s.sess.post("https://planif.esiee.fr/direct/gwtdirectplanning/DirectPlanningServiceProxy", headers=self.headers, data=self.reqT)
self.repH, self.repT = (self.rq.headers, self.rq.text)
#print(self.repH, "\n\n\n\n", self.repT)
roomsLst = self.repT.replace("]{\\\"Color", "Color").split("]{\\\"")[1:]
lst = []
for ae in roomsLst:
lst.append({ae.split('\\"\\"')[18]: ae.split('\\"\\"')[0]})
return lst
class getXHRVideo72:
def __init__(self, JSESSIONID: str):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Cookie": JSESSIONID + """Direct Planning Tree '{"state":{"sortField":"s:NAME", "sortDir":"s:ASC", "expanded":["s:-3","s:49","s:2271"]}}'""", "X-GWT-Module-Base": "https://planif.esiee.fr/direct/gwtdirectplanning/", "X-GWT-Permutation": "84978C43E1DD9746A3991E03E83BCE38", "Content-Type": "text/x-gwt-rpc; charset=utf-8"}
self.rq = None
self.repH = {}
self.repT = "" # ZQrwXtk
self.reqT = '7|0|20|https://planif.esiee.fr/direct/gwtdirectplanning/|BB468225DBC62C7786D92BE512B62089|com.adesoft.gwt.directplan.client.rpc.DirectPlanningServiceProxy|method4getChildren|J|java.lang.String/2004016611|com.adesoft.gwt.directplan.client.ui.tree.TreeResourceConfig/2234901663|{"3357""true""3""8""0""0""0""false"[2]{"ColorField""COLOR""LabelColor""255,255,255""false""false"{"StringField""NAME""LabelName""vidéo capacité 72""false""false""01-Enseignement.03-Vidéo.vidéo capacité 72""classroom""3""2"[0]|[I/2970817851|java.util.LinkedHashMap/3008245022|COLOR|com.adesoft.gwt.core.client.rpc.config.OutputField/870745015|LabelColor||com.adesoft.gwt.core.client.rpc.config.FieldType/3992110146|NAME|LabelName|java.util.ArrayList/4159755760|com.extjs.gxt.ui.client.data.SortInfo/1143517771|com.extjs.gxt.ui.client.Style$SortDir/640452531|1|2|3|4|3|5|6|7|ZQrwXtk|8|7|0|9|2|-1|-1|10|0|2|6|11|12|0|13|11|14|15|11|0|0|6|16|12|0|17|16|14|15|4|0|0|18|0|18|0|19|20|1|16|18|0|'
def post(self):
self.rq = s.sess.post("https://planif.esiee.fr/direct/gwtdirectplanning/DirectPlanningServiceProxy", headers=self.headers, data=self.reqT)
self.repH, self.repT = (self.rq.headers, self.rq.text)
#print(self.repH, "\n\n\n\n", self.repT)
roomsLst = self.repT.replace("]{\\\"Color", "Color").split("]{\\\"")[1:]
lst = []
for ae in roomsLst:
lst.append({ae.split('\\"\\"')[18]: ae.split('\\"\\"')[0]})
return lst
class getXHRVideoNSelect01:
def __init__(self, JSESSIONID: str, roomId: str, week: int, numPeriod: int):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Cookie": JSESSIONID + """Direct Planning Tree '{"state":{"sortField":"s:NAME", "sortDir":"s:ASC", "expanded":["s:-3","s:49","s:2271"]}}'""", "X-GWT-Module-Base": "https://planif.esiee.fr/direct/gwtdirectplanning/", "X-GWT-Permutation": "84978C43E1DD9746A3991E03E83BCE38", "Content-Type": "text/x-gwt-rpc; charset=utf-8"}
self.rq = None
self.repH = {}
self.repT = ""
self.reqT = f'7|0|12|https://planif.esiee.fr/direct/gwtdirectplanning/|A0AD6035033F296E20376B66C2082700|com.adesoft.gwt.directplan.client.rpc.DirectPlanningPlanningServiceProxy|method5getLegends|J|com.adesoft.gwt.core.client.rpc.data.planning.PlanningSelection/886937684|com.extjs.gxt.ui.client.data.SortInfo/1143517771|java.util.ArrayList/4159755760|java.lang.Integer/3438268394|Cumul|com.extjs.gxt.ui.client.Style$SortDir/640452531|NAME|1|2|3|4|3|5|6|7|ZQrwXtk|6|8|7|9|0|9|1|9|2|9|3|9|4|9|5|9|6|25|10|0|8|1|9|{roomId}|8|1|9|{week}|7|11|1|{numPeriod}|'
def post(self):
self.rq = s.sess.post("https://planif.esiee.fr/direct/gwtdirectplanning/DirectPlanningPlanningServiceProxy", headers=self.headers, data=self.reqT)
self.repH, self.repT = (self.rq.headers, self.rq.text)
#print(self.repH, "\n\n\n\n", self.repT)
class getXHRVideoNSelect03:
def __init__(self, JSESSIONID: str, roomId: str, week: int, numPeriod: int):
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", "Cookie": JSESSIONID + """Direct Planning Tree '{"state":{"sortField":"s:NAME", "sortDir":"s:ASC", "expanded":["s:-3","s:49","s:2271"]}}'""", "X-GWT-Module-Base": "https://planif.esiee.fr/direct/gwtdirectplanning/", "X-GWT-Permutation": "84978C43E1DD9746A3991E03E83BCE38", "Content-Type": "text/x-gwt-rpc; charset=utf-8"}
self.rq = None
self.repH = {}
self.repT = ""
self.reqT = f'7|0|12|https://planif.esiee.fr/direct/gwtdirectplanning/|A0AD6035033F296E20376B66C2082700|com.adesoft.gwt.directplan.client.rpc.DirectPlanningPlanningServiceProxy|method8getTimetable|J|com.adesoft.gwt.core.client.rpc.data.planning.PlanningSelection/886937684|I|Z|java.util.List|java.util.ArrayList/4159755760|java.lang.Integer/3438268394|Cumul|1|2|3|4|6|5|6|7|7|8|9|ZQrwXtk|6|10|7|11|0|11|1|11|2|11|3|11|4|11|5|11|6|25|{numPeriod}|0|10|1|11|{roomId}|10|1|11|{week}|1235|185|1|10|0|' #
@staticmethod
def ProcessDay(tab: list):
lst = []
indDays = []
for i in range(len(tab) - 1):
e = tab[i]
if (175 <= e <= 178) and e != tab[i+1] < 140:
co = tab[i-2:i+3]
lst.append(co)
indDay = co[1] // 176
indDays.append(indDay)
lst.reverse()
indDays.reverse()
return indDays
@staticmethod
def ProcessWhereAreBusy(aaa: str, roomName: str):
def getTheDayOfWeek():
dtn = datetime.now()
dtn = datetime(dtn.year, dtn.month, dtn.day, 0, 0, 0, 0)
dt1 = datetime(2024, 12, 30, 0, 0, 0, 0)
return ((dtn - dt1).days) % 7
dictInfos = {"capacity": {"0110": 116, "0160": 116, "0210": 156, "0260": 156}}
roomNum = "/"
capacity = -1
if roomName.count(".") >= 2:
roomNum = roomName.split(".")[-1]
if "Amphis" in roomName:
capacity = dictInfos["capacity"].get(roomNum)
else:
try:
capacity = int(roomName.split(".")[-2].split(" ")[-1])
except:
capacity = -1
t = [int(x) for x in aaa.split("//OK[")[1].split(",[")[0].split(",")]
lst = []
cons = 2
daysTab = ["Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"]
dictRoom = {roomNum: {"capacity": capacity, "busy": [], "date": ""}}
for i in range(len(t) - 1):
e = t[i]
if (174 <= e <= 178) and e != t[i+1] < 140:
co = t[i-2:i+4]
indDay = co[1] // 176
if indDay == getTheDayOfWeek():
dictRoom[roomNum]["date"] = daysTab[indDay] + datetime.now().strftime(" %d/%m/%Y")
dateStart = datetime.fromtimestamp(((co[0] / 12.75 + 7.5) + 0.02) * 3600, timezone.utc).strftime("%Hh%M")[:-1] + "0"
dateEnd = datetime.fromtimestamp(((co[0] / 12.75 + 7.5 + co[3] / 12.75)) * 3600, timezone.utc).strftime("%Hh%M")[:-1] + "0"
dateStart = dateStart.replace("h20", "h30")
dateEnd = dateEnd.replace("h20", "h30")
if "50" in dateStart:
h, m = dateStart.split("h")
dateStart = str(int(h) + 1) + "h00"
if "50" in dateEnd:
h, m = dateEnd.split("h")
dateEnd = str(int(h) + 1) + "h00"
lst.append(daysTab[indDay] + datetime.now().strftime(" %d/%m/%Y room: ") + roomNum + " (capacity: " + str(capacity) + ") " + dateStart + " -> " + dateEnd)
hS, mS = dateStart.split("h")
hE, mE = dateEnd.split("h")
dictRoom[roomNum]["busy"].append([(int(hS), int(mS)), (int(hE), int(mE))])
lst.reverse()
#print(roomNum, capacity, lst)
busy = dictRoom[roomNum]["busy"]
busy.sort()
dictRoom[roomNum]["busy"] = busy
try:
boardKinds = {0: "craie", 1: "blanc", 2: "mixte", None: "/"}
dictBoard = {'0110': 0, '0160': 0, '0210': 0, '0260': 0, '2108': 1, '2101': 1, '2102': 1, '2103': 1, '2104': 1, '2107': 1, '0112': 1, '0113': 1, '0114': 1, '0115': 1, '1305': 0, '1307': 0, '1401': 0, '1403': 0, '1405': 0, '1407': 0, '2205': 0, '2207': 0, '2209': 0, '3051': 2, '3053': 2, '3107': 1, '3201': 0, '3205': 0, '3305': 0, '0163': 1, '0164': 1, '0165': 1, '1103': 1, '1105': 1, '4401': 0, '4403': 0, '5405': 1, '1309': 0, '1409': 1, '3101': 1, '3103': 2, '3105': 2, '1456': 1, '1051': 0, '1452': 1, '1201+': 1, '1301+': 1, '2001+': 1, '2201+': 1, '3207+': 2, '3307+': 2, '4201+': 0, '4307+': 0}
dictRoom[roomNum]["board"] = boardKinds[dictBoard.get(roomNum)]
except:
pass
return dictRoom#lst
return {roomNum: {"capacity": capacity, "busy": -1, "date": "/"}}
@staticmethod
def ProcessSubjects(aaa: str):
sv = aaa.split(",[")[1].split(",")[5:-2]
lst = []
mustCreate = True
for i in range(len(sv)):
if mustCreate:
lst.append("")
mustCreate = False
a = re.search(r'\b(1[0-2]|0?[1-9])h[0-5][0-9]\b', sv[i])
if a != None:
mustCreate = True
lst[-1] += sv[i].replace('"', '') + "\n"
return lst
def post(self, roomName: str):
self.rq = s.sess.post("https://planif.esiee.fr/direct/gwtdirectplanning/DirectPlanningPlanningServiceProxy", headers=self.headers, data=self.reqT)
self.repH, self.repT = (self.rq.headers, self.rq.text)
# print(self.repH, "\n\n\n\n", self.repT)
return self.ProcessWhereAreBusy(self.repT, roomName)
def getTheCurrentWeek():
dtn = datetime.now()
dtn = datetime(dtn.year, dtn.month, dtn.day, 0, 0, 0, 0)
dt1 = datetime(2024, 12, 30, 0, 0, 0, 0)
weekN = (dtn - dt1).days // 7
normalWeek = (weekN % 52) + 19
if normalWeek >= 52:
normalWeek -= 59
return normalWeek
class AdeRequest:
def __init__(self):
self.dictRooms = None
self.yWeek = getTheCurrentWeek()
self.numPeriod = 12
dt = datetime.now()
if dt.month >= 9:
self.numPeriod = (dt.year - 2024) + 12
else:
self.numPeriod = (dt.year - 2025) + 12
def getRoomsInfos(self):
s = getJSESSIONID()
cookie = s.getCookie()
print(cookie)
cookie = cookie.replace(" Path=/direct; Secure", "")
x1 = getXHR1(cookie)
x1.post()
x4 = getXHR4(cookie)
x4.post()
x5 = getXHR5(cookie)
d2d2 = x5.post()
num = self.numPeriod #input(str(d2d2) + "\n>>> Choose one Period with index (ex: 2024-2025: 12) >/ ")
x7 = getXHR7(cookie, num)
x7.post()
yWeek = self.yWeek # int(input("Numero de semaine (ex: semaine du 20 janvier au 26 -> 4) >/ "))
dictRooms = {}
xAmphis = getXHRAmphis(cookie)
lstAmphis = xAmphis.post()
for e in lstAmphis:
ind1 = list(e.items())[0][1]
xRoomxyS1 = getXHRVideoNSelect01(cookie, ind1, yWeek, num)
xRoomxyS1.post()
xRoomxyS3 = getXHRVideoNSelect03(cookie, ind1, yWeek, num)
res = xRoomxyS3.post(list(e)[0])
for (k, v) in res.items():
if "old" not in k:
dictRooms[k] = v
xRoomsVideo16 = getXHRVideo16(cookie)
lst16 = xRoomsVideo16.post()
for e in lst16:
ind1 = list(e.items())[0][1]
xRoomxyS1 = getXHRVideoNSelect01(cookie, ind1, yWeek, num)
xRoomxyS1.post()
xRoomxyS3 = getXHRVideoNSelect03(cookie, ind1, yWeek, num)
res = xRoomxyS3.post(list(e)[0])
for (k, v) in res.items():
if "old" not in k:
dictRooms[k] = v
xRoom28 = getXHRVideo28(cookie)
lst28 = xRoom28.post()
for e in lst28:
ind1 = list(e.items())[0][1]
xRoomxyS1 = getXHRVideoNSelect01(cookie, ind1, yWeek, num)
xRoomxyS1.post()
xRoomxyS3 = getXHRVideoNSelect03(cookie, ind1, yWeek, num)
res = xRoomxyS3.post(list(e)[0])
for (k, v) in res.items():
if "old" not in k:
dictRooms[k] = v
xRoom30 = getXHRVideo30(cookie)
lst30 = xRoom30.post()
for e in lst30:
ind1 = list(e.items())[0][1]
xRoomxyS1 = getXHRVideoNSelect01(cookie, ind1, yWeek, num)
xRoomxyS1.post()
xRoomxyS3 = getXHRVideoNSelect03(cookie, ind1, yWeek, num)
res = xRoomxyS3.post(list(e)[0])
for (k, v) in res.items():
if "old" not in k:
dictRooms[k] = v
xRoom32 = getXHRVideo32(cookie)
lst32 = xRoom32.post()
for e in lst32:
ind1 = list(e.items())[0][1]
xRoomxyS1 = getXHRVideoNSelect01(cookie, ind1, yWeek, num)
xRoomxyS1.post()
xRoomxyS3 = getXHRVideoNSelect03(cookie, ind1, yWeek, num)
res = xRoomxyS3.post(list(e)[0])
for (k, v) in res.items():
if "old" not in k:
dictRooms[k] = v
xRoom40 = getXHRVideo40(cookie)
lst40 = xRoom40.post()
for e in lst40:
ind1 = list(e.items())[0][1]
xRoomxyS1 = getXHRVideoNSelect01(cookie, ind1, yWeek, num)
xRoomxyS1.post()
xRoomxyS3 = getXHRVideoNSelect03(cookie, ind1, yWeek, num)
res = xRoomxyS3.post(list(e)[0])
for (k, v) in res.items():
if "old" not in k:
dictRooms[k] = v
xRoom48 = getXHRVideo48(cookie)
lst48 = xRoom48.post()
for e in lst48:
ind1 = list(e.items())[0][1]
xRoomxyS1 = getXHRVideoNSelect01(cookie, ind1, yWeek, num)
xRoomxyS1.post()
xRoomxyS3 = getXHRVideoNSelect03(cookie, ind1, yWeek, num)
res = xRoomxyS3.post(list(e)[0])
for (k, v) in res.items():
if "old" not in k:
dictRooms[k] = v
xRoom72 = getXHRVideo72(cookie)
lst72 = xRoom72.post()
for e in lst72:
indVideo72 = list(e.items())[0][1]
xRoom72S1 = getXHRVideoNSelect01(cookie, indVideo72, yWeek, num)
xRoom72S1.post()
xRoom72S3 = getXHRVideoNSelect03(cookie, indVideo72, yWeek, num)
res = xRoom72S3.post(list(e)[0])
for (k, v) in res.items():
if "old" not in k:
dictRooms[k] = v
self.dictRooms = dictRooms
return self.dictRooms
def getCurrentsFreeRooms(self):
if self.dictRooms == None:
self.dictRooms = self.getRoomsInfos()
d = self.dictRooms.copy()
dtn = datetime.now()
free = {}
for (k, v) in d.items():
busy = v["busy"]
if type(busy) == list:
for i in range(len(busy)):
ts, te = busy[i]
if ((dtn.hour * 60) + dtn.minute) < ((ts[0] * 60) + ts[1]):
v.update({"isFree": True, "freeUntil": str(ts[0]).zfill(2) + "h" + str(ts[1]).zfill(2)})
free[k] = v
break
elif ((dtn.hour * 60) + dtn.minute) < ((te[0] * 60) + te[1]):
break
elif i == (len(busy) - 1):
v.update({"isFree": True, "freeUntil": "demain"})
free[k] = v
if busy == []:
v.update({"isFree": True, "freeUntil": "demain"})
free[k] = v
return free
### Exemple d'utilisation