hb-impf
This commit is contained in:
		
							parent
							
								
									dde9fb3141
								
							
						
					
					
						commit
						fbced3ff04
					
				| 
						 | 
					@ -0,0 +1,99 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env python3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import requests
 | 
				
			||||||
 | 
					import hashlib
 | 
				
			||||||
 | 
					import re
 | 
				
			||||||
 | 
					from json import JSONDecoder
 | 
				
			||||||
 | 
					from bs4 import BeautifulSoup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import asyncio
 | 
				
			||||||
 | 
					import logging
 | 
				
			||||||
 | 
					from slixmpp import ClientXMPP, JID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					currentHTMLHash = "268482119524892ebf8a1efa6c2d066e08a4d7fa42d1d703cb00c25f1ef96c5b"
 | 
				
			||||||
 | 
					currentJSHash = "96e0c20d1da2808dcb76a3e6824441fb377fbc533b4c240f811ff17abb8178b9"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jsValues = ['de', 'en', 'hb', 'bhv', 'none', 'jj', 'az']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					client = ClientXMPP("account@chat.sum7.eu", "PASSWORD")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					listSubscriber = [
 | 
				
			||||||
 | 
					    { "jid": JID("genofire@chat.sum7.eu"),
 | 
				
			||||||
 | 
					        "data": {
 | 
				
			||||||
 | 
					            "dateOfBirth":"1970-01-02",
 | 
				
			||||||
 | 
					            "email":"a@example.org",
 | 
				
			||||||
 | 
					            "repeatEmail":"a@example.org",
 | 
				
			||||||
 | 
					            "firstName":"Geno",
 | 
				
			||||||
 | 
					            "lastName":"Fire",
 | 
				
			||||||
 | 
					            "location":"hb",
 | 
				
			||||||
 | 
					            "zip":"28000"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {"jid": JID("genofire@meckerspace.de")
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def checkHTML(notify = print, jsFile = print):
 | 
				
			||||||
 | 
					    res = requests.get("https://impfzentrum.bremen.de/")
 | 
				
			||||||
 | 
					    hashV = hashlib.sha256(res.text.encode()).hexdigest()
 | 
				
			||||||
 | 
					    if hashV != currentHTMLHash:
 | 
				
			||||||
 | 
					        notify("new index.html found with hash {}".format(hashV))
 | 
				
			||||||
 | 
					    soup = BeautifulSoup(res.text, 'html.parser')
 | 
				
			||||||
 | 
					    for s in soup.find_all('script'):
 | 
				
			||||||
 | 
					        jsFile(s.get("src"), notify)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def checkJS(file, notify = print):
 | 
				
			||||||
 | 
					    res = requests.get("https://impfzentrum.bremen.de/"+file)
 | 
				
			||||||
 | 
					    hashV = hashlib.sha256(res.text.encode()).hexdigest()
 | 
				
			||||||
 | 
					    if hashV != currentJSHash:
 | 
				
			||||||
 | 
					        notify("new js with path {} and hash {} found".format(file, hashV))
 | 
				
			||||||
 | 
					    p = re.findall(r".?value.?:\s*\"(.{1,5})\"", res.text, re.M)
 | 
				
			||||||
 | 
					    newP = [x for x in p if x not in jsValues]
 | 
				
			||||||
 | 
					    if len(newP) == 1 :
 | 
				
			||||||
 | 
					       handleVac(newP[0], notify)
 | 
				
			||||||
 | 
					    elif len(newP) > 1:
 | 
				
			||||||
 | 
					       notify("error on finding new vacation {} - please go yourself to https://impfzentrum.bremen.de/registration/new", p)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def handleVac(v, notify = print):
 | 
				
			||||||
 | 
					    notify("new vacation is {}".format(v))
 | 
				
			||||||
 | 
					    for req in listSubscriber:
 | 
				
			||||||
 | 
					        if "data" not in req:
 | 
				
			||||||
 | 
					            continue
 | 
				
			||||||
 | 
					        data = req["data"]
 | 
				
			||||||
 | 
					        data["preference"] = v
 | 
				
			||||||
 | 
					        res = requests.post("https://api.schedule-bremen.dgshost.de/api/frontend/registration", data)
 | 
				
			||||||
 | 
					        notify("try of registration - statuscode {}, if correct result should be curly brackets and statuscode 201 else please go yourself to https://impfzentrum.bremen.de/registration/new: {}".format(res.status_code, res.text), jids=[req["jid"]])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def notify(text, jids=[x["jid"] for x in listSubscriber]):
 | 
				
			||||||
 | 
					    global client
 | 
				
			||||||
 | 
					    for jid in jids:
 | 
				
			||||||
 | 
					        #print("{}: {}".format(jid, text))
 | 
				
			||||||
 | 
					        client.send_message(jid, text, mtype="chat")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def session_start(event):
 | 
				
			||||||
 | 
					    global client
 | 
				
			||||||
 | 
					    client.send_presence()
 | 
				
			||||||
 | 
					    client.get_roster()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					    logging.basicConfig(level=logging.DEBUG,
 | 
				
			||||||
 | 
					                        format='%(levelname)-8s %(message)s')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    client.add_event_handler("session_start", session_start)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    client.connect()
 | 
				
			||||||
 | 
					    client.process(timeout=1)
 | 
				
			||||||
 | 
					    notify("startup hb vecation bot", jids=[listSubscriber[0]["jid"]])
 | 
				
			||||||
 | 
					    while True:
 | 
				
			||||||
 | 
					        checkHTML(jsFile = checkJS, notify=notify)
 | 
				
			||||||
 | 
					        client.process(timeout=1)
 | 
				
			||||||
 | 
					        #time.sleep(1)
 | 
				
			||||||
 | 
					    notify("stop hb vecation bot", jids=[listSubscriber[0]["jid"]])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue