Kick requests module out, working Hafas request implementation
This commit is contained in:
parent
6a8a614b3d
commit
06f83af3d8
|
@ -5,3 +5,4 @@ from classes.train import Train
|
|||
from classes.request import Request
|
||||
from classes.response import Response
|
||||
from classes.httpclient import HTTPClient
|
||||
from classes.hafas import Hafas
|
|
@ -1,11 +1,16 @@
|
|||
from datetime import datetime
|
||||
from json import dumps
|
||||
from random import SystemRandom
|
||||
from string import ascii_lowercase, digits
|
||||
|
||||
from classes import HTTPClient
|
||||
|
||||
|
||||
class Hafas:
|
||||
API_URL = "https://fahrplan.oebb.at/bin/mgate.exe?rnd=%i"
|
||||
|
||||
BASE_CONTENT = {
|
||||
"id": "h7iqfi6m2eskyk8x",
|
||||
"id": None, # h7iqfi6m2eskyk8x
|
||||
"ver": "1.32",
|
||||
"lang": "deu",
|
||||
"auth": {
|
||||
|
@ -13,10 +18,10 @@ class Hafas:
|
|||
"aid": "5vHavmuWPWIfetEe"
|
||||
},
|
||||
"client": {
|
||||
"id": "OEBB",
|
||||
"id": "OEBB", # OEBB
|
||||
"type": "WEB",
|
||||
"name": "webapp",
|
||||
"l": "vs_webapp"
|
||||
"name": "bahnapi.eu", # webapp
|
||||
"l": "oebb_py" # vs_webapp
|
||||
},
|
||||
"formatted": False,
|
||||
"ext": "OEBB.11",
|
||||
|
@ -24,3 +29,30 @@ class Hafas:
|
|||
|
||||
def __init__(self):
|
||||
self.timestamp = int(datetime.now().timestamp() * 1000)
|
||||
|
||||
@classmethod
|
||||
def generateID(self, len=16, chars=ascii_lowercase + digits):
|
||||
r = SystemRandom()
|
||||
return "".join([r.choice(chars) for _ in range(len)])
|
||||
|
||||
def buildRequest(self, request_type, request_data, **kwargs):
|
||||
client = HTTPClient(self.API_URL % int(
|
||||
datetime.now().timestamp() * 1000))
|
||||
|
||||
data = self.BASE_CONTENT
|
||||
data[request_type] = request_data
|
||||
|
||||
if "language" in kwargs.items():
|
||||
data["lang"] = kwargs["language"]
|
||||
|
||||
if "id" in kwargs.items():
|
||||
data["id"] = kwargs["id"]
|
||||
if not data["id"]:
|
||||
data["id"] = self.__class__.generateID()
|
||||
|
||||
client.data = dumps(data)
|
||||
return client
|
||||
|
||||
def request(self, request_type, request_data):
|
||||
client = self.buildRequest(request_type, request_data)
|
||||
return client.execute()
|
||||
|
|
|
@ -1,8 +1,22 @@
|
|||
import requests
|
||||
from urllib.request import Request, urlopen
|
||||
|
||||
|
||||
class HTTPClient(requests.Session):
|
||||
def __init__(self, *args, **kwargs):
|
||||
requests.Session.__init__(self, *args, **kwargs)
|
||||
self.headers = {
|
||||
"User-Agent": "oebb_py/git (+https://kumig.it/kumitterer/oebb_py)"}
|
||||
class HTTPClient:
|
||||
def __init__(self, url, payload=None, headers=None):
|
||||
self.request = Request(url, payload, headers or {})
|
||||
self.request.add_header(
|
||||
"User-Agent", "oebb_py/git (+https://kumig.it/kumitterer/oebb_py)")
|
||||
|
||||
@property
|
||||
def data(self):
|
||||
return self.request.data
|
||||
|
||||
@data.setter
|
||||
def data(self, value):
|
||||
if isinstance(value, str):
|
||||
value = value.encode()
|
||||
|
||||
self.request.data = value
|
||||
|
||||
def execute(self):
|
||||
return urlopen(self.request).read()
|
|
@ -52,8 +52,7 @@ class Request:
|
|||
self.cfrm = split[0].encode("latin-1").decode("utf-8")
|
||||
|
||||
try:
|
||||
self.rtype = "conn" if self.conn else "val" if self.val else self.args["type"][0].lower(
|
||||
)
|
||||
self.rtype = "conn" if self.conn else "val" if self.val else self.args["type"][0].lower()
|
||||
except:
|
||||
output = "<h1>400 Bad Request</h1>\n"
|
||||
output += "A request type must be provided."
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
pytz
|
||||
bs4
|
||||
requests
|
||||
overpy
|
||||
html5lib
|
||||
|
|
Loading…
Reference in a new issue