covid-vaccine-availability-using-flask-server

news2025/1/6 19:33:29

使用烧瓶服务器获得 Covid 疫苗

原文:https://www . geesforgeks . org/co vid-疫苗-可用性-使用-烧瓶-服务器/

在本文中,我们将使用 Flask Server 构建 Covid 疫苗可用性检查器。

我们都知道,整个世界都在遭受疫情病毒的折磨,唯一能帮助我们摆脱这种局面的就是大规模疫苗接种。但正如我们所知,由于该国人口众多,在我们附近地区很难找到疫苗。因此,现在技术进入了我们的视野,我们将建立自己的 covid 疫苗可用性检查器,它可以发现我们附近地区的疫苗可用性。

我们将使用一些 python 库来查找疫苗的可用性,并使用烧瓶服务器显示它们。将来,您也可以将其部署在实时服务器上。首先,我们必须使用下面的命令安装 python Flask 包:

pip install flask

安装 python 烧瓶包后,打开 Pycharm 或任何 IDE(最好是 Visual Studio 代码)并创建一个新项目。之后制作一个主 python 文件 app.py 和两个名为模板的文件夹,另一个是静态(文件夹名称必须和写的一样)。

下面是代表项目目录结构的图片。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

分步实施

步骤 1: 在第一步中,我们必须导入 python 库,我们将在项目中进一步使用这些库。另外,制作一个 Flask 服务器的应用程序。

计算机编程语言

from flask import Flask,request,session,render_template
import requests,time
from datetime import datetime,timedelta

app = Flask(__name__)

步骤 2: 添加路由来处理客户端请求。

蟒蛇 3

@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)

**第三步:**这是我们项目的主要步骤,找到疫苗的可用性(findslot()函数,将做以下事情):

  • 首先从 python 的 DateTime 库中获取年龄、pin 和查找日期等参数。
  • 从 cowin 官方网站上删除数据,如疫苗剂量、疫苗接种中心、可用性、疫苗类型和价格等。
  • 将所有数据存储在 python 列表中。

蟒蛇 3

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 chargable.
                                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

下面是 app.py 的完整实现

蟒蛇 3

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 chargable.
                                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()

步骤 4: 现在在模板文件夹中制作三个文件。

  • index.html: 显示项目主页,用于输入年龄和 pin 码。
  • slot.html: 在页面上显示数据。
  • 不可用. html: 如果疫苗在任何中心都找不到,那么-没有可用页面。

index.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>

插槽. 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>

不可操作. 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 Availablity</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>

将图像或其他文件(如果有)添加到静态文件夹中。

https://media.geeksforgeeks.org/wp-content/uploads/20210831095055/Covid-vaccination.mp4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2271028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线性变换在机器学习中的应用实例

一、线性变换的基本概念 线性变换是指将一个向量空间中的向量映射到另一个向量空间中的函数&#xff0c;这种映射关系保持向量加法和标量乘法的运算性质。在机器学习中&#xff0c;线性变换通常通过矩阵乘法来实现&#xff0c;其中输入向量被视为列向量&#xff0c;矩阵被视为…

【Linux】传输层协议UDP

目录 再谈端口号 端口号范围划分 UDP协议 UDP协议端格式 UDP的特点 UDP的缓冲区 UDP注意事项 进一步深刻理解 再谈端口号 在上图中&#xff0c;有两个客户端A和B&#xff0c;客户端A打开了两个浏览器&#xff0c;这两个客户端都访问同一个服务器&#xff0c;都访问服务…

大功率PCB设计

1.电源和电机的走线用线径较大的铺铜&#xff0c;讲究的是走线顺畅&#xff1a; 2.同一个电源属性四层板都铺铜&#xff0c;并打很多过孔: 3.走线顺畅&#xff0c;可以看到从左到右供电。从右向左接地&#xff0c;加电流采样&#xff1a; 一个问题&#xff0c;这样会形成电源环…

ArkTs之NAPI学习

1.Node-api组成架构 为了应对日常开发经的网络通信、串口访问、多媒体解码、传感器数据收集等模块&#xff0c;这些模块大多数是使用c接口实现的&#xff0c;arkts侧如果想使用这些能力&#xff0c;就需要使用node-api这样一套接口去桥接c代码。Node-api整体的架构图如下&…

Vue el-data-picker选中开始时间,结束时间自动加半小时

效果 思路 查阅elemnet plus官网&#xff0c;日期时间选择器type"datetimerange"这个选中开始时间并没有对应事件会被触发&#xff0c;因此思路更换成type"datetime"的两个组成一起可以通过监听开始时间v-model的值变化更新结束时间的值。 代码 日期时间…

gitlab高级功能之 CICD Steps

CICD Steps 1. 介绍2. 定义 Steps2.1 Inputs2.2 Outputs 3. Using steps3.1 Set environment variables3.2 Running steps locally 4. Scripts5. Actions5.1 已知的问题 6. 表达式7. 实操7.1 单个step7.2 多个step7.3 复用steps7.4 添加output到step7.5 使用远程step 1. 介绍 …

TVS二极管选型【EMC】

