Example #1
0
    def make_summaries(self) -> None:
        # 最終データの日の次の日を最終更新日とする
        # last_update = (
        #     self.main_summary_sheet.cell(row=self.summary_count - 1, column=1).value +
        #     timedelta(days=1)
        # ).strftime("%Y/%m/%d %H:%M")
        last_update = self.last_update

        # patients_summaryとinspections_summaryを同時に生成する
        # スクリプト実行時間短縮のため、同時に生成している。
        self._patients_summary_json = template_json(last_update)
        self._inspections_summary_json = template_json(last_update)

        for i in range(summary_first_cell, self.summary_count):
            date = self.main_summary_sheet.cell(
                row=i, column=1).value + timedelta(hours=8)
            # 陽性患者数を取得する
            patients = self.main_summary_sheet.cell(row=i, column=4).value
            # 検査人数を取得する
            inspections = self.main_summary_sheet.cell(row=i, column=2).value
            # Excelのセル内に0すら入っていないときはNoneが返ってくるので、0を代入しなおす。
            if patients is None:
                patients = 0
            if inspections is None:
                inspections = 0
            self._patients_summary_json["data"].append(
                make_data(date.isoformat() + "Z", patients))
            self._inspections_summary_json["data"].append(
                make_data(date.isoformat() + "Z", inspections))
Example #2
0
    def make_contacts(self) -> None:
        # 最終データの日の次の日を最終更新日とする
        # last_update = (
        #     self.contacts_sheet.cell(row=self.contacts_count - 1, column=1).value +
        #     timedelta(days=1)
        # ).strftime("%Y/%m/%d %H:%M")
        last_update = self.last_update

        # contacts_summaryとhealth_center_summaryを同時に生成する。
        # スクリプト実行時間短縮のため、同時に生成している。
        self._contacts_summary_json = template_json(last_update)
        self._health_center_summary_json = template_json(last_update)

        column_name = self.contacts_sheet.cell(row=contacts_first_cell - 1,
                                               column=2).value.replace(
                                                   "\n", "")
        health_center_field = 6

        for i in range(contacts_first_cell, self.contacts_count):
            # 日時の取得
            # date = excel_date(self.contacts_sheet.cell(row=i, column=1).value)
            date = self.contacts_sheet.cell(
                row=i, column=1).value + timedelta(hours=8)
            if "健康相談窓口" in column_name and "帰国者・接触者相談センター" in column_name:
                # 日別窓口(相談センター)相談者数の取得
                contacts = self.contacts_sheet.cell(row=i, column=2).value
                # Excelのセル内に0すら入っていないときはNoneが返ってくるので、0を代入しなおす。
                if contacts is None:
                    contacts = 0
                health_center_field = 4
            else:
                # 日別窓口相談者数の取得
                window_contacts = self.contacts_sheet.cell(row=i,
                                                           column=2).value
                # 日別帰国者・接触者コールセンター相談者数の取得
                center_contacts = self.contacts_sheet.cell(row=i,
                                                           column=4).value
                # Excelのセル内に0すら入っていないときはNoneが返ってくるので、0を代入しなおす。
                if window_contacts is None:
                    window_contacts = 0
                if center_contacts is None:
                    center_contacts = 0
                contacts = window_contacts + center_contacts
            # 日別保健所・保健センター相談者数の取得
            health_center = self.contacts_sheet.cell(
                row=i, column=health_center_field).value
            # Excelのセル内に0すら入っていないときはNoneが返ってくるので、0を代入しなおす。
            if health_center is None:
                health_center = 0
            self._contacts_summary_json["data"].append(
                make_data(date.isoformat() + "Z", contacts))
            self._health_center_summary_json["data"].append(
                make_data(date.isoformat() + "Z", health_center))
Example #3
0
    def make_summaries(self) -> None:
        # 最終データの日の次の日を最終更新日とする
        last_update = (
            self.main_summary_sheet.cell(row=self.summary_count - 1, column=1).value +
            timedelta(days=1)
        ).strftime("%Y/%m/%d %H:%M")
        # patients_summaryとinspections_summaryを同時に生成する
        # スクリプト実行時間短縮のため、同時に生成している。
        self._patients_summary_json = template_json(last_update)
        self._inspections_summary_json = template_json(last_update)

        for i in range(summary_first_cell, self.summary_count):
            date = self.main_summary_sheet.cell(row=i, column=1).value + timedelta(hours=8)
            # 陽性患者数を取得する
            patients = self.main_summary_sheet.cell(row=i, column=4).value
            # 検査人数を取得する
            inspections = self.main_summary_sheet.cell(row=i, column=2).value
            self._patients_summary_json["data"].append(make_data(date.isoformat() + "Z", patients))
            self._inspections_summary_json["data"].append(make_data(date.isoformat() + "Z", inspections))
Example #4
0
    def make_patients(self) -> None:
        # HTMLから最終更新日を取得する
        last_update_str = [
            x.get_text() for x in self.patients_html.find_all("p")
            if "更新日" in x.get_text()
        ][0][4:]
        last_update = datetime.strptime(last_update_str,
                                        "%Y年%m月%d日").strftime("%Y/%m/%d %H:%M")
        # patientsを生成する
        self._patients_json = template_json(last_update)

        # patientsは現状HTMLの表を使用して作成しているので、テーブル(レコード一覧)を取得する
        tables = self.patients_html.find_all("tr")
        # レコード(セル一覧)を取得する
        for cells in tables:
            # データの初期化
            data = {}
            # セルを取得する
            for i, cell in enumerate(cells.find_all("td")):
                # 何もないセルは"\u3000"が埋め込まれているのでリプレースして消す
                text = cell.get_text().replace("\u3000", "")
                # カラム名は飛ばす
                if text == "番号":  # i == 0と同意
                    break
                # 日付を取得する
                elif i == 1:
                    try:
                        date = datetime.strptime(
                            "2020年" + text, "%Y年%m月%d日") + timedelta(hours=8)
                        data["判明日"] = date.isoformat() + "Z"
                        data["date"] = date.strftime("%Y-%m-%d")
                    except Exception:
                        data["判明日"] = None
                        data["date"] = None
                # 年代を取得する
                elif i == 2:
                    data["年代"] = text + "代"
                # 性別を取得する
                elif i == 3:
                    data["性別"] = text
                # 備考を取得する
                elif i == 5:
                    # 市外在住を除外するため、備考欄を利用
                    if text == "市外在住":
                        # 下のif文で引っかからないようデータを初期化
                        data = {}
                        break
                    data["備考"] = text if text != "\xa0" and text else None
            if data:
                data["退院"] = None  # TODO: 退院データが現状ないため保留
                self._patients_json["data"].append(data)
        # 市外発表者も含むため、日時順でソート
        self._patients_json["data"].sort(
            key=lambda x: (x["date"] is None, x["date"]))