Kick requests module out, working Hafas request implementation
This commit is contained in:
parent
6a8a614b3d
commit
06f83af3d8
5 changed files with 58 additions and 13 deletions
|
@ -5,3 +5,4 @@ from classes.train import Train
|
||||||
from classes.request import Request
|
from classes.request import Request
|
||||||
from classes.response import Response
|
from classes.response import Response
|
||||||
from classes.httpclient import HTTPClient
|
from classes.httpclient import HTTPClient
|
||||||
|
from classes.hafas import Hafas
|
|
@ -1,11 +1,16 @@
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from json import dumps
|
||||||
|
from random import SystemRandom
|
||||||
|
from string import ascii_lowercase, digits
|
||||||
|
|
||||||
|
from classes import HTTPClient
|
||||||
|
|
||||||
|
|
||||||
class Hafas:
|
class Hafas:
|
||||||
API_URL = "https://fahrplan.oebb.at/bin/mgate.exe?rnd=%i"
|
API_URL = "https://fahrplan.oebb.at/bin/mgate.exe?rnd=%i"
|
||||||
|
|
||||||
BASE_CONTENT = {
|
BASE_CONTENT = {
|
||||||
"id": "h7iqfi6m2eskyk8x",
|
"id": None, # h7iqfi6m2eskyk8x
|
||||||
"ver": "1.32",
|
"ver": "1.32",
|
||||||
"lang": "deu",
|
"lang": "deu",
|
||||||
"auth": {
|
"auth": {
|
||||||
|
@ -13,10 +18,10 @@ class Hafas:
|
||||||
"aid": "5vHavmuWPWIfetEe"
|
"aid": "5vHavmuWPWIfetEe"
|
||||||
},
|
},
|
||||||
"client": {
|
"client": {
|
||||||
"id": "OEBB",
|
"id": "OEBB", # OEBB
|
||||||
"type": "WEB",
|
"type": "WEB",
|
||||||
"name": "webapp",
|
"name": "bahnapi.eu", # webapp
|
||||||
"l": "vs_webapp"
|
"l": "oebb_py" # vs_webapp
|
||||||
},
|
},
|
||||||
"formatted": False,
|
"formatted": False,
|
||||||
"ext": "OEBB.11",
|
"ext": "OEBB.11",
|
||||||
|
@ -24,3 +29,30 @@ class Hafas:
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.timestamp = int(datetime.now().timestamp() * 1000)
|
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):
|
class HTTPClient:
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, url, payload=None, headers=None):
|
||||||
requests.Session.__init__(self, *args, **kwargs)
|
self.request = Request(url, payload, headers or {})
|
||||||
self.headers = {
|
self.request.add_header(
|
||||||
"User-Agent": "oebb_py/git (+https://kumig.it/kumitterer/oebb_py)"}
|
"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")
|
self.cfrm = split[0].encode("latin-1").decode("utf-8")
|
||||||
|
|
||||||
try:
|
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:
|
except:
|
||||||
output = "<h1>400 Bad Request</h1>\n"
|
output = "<h1>400 Bad Request</h1>\n"
|
||||||
output += "A request type must be provided."
|
output += "A request type must be provided."
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
pytz
|
pytz
|
||||||
bs4
|
bs4
|
||||||
requests
|
|
||||||
overpy
|
overpy
|
||||||
html5lib
|
html5lib
|
||||||
|
|
Loading…
Reference in a new issue