covid-vaccine-availability-using-flask-server

使用烧瓶服务器获得 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习笔记 - 单幅图像深度估计的最新技术

1、深度估计简述 单眼深度估计是一项计算机视觉任务,AI 模型从单个图像中预测场景的深度信息。模型估计场景中对象从一个照相机视点的距离。单目深度估计已广泛用于自动驾驶、机器人等领域。深度估计被认为是最困难的计算机视觉任务之一,因为它要求模型理解对象及其深度信息之…

MarkDown怎么转pdf;Mark Text怎么使用;

MarkDown怎么转pdf 目录 MarkDown怎么转pdf先用CSDN进行编辑,能双向看版式;标题最后直接导出pdfMark Text怎么使用一、界面介绍二、基本操作三、视图模式四、其他功能先用CSDN进行编辑,能双向看版式; 标题最后直接导出pdf Mark Text怎么使用 Mark Text是一款简洁的开源Mar…

阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance)

阻抗&#xff08;Impedance&#xff09;、容抗&#xff08;Capacitive Reactance&#xff09;、感抗&#xff08;Inductive Reactance&#xff09; 都是交流电路中描述电流和电压之间关系的参数&#xff0c;但它们的含义、单位和作用不同。下面是它们的定义和区别&#xff1a; …

一文大白话讲清楚CSS元素的水平居中和垂直居中

文章目录 一文大白话讲清楚CSS元素的水平居中和垂直居中1.已知元素宽高的居中方案1.1 利用定位margin:auto1.2 利用定位margin负值1.3 table布局 2.未知元素宽高的居中方案2.1利用定位transform2.2 flex弹性布局2.3 grid网格布局 3. 内联元素的居中布局 一文大白话讲清楚CSS元素…

APM 3.0.2 | 聚合B站、油管和MF的音乐播放器,支持歌词匹配

APM&#xff08;Azusa-Player-Mobile&#xff09;是一款基于B站的第三方音频播放器&#xff0c;现已扩展支持YouTube Music、YouTube、本地音乐、AList和MusicFree等平台。它不仅提供视频作为音频播放&#xff0c;还具备排行榜、分区动态等功能。用户可以通过添加Alist地址接入…

html+css+js网页设计 美食 美食天下2个页面

htmlcssjs网页设计 美食 美食天下2个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#…

TCP粘/拆包----自定义消息协议

今天是2024年12月31日&#xff0c;今年的最后一天&#xff0c;希望所有的努力在新的一年会有回报。❀ 无路可退&#xff0c;放弃很难&#xff0c;坚持很酷 TCP传输 是一种面向二进制的&#xff0c;流的传输。在传输过程中最大的问题是消息之间的边界不明确。而在服务端主要的…

Alist-Sync-Web 网盘自动同步,网盘备份相互备份

Alist-Sync-Web 一个基于 Web 界面的 Alist 存储同步工具&#xff0c;支持多任务管理、定时同步、差异处理等功能。 功能特点 &#x1f4f1; 美观的 Web 管理界面&#x1f504; 支持多任务管理⏰ 支持 Cron 定时任务&#x1f4c2; 支持数据同步和文件同步两种模式&#x1f5…

【C++】B2090 年龄与疾病

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述输入格式输出格式示例输入输出 &#x1f4af;我的初始代码实现思路分析优点缺点 &#x1f4af;老师的两种实现方法分析方法1&#xff1a;使用数组存储所有输入数据…

windows安装rsync Shell语句使用rsync

sh脚本里使用 rsync功能&#xff0c;需要提前布置rsync环境 第一步&#xff0c;下载 libxxhash-0.8.2-1-x86_64.pkg.tar 下载压缩包地址 Index of /msys/x86_64/https://repo.msys2.org/msys/x86_64/ 下载对应版本&#xff0c;没特殊需求下载最高版本就行了 解压缩压缩包 …

创龙3588——debian根文件系统制作

