Disponibilidad de la vacuna Covid usando Flask Server

En este artículo, vamos a construir el Comprobador de disponibilidad de vacunas contra el covid usando Flask Server .

Todos sabemos que el mundo entero está sufriendo la pandemia y lo único que nos ayuda a salir de esta situación es la Vacunación masiva. Pero como sabemos debido a la gran población del país es muy difícil encontrar vacunas en nuestras áreas cercanas. Entonces, ahora la tecnología entra en escena y construiremos nuestro propio verificador de disponibilidad de vacunas covid que encuentra la disponibilidad de vacunas en nuestras áreas cercanas.

Usaremos algunas bibliotecas de python para encontrar la disponibilidad de vacunas y mostrarlas usando un servidor de frascos. En el futuro, también puede implementarlo en el servidor en tiempo real. En primer lugar, tenemos que instalar el paquete Flask de python usando el siguiente comando:

pip install flask

Después de instalar el paquete Python Flass, abra Pycharm o cualquier IDE (preferiblemente Visual Studio Code) y cree un nuevo proyecto. Después de esto, cree un archivo principal de python app.py y dos carpetas con el nombre de plantillas y la otra es estática (el nombre de la carpeta debe ser el mismo que está escrito).

A continuación se muestra la imagen que representa la estructura de directorios del proyecto.

Implementación paso a paso 

Paso 1: en este primer paso, tenemos que importar las bibliotecas de Python que usaremos más adelante en el proyecto. Además, cree una aplicación del servidor Flask.

Python

from flask import Flask,request,session,render_template
import requests,time
from datetime import datetime,timedelta
  
app = Flask(__name__)

Paso 2: Agregar las rutas para manejar las requests de los clientes.

Python3

@app.route('/')
def home():
  
    # rendering the homepage of project
    return render_template("index.html")
  
@app.route('/CheckSlot')
def check():
  
    # for checking the slot available or not
      
    # fetching pin codes from flask
    pin = request.args.get("pincode")
      
    # fetching age from flask
    age = request.args.get("age")
    data = list()
      
    # finding the slot
    result = findSlot(age, pin, data)
      
    if(result == 0):
        return render_template("noavailable.html")
    return render_template("slot.html", data=data)

Paso 3: Este es el paso principal de nuestro proyecto que encuentra la disponibilidad de la vacuna (función findslot() que hará lo siguiente):

  • En primer lugar, tome los parámetros como edad, pin y busque fechas de la biblioteca DateTime de python.
  • Deseche los datos del sitio web oficial de cowin como dosis de vacunas, centros de vacunación, disponibilidad, tipos de vacuna y precio, etc.
  • Almacene todos los datos en la lista de python.

Python3

def findSlot(age,pin,data):
    
    flag = 'y'
    num_days =  2
    actual = datetime.today()
    list_format = [actual + timedelta(days=i) for i in range(num_days)]
    actual_dates = [i.strftime("%d-%m-%Y") for i in list_format]
      
    while True:
        counter = 0
        for given_date in actual_dates:
            
            # cowin website Api for fetching the data
            URL = "https://cdn-api.co-vin.in/api/v2/appointment/sessions/public/calendarByPin?pincode={}&date={}".format(pin, given_date)
            header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36'}
              
            # Get the results in json format.
            result = requests.get(URL,headers = header)
            if(result.ok):
                response_json = result.json()
                if(response_json["centers"]):
                    
                    # Checking if centres available or not
                    if(flag.lower() == 'y'):
                        for center in response_json["centers"]:
                            
                            # For Storing all the centre and all parameters
                            for session in center["sessions"]:
                                
                                # Fetching the availability in particular session
                                datas = list()
                                  
                                # Adding the pincode of area in list
                                datas.append(pin)
                                  
                                # Adding the dates available in list
                                datas.append(given_date)
                                  
                                # Adding the centre name in list
                                datas.append(center["name"])
                                  
                                # Adding the block name in list
                                datas.append(center["block_name"])
                                  
                                # Adding the vaccine cost type whether it is
                                # free or chargeable.
                                datas.append(center["fee_type"])
                                  
                                # Adding the available capacity or amount of 
                                # doses in list
                                datas.append(session["available_capacity"])
                                if(session["vaccine"]!=''):
                                    datas.append(session["vaccine"])
                                counter =counter + 1
                                  
                                # Add the data of particular centre in data list.
                                if(session["available_capacity"]>0):
                                    data.append(datas)
            else:
                print("No response")
        if counter == 0:
            return 0
        return 1

