def connect_parse_data(source: str) -> pd.Series: soup = get_soup(source) counters = soup.find_all(class_="elementor-counter-number") assert len(counters) == 4, "New counter in dashboard?" total_vaccinations = clean_count(counters[0]["data-to-value"]) first_doses = clean_count(counters[1]["data-to-value"]) second_doses = clean_count(counters[2]["data-to-value"]) unique_doses = clean_count(counters[3]["data-to-value"]) people_vaccinated = first_doses + unique_doses people_fully_vaccinated = second_doses + unique_doses date = localdate("America/Jamaica") return pd.Series( data={ "total_vaccinations": total_vaccinations, "people_vaccinated": people_vaccinated, "people_fully_vaccinated": people_fully_vaccinated, "date": date, } )
def parse_data(self, soup): widgets = soup.find_all(class_="textwidget") total_vaccinations = clean_count(widgets[0].text) people_fully_vaccinated = clean_count(widgets[1].text) people_vaccinated = total_vaccinations - people_fully_vaccinated return pd.Series({ "total_vaccinations": total_vaccinations, "people_vaccinated": people_vaccinated, "people_fully_vaccinated": people_fully_vaccinated, "date": localdate("Asia/Tbilisi"), })
def connect_parse_data(source: str) -> pd.Series: soup = get_soup(source) people_vaccinated = soup.find_all(class_="repart-stlucia")[0].text people_vaccinated = clean_count(people_vaccinated) people_fully_vaccinated = soup.find_all(class_="repart-stlucia")[1].text people_fully_vaccinated = clean_count(people_fully_vaccinated) total_vaccinations = people_vaccinated + people_fully_vaccinated date = localdate("America/St_Lucia") data = { "total_vaccinations": total_vaccinations, "people_vaccinated": people_vaccinated, "people_fully_vaccinated": people_fully_vaccinated, "date": date, } return pd.Series(data=data)
def read(source: str) -> pd.Series: soup = get_soup(source) people_vaccinated = clean_count( re.search(r"^[\d,]+", soup.find_all(class_="info-box-number")[2].text).group(0) ) people_fully_vaccinated = clean_count( re.search(r"^[\d,]+", soup.find_all(class_="info-box-number")[3].text).group(0) ) total_vaccinations = people_vaccinated + people_fully_vaccinated date = localdate("Asia/Dhaka") return pd.Series( data={ "total_vaccinations": total_vaccinations, "people_vaccinated": people_vaccinated, "people_fully_vaccinated": people_fully_vaccinated, "date": date, } )
def connect_parse_data(source: str) -> pd.Series: soup = get_soup(source) df = pd.read_html(str(soup.find(class_="vaccination-count")))[0] assert df.shape == (3, 7) values = df.iloc[:, 2].values total_vaccinations = values[0] people_vaccinated = values[1] people_fully_vaccinated = values[2] assert total_vaccinations == people_vaccinated + people_fully_vaccinated date = soup.find(class_="aly_tx_center").text date = localdate("Asia/Tokyo") data = { "total_vaccinations": total_vaccinations, "people_vaccinated": people_vaccinated, "people_fully_vaccinated": people_fully_vaccinated, "date": date, } return pd.Series(data=data)
def connect_parse_data(source: str) -> pd.Series: op = Options() op.add_argument("--headless") with webdriver.Chrome(options=op) as driver: driver.get(source) time.sleep(5) total_vaccinations = clean_count(driver.find_element_by_id("counter1").text) people_vaccinated_share = driver.find_element_by_id("counter4").text assert "One dose" in people_vaccinated_share people_fully_vaccinated_share = driver.find_element_by_id("counter4a").text assert "Two doses" in people_fully_vaccinated_share # This logic is only valid as long as Qatar *exclusively* uses 2-dose vaccines people_vaccinated_share = float( re.search(r"[\d.]+", people_vaccinated_share).group(0) ) people_fully_vaccinated_share = float( re.search(r"[\d.]+", people_fully_vaccinated_share).group(0) ) vaccinated_proportion = people_vaccinated_share / ( people_vaccinated_share + people_fully_vaccinated_share ) people_vaccinated = round(total_vaccinations * vaccinated_proportion) people_fully_vaccinated = total_vaccinations - people_vaccinated date = localdate("Asia/Qatar") data = { "total_vaccinations": total_vaccinations, "people_vaccinated": people_vaccinated, "people_fully_vaccinated": people_fully_vaccinated, "date": date, } return pd.Series(data=data)
def set_date() -> str: return localdate("America/Paramaribo")
def _weekday_to_date(self, d): new_date = clean_date(d + "+5", "%Y-W%W+%w") if new_date > localdate("Europe/London"): new_date = clean_date(d + "+2", "%Y-W%W+%w") return new_date
def set_date(ds: pd.Series) -> pd.Series: date = localdate("America/Cayman") return enrich_data(ds, "date", date)
def date_str(self): return localdate("Asia/Calcutta", force_today=True)
def enrich_date(ds: pd.Series) -> pd.Series: return enrich_data(ds, "date", localdate("Europe/Luxembourg"))
def pipe_date(self, ds: pd.Series) -> pd.Series: date = localdate("Brazil/East") return enrich_data(ds, "date", date)
def format_date(ds: pd.Series) -> pd.Series: date = localdate("Asia/Beirut") return enrich_data(ds, "date", date)
def pipe_date(self, ds: pd.Series) -> pd.Series: return enrich_data(ds, "date", localdate("Asia/Bishkek"))
def format_date(ds: pd.Series) -> pd.Series: date = localdate("Europe/Isle_of_Man") return enrich_data(ds, "date", date)
def pipe_date(self, ds: pd.Series) -> pd.Series: date = localdate("Africa/Casablanca") return enrich_data(ds, "date", date)
def enrich_date(ds: pd.Series) -> pd.Series: date_str = localdate("America/Curacao") return enrich_data(ds, "date", date_str)
def get_date() -> str: return localdate("Europe/Helsinki")
def enrich_date(ds: pd.Series) -> pd.Series: date = localdate("Europe/Sofia") return enrich_data(ds, "date", date)
def _parse_data(self, soup: BeautifulSoup) -> pd.Series: return pd.Series( data={ "date": localdate("Africa/Johannesburg"), "total_vaccinations": self._parse_total_vaccinations(soup), })
def enrich_date(ds: pd.Series) -> pd.Series: date = localdate("America/Aruba") return enrich_data(ds, "date", date)
def format_date(ds: pd.Series) -> pd.Series: date = localdate("Europe/Chisinau") return enrich_data(ds, "date", date)
def enrich_date(ds: pd.Series) -> pd.Series: return enrich_data(ds, "date", localdate("Asia/Jakarta", force_today=True))
def pipe_format_date(self, ds: pd.Series) -> pd.Series: date = localdate("Atlantic/Faeroe") return enrich_data(ds, "date", date)
def format_date(ds: pd.Series) -> pd.Series: date = localdate("America/Argentina/Buenos_Aires", 8) return enrich_data(ds, "date", date)
def pipe_date(self, ds: pd.Series) -> pd.Series: date = localdate("Asia/Amman") return enrich_data(ds, "date", date)