Dateien nach "/" hochladen
This commit is contained in:
		
							
								
								
									
										111
									
								
								Hafas_Main_web.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								Hafas_Main_web.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,111 @@
 | 
			
		||||
import datetime
 | 
			
		||||
from typing import List
 | 
			
		||||
from flask import Flask, render_template, request, make_response
 | 
			
		||||
import json
 | 
			
		||||
 | 
			
		||||
# Part 1: Importieren der erforderlichen Module und Erstellen des Hafas-Clients
 | 
			
		||||
from pyhafas import HafasClient
 | 
			
		||||
from pyhafas.profile import DBProfile
 | 
			
		||||
from pyhafas.types.fptf import Leg
 | 
			
		||||
 | 
			
		||||
app = Flask(__name__)
 | 
			
		||||
client = HafasClient(DBProfile())
 | 
			
		||||
 | 
			
		||||
# Part 2: Suchen Sie nach der Haltestelle basierend auf der Benutzereingabe
 | 
			
		||||
def get_departures(station_name):
 | 
			
		||||
    locations = client.locations(station_name)
 | 
			
		||||
    if locations:
 | 
			
		||||
        best_found_location = locations[0]
 | 
			
		||||
        return best_found_location
 | 
			
		||||
    else:
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
def station_board_leg_to_dict(leg):
 | 
			
		||||
  delay_in_seconds = 0
 | 
			
		||||
  if leg.delay is not None:
 | 
			
		||||
      delay_in_seconds = leg.delay.total_seconds() // 60
 | 
			
		||||
  return {
 | 
			
		||||
    "name": leg.name,
 | 
			
		||||
    "direction": leg.direction,
 | 
			
		||||
    "dateTime": leg.dateTime.strftime("%Y-%m-%d %H:%M:%S"),
 | 
			
		||||
    "delay": delay_in_seconds,
 | 
			
		||||
    "platform": leg.platform,
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Part 3: Rufen Sie Abfahrtsinformationen für die gefundene Haltestelle ab
 | 
			
		||||
def get_departure_info(station_name):
 | 
			
		||||
    best_found_location = get_departures(station_name)
 | 
			
		||||
    if best_found_location:
 | 
			
		||||
        departures: List[Leg] = client.departures(
 | 
			
		||||
            station=best_found_location,
 | 
			
		||||
            date=datetime.datetime.now(),
 | 
			
		||||
            max_trips=15,
 | 
			
		||||
            products={
 | 
			
		||||
                'long_distance_express': True,
 | 
			
		||||
                'regional_express': True,
 | 
			
		||||
                'regional': True,
 | 
			
		||||
                'suburban': True,
 | 
			
		||||
                'bus': True,
 | 
			
		||||
                'ferry': True,
 | 
			
		||||
                'subway': True,
 | 
			
		||||
                'tram': True,
 | 
			
		||||
                'taxi': True
 | 
			
		||||
            }
 | 
			
		||||
        )
 | 
			
		||||
        return departures
 | 
			
		||||
    else:
 | 
			
		||||
        return []
 | 
			
		||||
 | 
			
		||||
@app.route('/', methods=['GET', 'POST'])
 | 
			
		||||
def index():
 | 
			
		||||
    departures = []
 | 
			
		||||
    station_name = ""
 | 
			
		||||
 | 
			
		||||
    # Get the station name from the cookie, if it exists
 | 
			
		||||
    if request.cookies.get('station_name'):
 | 
			
		||||
        station_name = request.cookies.get('station_name')
 | 
			
		||||
 | 
			
		||||
    if request.method == 'POST':
 | 
			
		||||
        station_name = request.form['station_name']
 | 
			
		||||
        departures = get_departure_info(station_name)
 | 
			
		||||
 | 
			
		||||
        # Set the station name cookie
 | 
			
		||||
        response = make_response(render_template('index.html', departures=departures, station_name=station_name))
 | 
			
		||||
        response.set_cookie('station_name', station_name)
 | 
			
		||||
        return response
 | 
			
		||||
 | 
			
		||||
    return render_template('index.html', departures=departures, station_name=station_name)
 | 
			
		||||
 | 
			
		||||
@app.route('/departures', methods=['GET'])
 | 
			
		||||
def departures():
 | 
			
		||||
  """
 | 
			
		||||
  Gibt die aktuellen Abfahrtsinformationen zurück.
 | 
			
		||||
 | 
			
		||||
  Returns:
 | 
			
		||||
    JSON-Objekt mit den Abfahrtsinformationen.
 | 
			
		||||
  """
 | 
			
		||||
  station_name=request.cookies.get('station_name')
 | 
			
		||||
  departures = client.departures(
 | 
			
		||||
    station=get_departures(station_name),
 | 
			
		||||
    date=datetime.datetime.now(),
 | 
			
		||||
    max_trips=15,
 | 
			
		||||
    products={
 | 
			
		||||
        'long_distance_express': True,
 | 
			
		||||
        'regional_express': True,
 | 
			
		||||
        'regional': True,
 | 
			
		||||
        'suburban': True,
 | 
			
		||||
        'bus': True,
 | 
			
		||||
        'ferry': True,
 | 
			
		||||
        'subway': True,
 | 
			
		||||
        'tram': True,
 | 
			
		||||
        'taxi': True
 | 
			
		||||
    }
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  # Konvertiere die Abfahrtsinformationen in ein JSON-Objekt
 | 
			
		||||
  departures_json = json.dumps([station_board_leg_to_dict(leg) for leg in departures])
 | 
			
		||||
  return departures_json
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    app.run(debug=True)
 | 
			
		||||
		Reference in New Issue
	
	Block a user