Corona: various minor adjustments

This commit is contained in:
oddluck 2020-03-11 12:27:45 +00:00
parent 11fef3b9d3
commit cfcfdf55e7

View File

@ -42,8 +42,7 @@ except ImportError:
# without the i18n module # without the i18n module
_ = lambda x: x _ = lambda x: x
countries = {
CC = {
"AF": "AFGHANISTAN", "AF": "AFGHANISTAN",
"AX": "ÅLAND ISLANDS", "AX": "ÅLAND ISLANDS",
"AL": "ALBANIA", "AL": "ALBANIA",
@ -91,7 +90,7 @@ CC = {
"CL": "CHILE", "CL": "CHILE",
"CN": "CHINA", "CN": "CHINA",
"CX": "CHRISTMAS ISLAND", "CX": "CHRISTMAS ISLAND",
"CC": "COCOS (KEELING) ISLANDS", "CC": "COCOS ISLANDS",
"CO": "COLOMBIA", "CO": "COLOMBIA",
"KM": "COMOROS", "KM": "COMOROS",
"CG": "CONGO", "CG": "CONGO",
@ -232,7 +231,7 @@ CC = {
"SH": "SAINT HELENA", "SH": "SAINT HELENA",
"KN": "SAINT KITTS AND NEVIS", "KN": "SAINT KITTS AND NEVIS",
"LC": "SAINT LUCIA", "LC": "SAINT LUCIA",
"MF": "SAINT MARTIN (FRENCH PART)", "MF": "SAINT MARTIN",
"PM": "SAINT PIERRE AND MIQUELON", "PM": "SAINT PIERRE AND MIQUELON",
"VC": "SAINT VINCENT AND THE GRENADINES", "VC": "SAINT VINCENT AND THE GRENADINES",
"WS": "SAMOA", "WS": "SAMOA",
@ -296,109 +295,126 @@ CC = {
} }
states = { states = {
'AK': 'Alaska', 'AK': 'ALASKA',
'AL': 'Alabama', 'AL': 'ALABAMA',
'AR': 'Arkansas', 'AR': 'ARKANSAS',
'AS': 'American Samoa', 'AS': 'AMERICAN SAMOA',
'AZ': 'Arizona', 'AZ': 'ARIZONA',
'CA': 'California', 'CA': 'CALIFORNIA',
'CO': 'Colorado', 'CO': 'COLORADO',
'CT': 'Connecticut', 'CT': 'CONNECTICUT',
'DC': 'District of Columbia', 'DC': 'DISTRICT OF COLUMBIA',
'DE': 'Delaware', 'DE': 'DELAWARE',
'FL': 'Florida', 'FL': 'FLORIDA',
'GA': 'Georgia', 'GA': 'GEORGIA',
'GU': 'Guam', 'GU': 'GUAM',
'HI': 'Hawaii', 'HI': 'HAWAII',
'IA': 'Iowa', 'IA': 'IOWA',
'ID': 'Idaho', 'ID': 'IDAHO',
'IL': 'Illinois', 'IL': 'ILLINOIS',
'IN': 'Indiana', 'IN': 'INDIANA',
'KS': 'Kansas', 'KS': 'KANSAS',
'KY': 'Kentucky', 'KY': 'KENTUCKY',
'LA': 'Louisiana', 'LA': 'LOUISIANA',
'MA': 'Massachusetts', 'MA': 'MASSACHUSETTS',
'MD': 'Maryland', 'MD': 'MARYLAND',
'ME': 'Maine', 'ME': 'MAINE',
'MI': 'Michigan', 'MI': 'MICHIGAN',
'MN': 'Minnesota', 'MN': 'MINNESOTA',
'MO': 'Missouri', 'MO': 'MISSOURI',
'MP': 'Northern Mariana Islands', 'MP': 'NORTHERN MARIANA ISLANDS',
'MS': 'Mississippi', 'MS': 'MISSISSIPPI',
'MT': 'Montana', 'MT': 'MONTANA',
'NA': 'National', 'NA': 'NATIONAL',
'NC': 'North Carolina', 'NC': 'NORTH CAROLINA',
'ND': 'North Dakota', 'ND': 'NORTH DAKOTA',
'NE': 'Nebraska', 'NE': 'NEBRASKA',
'NH': 'New Hampshire', 'NH': 'NEW HAMPSHIRE',
'NJ': 'New Jersey', 'NJ': 'NEW JERSEY',
'NM': 'New Mexico', 'NM': 'NEW MEXICO',
'NV': 'Nevada', 'NV': 'NEVADA',
'NY': 'New York', 'NY': 'NEW YORK',
'OH': 'Ohio', 'OH': 'OHIO',
'OK': 'Oklahoma', 'OK': 'OKLAHOMA',
'OR': 'Oregon', 'OR': 'OREGON',
'PA': 'Pennsylvania', 'PA': 'PENNSYLVANIA',
'PR': 'Puerto Rico', 'PR': 'PUERTO RICO',
'RI': 'Rhode Island', 'RI': 'RHODE ISLAND',
'SC': 'South Carolina', 'SC': 'SOUTH CAROLINA',
'SD': 'South Dakota', 'SD': 'SOUTH DAKOTA',
'TN': 'Tennessee', 'TN': 'TENNESSEE',
'TX': 'Texas', 'TX': 'TEXAS',
'UT': 'Utah', 'UT': 'UTAH',
'VA': 'Virginia', 'VA': 'VIRGINIA',
'VI': 'Virgin Islands', 'VI': 'VIRGIN ISLANDS',
'VT': 'Vermont', 'VT': 'VERMONT',
'WA': 'Washington', 'WA': 'WASHINGTON',
'WI': 'Wisconsin', 'WI': 'WISCONSIN',
'WV': 'West Virginia', 'WV': 'WEST VIRGINIA',
'WY': 'Wyoming' 'WY': 'WYOMING'
} }
class Corona(callbacks.Plugin): class Corona(callbacks.Plugin):
"""Displays current stats of the Coronavirus outbreak""" """Displays current stats of the Coronavirus outbreak"""
threaded = True threaded = True
@wrap([optional('text')]) def getCSV(self):
def corona(self, irc, msg, args, search): data = None
"""<area> try:
Displays Coronavirus stats day = date.today().strftime('%m-%d-%Y')
""" url = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/{0}.csv".format(day)
git = api = False r = requests.get(url, timeout=10)
r.raise_for_status()
except (requests.exceptions.RequestException, requests.exceptions.HTTPError) as e:
log.debug('Corona: error retrieving data for today: {0}'.format(e))
try:
day = date.today() - timedelta(days=1)
day = day.strftime('%m-%d-%Y')
url = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/{0}.csv".format(day)
r = requests.get(url, timeout=10)
r.raise_for_status()
except (requests.exceptions.RequestException, requests.exceptions.HTTPError) as e:
log.debug('Corona: error retrieving data for yesterday: {0}'.format(e))
else:
data = csv.DictReader(r.iter_lines(decode_unicode = True))
else:
data = csv.DictReader(r.iter_lines(decode_unicode = True))
return data
def getAPI(self):
data = None
url = "https://services1.arcgis.com/0MSEUqKaxRlEPj5g/arcgis/rest/services/ncov_cases/FeatureServer/1/query?f=json&where=Confirmed>0&outFields=*" url = "https://services1.arcgis.com/0MSEUqKaxRlEPj5g/arcgis/rest/services/ncov_cases/FeatureServer/1/query?f=json&where=Confirmed>0&outFields=*"
try: try:
data = requests.get(url, timeout=10) r = requests.get(url, timeout=10)
data.raise_for_status() r.raise_for_status()
except (requests.exceptions.RequestException, requests.exceptions.HTTPError) as e: except (requests.exceptions.RequestException, requests.exceptions.HTTPError) as e:
log.debug('Corona: error retrieving data from API: {0}'.format(e)) log.debug('Corona: error retrieving data from API: {0}'.format(e))
try:
day = date.today().strftime('%m-%d-%Y')
url = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/{0}.csv".format(day)
data = requests.get(url, timeout=10)
data.raise_for_status()
except (requests.exceptions.RequestException, requests.exceptions.HTTPError) as e:
log.debug('Corona: error retrieving data for today: {0}'.format(e))
try:
day = date.today() - timedelta(days=1)
day = day.strftime('%m-%d-%Y')
url = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/{0}.csv".format(day)
data = requests.get(url, timeout=10)
except (requests.exceptions.RequestException, requests.exceptions.HTTPError) as e:
log.debug('Corona: error retrieving data for yesterday: {0}'.format(e))
return
else:
git = True
data = csv.DictReader(data.iter_lines(decode_unicode = True))
else:
git = True
data = csv.DictReader(data.iter_lines(decode_unicode = True))
else: else:
api = True r = json.loads(r.content.decode())
data = json.loads(data.content.decode()) data = r.get('features')
data = data.get('features')
if not data: if not data:
log.debug("Corona: Error retrieving features data from API.") log.debug("Corona: Error retrieving features data from API.")
return return data
@wrap([optional('text')])
def corona(self, irc, msg, args, search):
"""[region]
Displays Coronavirus statistics. Add a region name to search for country/state
specific results. Accepts full country/state names or ISO 3166-1 alpha-2 (two
character) country abbreviations and US Postal (two character) state abbreviations.
Invalid region names or search terms without data return global results.
"""
git = api = False
data = self.getAPI()
if data:
api = True
else:
data = self.getCSV()
if data:
git = True
if not data:
irc.reply("Error. Unable to access database.")
return
total_confirmed = total_deaths = total_recovered = 0 total_confirmed = total_deaths = total_recovered = 0
confirmed = deaths = recovered = 0 confirmed = deaths = recovered = 0
location = 'Global' location = 'Global'
@ -414,10 +430,10 @@ class Corona(callbacks.Plugin):
else: else:
region = r.get('Country/Region') region = r.get('Country/Region')
state = r.get('Province/State') state = r.get('Province/State')
if len(search) == 2 and search.lower() != 'us' and search.lower() != 'uk': if len(search) == 2:
if self.registryValue("countryFirst", msg.channel): if self.registryValue("countryFirst", msg.channel):
try: try:
search = CC[search.upper()] search = countries[search.upper()]
except KeyError: except KeyError:
try: try:
search = states[search.upper()] search = states[search.upper()]
@ -428,12 +444,10 @@ class Corona(callbacks.Plugin):
search = states[search.upper()] search = states[search.upper()]
except KeyError: except KeyError:
try: try:
search = CC[search.upper()] search = countries[search.upper()]
except KeyError: except KeyError:
pass pass
if 'china' in search.lower(): if search.lower() == 'usa' or 'united states' in search.lower():
search = 'mainland china'
elif search.lower() == 'usa' or 'united states' in search.lower():
search = 'us' search = 'us'
elif 'united kingdom' in search.lower(): elif 'united kingdom' in search.lower():
search = 'uk' search = 'uk'
@ -469,4 +483,3 @@ class Corona(callbacks.Plugin):
irc.reply(template) irc.reply(template)
Class = Corona Class = Corona