A continuación se muestra la implementación completa de app.py

Python3

from flask import Flask,request,session,render_template
import requests,time
from datetime import datetime,timedelta
  
app = Flask(__name__)
  
@app.route('/')
def home():
    return render_template("index.html")
  
@app.route('/CheckSlot')
def check():
    
    # fetching pin codes from flask
    pin = request.args.get("pincode")
      
    # fetching age from flask
    age = request.args.get("age")
    data = list()
      
    # finding the slot
    result = findSlot(age,pin,data)
      
    if(result == 0):
        return render_template("noavailable.html") 
    return render_template("slot.html",data = data)
  
def findSlot(age,pin,data):
    flag = 'y'
    num_days =  2
    actual = datetime.today()
    list_format = [actual + timedelta(days=i) for i in range(num_days)]
    actual_dates = [i.strftime("%d-%m-%Y") for i in list_format]
      
    # print(actual_dates)
    while True:
        counter = 0
        for given_date in actual_dates:
            
            # cowin website Api for fetching the data
            URL = "https://cdn-api.co-vin.in/api/v2/appointment/sessions/public/calendarByPin?pincode={}&date={}".format(pin, given_date)
            header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36'}
               
            # Get the results in json format.
            result = requests.get(URL,headers = header)
            if(result.ok):
                response_json = result.json()
                if(response_json["centers"]):
                    
                    # Checking if centres available or not
                    if(flag.lower() == 'y'):
                        for center in response_json["centers"]:
                            
                            # For Storing all the centre and all parameters
                            for session in center["sessions"]:
                                
                                # Fetching the availability in particular session
                                datas = list()
                                  
                                # Adding the pincode of area in list
                                datas.append(pin)
                                  
                                # Adding the dates available in list
                                datas.append(given_date)
                                  
                                # Adding the centre name in list
                                datas.append(center["name"])
                                  
                                # Adding the block name in list
                                datas.append(center["block_name"])
                                  
                                # Adding the vaccine cost type whether it is
                                # free or chargeable.
                                datas.append(center["fee_type"])
                                  
                                # Adding the available capacity or amount of 
                                # doses in list
                                datas.append(session["available_capacity"])
                                if(session["vaccine"]!=''):
                                    datas.append(session["vaccine"])
                                counter =counter + 1
                                  
                                # Add the data of particular centre in data list.
                                if(session["available_capacity"]>0):
                                    data.append(datas)
                                      
            else:
                print("No response")
        if counter == 0:
            return 0
        return 1
  
if __name__ == "__main__":
    app.run()

Paso 4:  Ahora cree tres archivos en la carpeta de plantillas.

  • index.html: muestra la página de inicio del proyecto para ingresar la edad y los códigos PIN.
  • slot.html:   Mostrar los datos en la página.
  • nodisponible.html:   Si la vacuna no se encuentra en ningún centro entonces- Página No hay disponibilidad.

código index.html 

HTML