TVS器件并联在电路中&#xff0c;当电路正常工作时&#xff0c;他处于截止状态&#xff08;高阻态&#xff09;&#xff0c;不影响线路正常工作&#xff0c;当线路处于异常过压并达到其击穿电压时&#xff0c;他迅速由高阻态变为低阻态&#xff0c;给瞬间电流提供一个低阻抗导通…

122.【C语言】数据结构之快速排序(Hoare排序的优化)

目录 1.解决方法(即优化方法) 方法1.随机选key 运行结果 方法2:三数取中 1.含义 2.做法 3.代码 1.若arr[left] < arr[mid_i],则arr[right]可能的位置也有三处 2.若arr[left] > arr[mid_i],则arr[right]可能的位置也有三处 2.证明当key_ileft时,right先走,使left…

Golang的容器编排实践

Golang的容器编排实践 一、Golang中的容器编排概述 作为一种高效的编程语言&#xff0c;其在容器编排领域也有着广泛的运用。容器编排是指利用自动化工具对容器化的应用进行部署、管理和扩展的过程&#xff0c;典型的容器编排工具包括Docker Swarm、Kubernetes等。在Golang中&a…

《Spring Framework实战》2:Spring快速入门

欢迎观看《Spring Framework实战》视频教程 Spring快速入门 目录 1. Java™开发套件&#xff08;JDK&#xff09; 2. 集成开发人员环境&#xff08;IDE&#xff09; 3. 安装Maven 4. Spring快速入门 4.1. 开始一个新的Spring Boot项目 4.2. 添加您的代码 4.3. 尝…

HTML——66.单选框

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>单选框</title></head><body><!--input元素的type属性&#xff1a;(必须要有)--> <!--单选框:&#xff08;如所住省会&#xff0c;性别选择&…

rouyi(前后端分离版本)配置

从gitee上下载&#xff0c;复制下载地址&#xff0c;到 点击Clone&#xff0c;下载完成&#xff0c; 先运行后端&#xff0c;在运行前端 运行后端&#xff1a; 1.配置数据库&#xff0c;在Navicat软件中&#xff0c;连接->mysql->名字自己起(rouyi-vue-blog),用户名roo…

基于云架构Web端的工业MES系统:赋能制造业数字化变革

基于云架构Web端的工业MES系统:赋能制造业数字化变革 在当今数字化浪潮席卷全球的背景下,制造业作为国家经济发展的重要支柱产业,正面临着前所未有的机遇与挑战。市场需求的快速变化、客户个性化定制要求的日益提高以及全球竞争的愈发激烈,都促使制造企业必须寻求更加高效、智…

如何解决电脑提示缺失kernel32.dll文件错误,kernel32.dll文件缺失、损坏或错误加载问题解决方案

电脑运行故障深度解析&#xff1a;从文件丢失到系统报错&#xff0c;全面应对kernel32.dll问题 在数字化时代&#xff0c;电脑已经成为我们日常生活和工作中不可或缺的工具。然而&#xff0c;电脑在长时间运行过程中&#xff0c;难免会遇到各种问题&#xff0c;如文件丢失、文…

leecode300.最长递增子序列

dp[i]表示以nums[i]这个数结尾的时的严格递增子序列的最长长度&#xff0c;那么只要每次增加一个数字nums[i]并且这个nums[i]比之前的nums[j]要大&#xff0c;dp[i]就要更新为dp[i]和dp[j]1二者的最大值&#xff0c;初始化默认最大递增子序列都是1 这里遍历顺序的感觉很像多重…

termux配置nginx+php

只能以默认用户u0_axx运行,修改用户会报错An error occurred.或者file no found 安装nginx pkg install nginx安装php-fpm pkg install nginx修改nginx配置文件, nano ../usr/etc/nginx/nginx.conf#端口必须设置在1024以上(1024以下需要root,但php-fpm不能以root用户运行,n…

typescript安装后仍然不能使用tsc,如何解决

1.全局安装 npm i typescript -g 2.发现仍然不行 解决方法&#xff1a; C:\Users\你的用户名\AppData\Roaming\npm解决办法&#xff1a; 1.确定对应的文件下载了 我们发现typescript是下载了的 2.设置环境变量的path 路径为typescript下的npm 3.cmd运行

SQL字符串截取函数——Left()、Right()、Substring()用法详解

SQL字符串截取函数——Left&#xff08;&#xff09;、Right&#xff08;&#xff09;、Substring&#xff08;&#xff09;用法详解 1. LEFT() 函数&#xff1a;从字符串的左侧提取指定长度的子字符串。 LEFT(string, length)string&#xff1a;要操作的字符串。length&#x…

数字PWM直流调速系统设计(论文+源码)

2.1 系统方案设计 2.2.1开环控制方案 采用开环方案的系统架构如图2.1所示&#xff0c;这种方式不需要对直流电机的转速进行检测&#xff0c;在速度控制时单片机只需要直接发出PWM就可以实现直流电机速度的控制。这种方式整体设计难度较低&#xff0c;但是无法准确得知当前的…

Python | 学习type()方法动态创建类

getattr方法的使用场景是在访问不存在的属性时&#xff0c;会触发该方法中的处理逻辑。尤其是在动态属性获取中结合 type()动态创建类有着良好的使用关系。 type()方法常用来判断属性的类别&#xff0c;而动态创建类不常使用&#xff0c;通过如下的几个实例来学习使用&#xff…