This repository has been archived on 2025-04-11. You can view files and clone it, but cannot push or open issues or pull requests.
covid-19-discord-bot/lib/parse_data.py

83 lines
2.7 KiB
Python
Executable file

#!/usr/bin/python3
import requests
from bs4 import BeautifulSoup
from inspect import getmembers, isroutine
from lib.config_lib import create_session
from lib.covid_data_lib import set_data, get_data, get_top_n_rows
from lib.covidData import Base
# San Antonio url
sa_data_url = 'https://www.sanantonio.gov/health/news/alerts/coronavirus'
def format_parse_int(num):
if(num < 0):
return 'N/A'
output = ''
count = 0
while not num == 0:
if(count == 3):
output += ','
count = 0
output += f'{num%10}'
num = int(num/10)
count += 1
return output[::-1]
def update_data():
try:
print('Creating session.')
session = create_session(Base)
except Exception as e:
print(f'There was an error trying to create a database session:\n{e}')
data_html = requests.get('https://www.worldometers.info/coronavirus/')
if(data_html.status_code == '200' or data_html.status_code == 200):
parsed_html = BeautifulSoup(data_html.text, features='html.parser')
table = parsed_html.find('table', id='main_table_countries_today')
for row in table.findAll('tr'):
if(row and row.findAll('td')):
if(row.find('a')):
set_data(
session, row.find('a').text, [r.text for r in row.findAll('td')])
elif(row.findAll('td')[0] and row.findAll('td')[0].text):
set_data(
session, row.findAll('td')[0].text.replace(':', ''), [r.text for r in row.findAll('td')])
session.close()
def get_covid_data(selection):
print('Updating data.')
session = create_session(Base)
data_dict = get_data(session, selection)
session.close()
output = f'Selection: {data_dict["selection_original"]}\n'
for key in data_dict:
temp_key = ' '.join([d.capitalize() for d in key.replace(
'per', '/').split('_')])
if(key == 'selection' or key == 'selection_original'):
pass
elif(key == 'total_cases_per_one_mil'):
output += f'{temp_key}: {data_dict[key]}\n'
else:
output += f'{temp_key}: {format_parse_int(data_dict[key])}\n'
return output
def get_top_data(number):
session = create_session(Base)
top_n_rows = get_top_n_rows(session, number)
session.close()
output = ''
count = 0
for row in top_n_rows:
output += f'# {count + 1}\n{row["selection_original"]}: {format_parse_int(row["total_cases"])}'
if(not count == number):
output += '\n'
count += 1
return output
if(__name__ == '__main__'):
print(get_covid_data('TOTAL'))