<!doctype html>
<html lang="en">
   <head>
      <!-- Required meta tags -->
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <!-- Bootstrap CSS -->
      <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet"
         integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
      <link rel="stylesheet" href="/static/img/style.css">
      <title>Covid Vaccination Slots</title>
   </head>
   <body>
      <h2 class="text-center" style="background-color: rgb(2, 2, 2);padding: 5px;color: white;">Find Your Vaccination Slots
      </h2>
      <div class="container-fluid" style="margin-top: 0px;">
         <div id="carouselExampleControls" class="carousel slide" data-bs-ride="carousel">
            <div class="carousel-inner">
               <div class="carousel-item active" style="height: 350px">
                  <img src="/static/img/geeks.png" class="d-block w-100" alt="...">
               </div>
               <div class="carousel-item" style="height: 350px">
                  <img src="/static/img/geeks.png"
                     class="d-block w-100" alt="...">
               </div>
               <!-- <div class="carousel-item"  style="height: 400px">
                  <img src="/static/img/cor.jpeg" class="d-block w-100" alt="...">
                  </div> -->
            </div>
            <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleControls"
               data-bs-slide="prev">
            <span class="carousel-control-prev-icon" aria-hidden="true"></span>
            <span class="visually-hidden">Previous</span>
            </button>
            <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleControls"
               data-bs-slide="next">
            <span class="carousel-control-next-icon" aria-hidden="true"></span>
            <span class="visually-hidden">Next</span>
            </button>
         </div>
      </div>
      <h2 style="text-align: center;margin-top: 50px;">Enter Your Credentials here </h2>
      <div style="margin-left: 620px;margin-top: 10px;">
         <form class="formed" action="/CheckSlot">
            <Label>Pincode</Label>
            <input type="text" name="pincode" placeholder="Enter Your Pincode Here" style="padding: 10px;margin: 5px 5px;border-radius: 5px;"><br>
            <Label>Age</Label>
            <input type="number" name="age" placeholder="Enter Your Age Here" style="padding: 10px;margin: 5px 33px;border-radius: 5px;"><br>
            <input type="submit" style="margin-top: 20px;margin-bottom: 30px;background-color: rgb(26, 151, 224);color: white;padding: 8px;border: 5px;" name="submit" value="Search">
         </form>
      </div>
      <!-- Optional JavaScript; choose one of the two! -->
      <!-- Option 1: Bootstrap Bundle with Popper -->
      <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js"
         integrity="sha384-gtEjrD/SeCtmISkJkNUaaKMoLD0//ElJ19smozuHV6z3Iehds+3Ulb9Bn9Plx0x4"
         crossorigin="anonymous"></script>
      <!-- Option 2: Separate Popper and Bootstrap JS -->
      <!--
         <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
         <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.min.js" integrity="sha384-Atwg2Pkwv9vp0ygtn1JAojH0nYbwNJLPhwyoVbhoPwBhjQPR5VtM2+xf0Uwh9KtT" crossorigin="anonymous"></script>
         -->
   </body>
</html>

ranura.html 

HTML

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
      <title>Covid Vaccination Slots</title>
   </head>
   <body>
      <h1 style="text-align: center;background-color: black;color: white;">Vaccination Slots Availability</h1>
      <br><br><br><br>
      <div>
         <!-- {% for item in data%}
            {% endfor %} -->
         <table class="table table-hover" style="background-color: aqua;">
            <thead>
               <tr>
                  <th>Pincode</th>
                  <th>Date</th>
                  <th>Vaccination Center Name</th>
                  <th>BlockName</th>
                  <th>Price</th>
                  <th>Available Capacity</th>
                  <th>Vaccine Type</th>
               </tr>
            </thead>
            <tbody>
               {% for item in data%}
               <tr>
                  <td>{{item[0]}}</td>
                  <td>{{item[1]}}</td>
                  <td>{{item[2]}}</td>
                  <td>{{item[3]}}</td>
                  <td>{{item[4]}}</td>
                  <td>{{item[5]}}</td>
                  <td>{{item[6]}}</td>
               </tr>
               {% endfor %}
            </tbody>
         </table>
      </div>
      <h3 style="margin-top: 50px;text-align: center;">
      <a href = "https://www.cowin.gov.in/home">Visit Government Website for Booking Slot</a></h1>
   </body>
</html>

nodisponible.html

HTML

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>No Availability</title>
   </head>
   <p style="text-align: center;font-size: 150px;color: rgb(255, 136, 0);">Sorry !</p>
  
  
  
  
   <body>
      <h1 style="text-align: center;color: red;margin: 0 auto;">No Available Vaccine Slots</h1>
   </body>
</html>

Agregue las imágenes u otros archivos (si los tiene) a la carpeta estática.

Publicación traducida automáticamente

Artículo escrito por bansalshubhamcse21 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *