implement new mod to make a reserve on e-license
This commit is contained in:
81
mods/elicense.py
Normal file
81
mods/elicense.py
Normal file
@@ -0,0 +1,81 @@
|
||||
import logging
|
||||
import json
|
||||
import requests
|
||||
|
||||
from html.parser import HTMLParser
|
||||
|
||||
|
||||
def init(CONFIG, logger):
|
||||
logger.setLevel(logging.DEBUG)
|
||||
return Mod(CONFIG, logger)
|
||||
|
||||
|
||||
class Mod:
|
||||
def __init__(self, CONFIG, logging):
|
||||
self.URL = "https://www.e-license.jp/el25/pc/"
|
||||
self.CONFIG = CONFIG
|
||||
|
||||
self.logging = logging
|
||||
self.targets = []
|
||||
|
||||
self.ss = self.authenticate()
|
||||
|
||||
def cycle(self):
|
||||
res = self.ss.post(
|
||||
url = self.URL+"p04a.action",
|
||||
data = {
|
||||
"b.processCd": "A",
|
||||
"b.kamokuCd" : 0,
|
||||
"b.page" : 1,
|
||||
"b.schoolCd" : self.CONFIG["school"],
|
||||
})
|
||||
res.encoding = "shift_jis"
|
||||
|
||||
parser = ReservationListParser()
|
||||
parser.feed(res.text)
|
||||
|
||||
return
|
||||
|
||||
def watch(self, date, slots):
|
||||
self.logging.debug("watch request accepted: {} {}".format(+date+slots))
|
||||
self.targets.append((date, slots))
|
||||
|
||||
def authenticate(self):
|
||||
ss = requests.Session()
|
||||
try:
|
||||
res = ss.post(
|
||||
url = self.URL+"p01a.action",
|
||||
data = {
|
||||
"b.studentId" : self.CONFIG["username"],
|
||||
"b.password" : self.CONFIG["password"],
|
||||
"b.schoolCd" : self.CONFIG["school"],
|
||||
"b.processCd" : "",
|
||||
"b.kamokuCd" : "",
|
||||
"method:doLogin" : "ログイン".encode("shift_jis"),
|
||||
})
|
||||
self.logging.info("authenticated")
|
||||
return ss
|
||||
except Exception as e:
|
||||
self.logging.error("authentication failure ({})".format(e))
|
||||
return None
|
||||
|
||||
|
||||
class ReservationListParser(HTMLParser):
|
||||
path = []
|
||||
|
||||
def handle_starttag(self, tag, attrs):
|
||||
self.path.append(tag)
|
||||
|
||||
c = [x[1] for x in attrs if x[0] == "class"]
|
||||
if len(c) == 0:
|
||||
return
|
||||
|
||||
if tag == "td":
|
||||
print(c)
|
||||
return
|
||||
|
||||
def handle_data(self, data):
|
||||
return
|
||||
|
||||
def handle_endtag(self, tag):
|
||||
self.path.pop()
|
Reference in New Issue
Block a user