summaryrefslogtreecommitdiffstats
path: root/skripti/poprbot.py
blob: c10fdbf8ad62cc5f35b87b58cb0581b508825d92 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/usr/bin/python3
from sys import argv
from os import getenv
import requests
import json
from datetime import datetime
from time import sleep
from bs4 import BeautifulSoup
popr = "https://popr.uni-lj.si/"
def prijavi_se(s, event, slotid):
	form = BeautifulSoup(s.get(popr + "student/events.html?page=booking&id=14564&slotId=44840&bookingAction=BOOK").text, features="lxml").find("form")
	dejta = "_eventId_book=Submit"
	for inp in form.findAll("input"):
		try:
			dejta += "&" + inp.attrs["name"] + "=" + inp.attrs["value"]
		except KeyError:
			pass
	s.post(popr + "student/events.html", data=dejta, headers={"Content-Type": "application/x-www-form-urlencoded"})
def get_event(s, event):
	jwt = s.get(popr + "api/user/token/refresh").text
	s.headers.update({"Authorization": "Bearer " + jwt});
	return json.loads(s.get(popr + "ext/svc/events-api-0-0/events/user/event/slots/" + event + "?locale=en").text)[0];
def main():
	if len(argv) < 2:
		print("Prvi argument naj bo numerični ID dogodka.")
		return
	event = argv[1]
	slot = None
	if len(argv) >= 3:
		slot = int(argv[2])
	if getenv("JSESSIONID") == None:
		print("Okoljska spremenljivka JSESSIONID naj vsebuje vrednost istoimenskega piškotka.")
		return
	s = requests.Session()
	s.cookies.set("JSESSIONID", getenv("JSESSIONID"));
	ev = get_event(s, event)
	slotid = ev["slots"][0]["id"]
	if len(ev["slots"]) > 1 and slot == None:
		print("Za izbrani dogodek obstaja več slotov. V drugi argument bi morali napisati številko slota, začenši z 0. Sloti na voljo:");
		for sl in range(len(ev["slots"])):
			print(str(sl) + "\t" + ev["slots"][sl]["start"] + "-" + ev["slots"][sl]["end"] + "\t" + ev["slots"][sl]["location"]["name"])
		return
	if slot != None:
		slotid = ev["slots"][slot]["id"]
	else:
		slot = 0
	if "message" in ev["slots"][slot].keys() and "Booking not yet open" in ev["slots"][slot]["message"]:
		ura = ev["slots"][slot]["message"].split(" ")[-1]
		datum = ev["slots"][slot]["message"].split(" ")[-3]
		kdaj = datetime(int(datum.split("-")[2]), ["Nul", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"].index(datum.split("-")[1]), int(datum.split("-")[0]), int(ura.split(":")[0]), int(ura.split(":")[1]))
		print("Prijave na dogodek se odpro " + kdaj.ctime() + ". Do takrat čakam, nato pa bom snajpal prijavo.")
		while True:
			if (kdaj-datetime.now()).total_seconds() < 190:
				break
			ev2 = get_event(s, event);
			if ev2 != ev:
				print("NAPAKA! Dogodek se je spremenil!")
				return
			sleep(180)
		sleep((kdaj-datetime.now()).total_seconds()-3)
		while True:
			prijavi_se(s, event, slotid)
			if (kdaj-datetime.now()).total_seconds() < -3:
				ev = get_event(s, event)
				if ev["slots"][slot]["booked"] == True:
					print("Prijavljeni ste.")
					return
				else:
					print("NAPAKA! Niste prijavljeni.")
					return
	prijavi_se(s, event, slotid)
	ev = get_event(s, event)
	if ev["slots"][slot]["booked"] == True:
		print("Prijavljeni ste.")
	else:
		print("NAPAKA! Niste prijavljeni.")
main()