文章目录 build.sh debian 执行流程build.sh源码流程 30-rootfs.sh源码流程 mk-rootfs-bullseys.sh源码流程 mk-sysroot.sh源码流程 mk-image.sh源码流程 post-build.sh 大致流程系统制作步骤 build.sh debian 执行流程 build.sh 源码 run_hooks() {DIR"$1"shiftf…

网络安全之高防IP的实时监控精准防护

高防IP是一种网络安全设备&#xff0c;用于保护网络服务不受到各类攻击的影响&#xff0c;确保业务的持续稳定运行。它通过监控、识别和封锁恶意攻击流量&#xff0c;提供高级别的防护&#xff0c;降低业务被攻击的风险&#xff0c;并提升网络的稳定性和可靠性。 一、实时监控的…

aardio —— 虚表 —— 使用ownerDrawCustom列类型制作喜马拉雅播放器列表

不会自绘也能做漂亮列表&#xff0c;你相信吗&#xff1f; 看看这个例子&#xff0c;虚表_vlistEx_ColType_OwnerDrawCustom列类型&#xff0c;移植自godking.customPlus&#xff0c;简单好用&#xff0c;做漂亮列表的大杀器&#xff0c;玩aardio必备利器&#xff01; 请更新…

JavaScript的数据类型及检测方式

目录 一、JS数据类型 1.基本数据类型 2.引用数据类型 二、堆和栈 三、数据类型检测 1.typeof 2.instanceof 3.constructor 4.Object.prototype.toString.call() JavaScript 中的数据类型主要分为两大类&#xff1a;原始数据类型(也称基本数据类型)和引用数据类型。 一…

高阶数据结构----布隆过滤器和位图

&#xff08;一&#xff09;位图 位图是用来存放某种状态的&#xff0c;因为一个bit上只能存0和1所以一般只有两种状态的情况下适合用位图&#xff0c;所以非常适合判断数据在或者不在&#xff0c;而且位图十分节省空间&#xff0c;很适合于海量数据&#xff0c;且容易存储&…

Leetcode 最大正方形

java 实现 class Solution {public int maximalSquare(char[][] matrix) {//处理特殊情况if(matrix null || matrix.length 0 || matrix[0].length 0) return 0;int rows matrix.length;int cols matrix[0].length;int[][] dp new int[rows][cols]; //dp[i][j]的含义是以…

Redis--缓存穿透、击穿、雪崩以及预热问题(面试高频问题!)

缓存穿透、击穿、雪崩以及预热问题 如何解决缓存穿透&#xff1f;方案一&#xff1a;缓存空对象方案二&#xff1a;布隆过滤器什么是布隆过滤器&#xff1f;优缺点 方案三&#xff1a;接口限流 如何解决缓存击穿问题&#xff1f;方案一&#xff1a;分布式锁方案一改进成双重判定…

嵌入式 Linux LED 驱动开发实验

一、Linux 下 LED 灯驱动原理 a)地址映射 在编写驱动之前,我们需要先简单了解一下 MMU 这个神器, MMU 全称叫做 Memory Manage Unit,也就是内存管理单元。在老版本的 Linux 中要求处理器必须有 MMU,但是现在 Linux 内核已经支持无 MMU 的处理器了。 MMU 主要完成的功能如…

网络安全:交换机技术

单播&#xff0c;组播广播 单播(unicast): 是指封包在计算机网络的传输中&#xff0c;目的地址为单一目标的一种传输方式。它是现今网络应用最为广泛&#xff0c;通常所使用的网络协议或服务大多采用单播传输&#xff0c;例如一切基于TCP的协议。组播(multicast): 也叫多播&am…

C# 在PDF中添加和删除水印注释 (Watermark Annotation)

目录 使用工具 C# 在PDF文档中添加水印注释 C# 在PDF文档中删除水印注释 PDF中的水印注释是一种独特的注释类型&#xff0c;它通常以透明的文本或图片形式叠加在页面内容之上&#xff0c;为文档添加标识或信息提示。与传统的静态水印不同&#xff0c;水印注释并不会永久嵌入…