-
Notifications
You must be signed in to change notification settings - Fork 0
/
covid_bot.py
96 lines (76 loc) · 3.04 KB
/
covid_bot.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import json
import requests
import time
import datetime
import logging
import logging.handlers
import threading
from json import JSONDecodeError
lock = threading.Lock()
FILE_NAME = 'corona_data.json'
def f_write(text:str):
f = open("log.txt", 'a+')
f.write(str(text)+"\n")
def save(x):
with open(FILE_NAME, 'w') as f:
json.dump(x, f)
def load():
res = {}
with open(FILE_NAME, 'r') as f:
try:
res = json.load(f)
except JSONDecodeError:
pass
return res
URL = 'https://api.covid19india.org/data.json'
FORMAT = '[%(asctime)-15s] %(message)s'
log_file = 'corona_bot.log'
handler = logging.handlers.RotatingFileHandler(log_file, maxBytes=500*1024,backupCount=5)
logging.basicConfig(format=FORMAT, level=logging.WARNING, handlers = [handler])
def corona_bot(args):
cur_data = []
info = []
message = []
any_change = False
try:
past_data = load()
response = requests.get(URL)
jsonData = response.json()
state_wise_data = jsonData['statewise']
info = []
for state in state_wise_data:
changed = False
current_state = state['state']
cur_data = [state['confirmed'], state['recovered'], state['deaths'], state['deltaconfirmed']]
if current_state not in past_data:
past_data[current_state] = {}
changed = True
any_change = True
else:
if past_data[current_state] != cur_data:
changed = True
any_change = True
if past_data[current_state][0] == "0":
data = f"*New case/cases appeared in {current_state}*: \n\nConfirmed cases = {state['confirmed']} \nCured/Discharged/Migrated = {state['recovered']}\nPossible Deaths = {state['deaths']}\n\n\n"
info.append(data)
message.append(data)
else:
data = f"*Change in data of {current_state}*: \n\nConfirmed cases = {past_data[current_state][0]} --> {state['confirmed']} \nCured/Discharged/Migrated = {past_data[current_state][1]} --> {state['recovered']}\nPossible Deaths = {past_data[current_state][2]} --> {state['deaths']}\nNew cases registered today = {state['deltaconfirmed']}\n\n\n"
info.append(data)
if current_state == 'Total':
message.append(data)
if changed == True:
past_data[current_state] = cur_data
bot_data = {"changed": any_change,"message": message, "newData": past_data}
if any_change == True and args == 1:
lock.acquire()
logging.warning("SAVING DATA")
save(past_data)
lock.release()
for event in info:
logging.critical(event)
except Exception as e:
logging.exception(f"Some Failure in the handler Script!! : {e}")
return bot_data
if __name__ == "__main__":
corona_bot(1)