diff --git a/Src/medi_fetch/fetchinfo.py b/Src/medi_fetch/fetchinfo.py new file mode 100644 index 0000000..81c2d43 --- /dev/null +++ b/Src/medi_fetch/fetchinfo.py @@ -0,0 +1,44 @@ +# MEDICATION REMINDER SYSTEM FOR SENIORS +# database: SQLite 3 +# Modules required: sqlite3 +# -*- coding: utf-8 -*- +# Author: TOMYUE(tang yue) in DASE_ECNU 2021 + +import sqlite3 +import re; + +def fetch(): + try: + # scan gun input the barcode of the medicine,barcode_scan is a string + barcode_scan = input() + # connect the database to query the medication + conn = sqlite3.connect('medicine.db') + cur = conn.cursor() + + sql ="SELECT rowid,* FROM medicine_chengyao WHERE Barcode='"+barcode_scan+"';" + + cur.execute(sql) + data = cur.fetchone() + # --------------------------- + medication_name = data[1] # tansmit the name of the product to the TTS + # --------------------------- + #print(data[1]) + pattern = re.sub("\\(.*\\)", "", medication_name) + print(pattern) + #print() + print(data) + + conn.commit() + + conn.close() + return medication_name + + except TypeError as error: + # print("Error while executing:", error) + return "None" # the medication,which not be found,will be audio boardcst the name of the medication + + finally: + if conn: + conn.close() + # print("sqlite connection is closed") + diff --git a/Src/medi_fetch/func_db_cy.py b/Src/medi_fetch/func_db_cy.py new file mode 100644 index 0000000..cb59a4e --- /dev/null +++ b/Src/medi_fetch/func_db_cy.py @@ -0,0 +1,59 @@ +# MEDICATION REMINDER SYSTEM FOR SENIORS +# database: SQLite 3 +# Modules required: sqlite3 +# -*- coding: utf-8 -*- +# Author: TOMYUE(tang yue) in DASE_ECNU 2021 +import sqlite3 +import sqlite_database + +def show_all(info): +# connect to a database + conn=sqlite3.connect('medicine.db') +# Create a cursor + cur = conn.cursor() +# Query the database + cur.execute("SELECT rowid,*FROM medicine_chengyao") + items = cur.fetchall() + for item in items: + print(item) + +# commit my command + conn.commit() +# close our connect + conn.close() + +def add_one(info): + conn = sqlite3.connect('medicine.db') + cur = conn.cursor() + cur.execute("INSERT INTO medicine_chengyao VALUES(?,?,?,?,?,?,?,?,?,?)", + (info.get("产品名称", "NULL"), info.get("规格", "NULL"), info.get("剂型", "NULL"), info.get("包装单位", "NULL"), + info.get("生产厂家", "NULL"), + info.get("条形码", "NULL"), info.get("主治疾病", "NULL"), info.get("批准文号", "NULL"), info.get("是否处方", "NULL"), + info.get("说明书", "NULL"))) + conn.commit() + conn.close() + + +def add_many(info): + conn = sqlite3.connect('medicine.db') + cur= conn.cursor() + cur.executemany("INSERT INTO medicine_chengyao VALUES(?,?,?,?,?,?,?,?,?,?)",(info.get("产品名称","NULL"),info.get("规格","NULL"),info.get("剂型","NULL"),info.get("包装单位","NULL"),info.get("生产厂家","NULL"), + info.get("条形码","NULL"),info.get("主治疾病","NULL"),info.get("批准文号","NULL"),info.get("是否处方","NULL"),info.get("说明书","NULL"))) + conn.commit() + conn.close() + +def delete_select_item(info): + conn = sqlite3.connect('medicine.db') + cur = conn.cursor() + cur.execute("DELETE FROM medicine_chengyao WHERE Barcode=(?)",info["条形码"]) + conn.commit() + conn.close() + +def delete_all(info): + conn = sqlite3.connect('medicine.db') + cur = conn.cursor() + cur.execute("DROP TABLE medicine_chengyao") + conn.commit() + conn.close() + + diff --git a/Src/medi_fetch/identifier.sqlite b/Src/medi_fetch/identifier.sqlite new file mode 100644 index 0000000..06d7405 Binary files /dev/null and b/Src/medi_fetch/identifier.sqlite differ diff --git a/Src/medi_fetch/main.py b/Src/medi_fetch/main.py new file mode 100644 index 0000000..fc88780 --- /dev/null +++ b/Src/medi_fetch/main.py @@ -0,0 +1,139 @@ +# Medicine Infomation Spider +# Spider: requests +# parser: XPath +# database: ? +# Modules required: requests,lxml,(database connection) +# -*- coding: utf-8 -*- +# author:Shen tongle in DASE_ECNU 2021 + +import requests +from lxml import etree +import time +import sqlite3 + + +class Medicine: + def __init__(self): + self.head = "https://www.315jiage.cn/" + self.user = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36" + self.headers = { + "User-agent": self.user + } + self.flag = 0 + self.failed_num = 0 + self.conn = sqlite3.connect('medicine.db') + self.cur = self.conn.cursor() + + + def get_data(self, type, page): + self.flag = 0 + url = f"https://www.315jiage.cn/mc{type}p{page}.aspx" + response = requests.get(url, headers=self.headers, timeout=30) + self.content = response.content.decode("utf-8") + html = etree.HTML(self.content) + if html.xpath("//head/title/text()")[0][0] == "您": + self.flag += 1 + return + results = html.xpath("""//div[@class="col-2"]/a[@target="_blank"]/@href""") + print(f"Browsing page {page}") + count = 0 + for each_id in results: + try: + new_url = self.head + each_id + resp = requests.get(new_url, headers=self.headers) + content = resp.content.decode("utf-8") + ehtml = etree.HTML(content) + + info = {} + + name = ehtml.xpath("""//span[@itemprop="name"]/text()""")[0] + info["产品名称"] = name + + base_info = ehtml.xpath("""//div[@class = "block-info-prop text-oneline"]//text()""") + titles = ['规格:', '剂型:', '包装单位:', '批准文号:', '生产厂家:', '条形码:', '主治疾病:'] + for each in base_info: + if each in titles: + if each == '规格:' or each == '剂型:': + for every_info in base_info[base_info.index(each) + 1:]: + if every_info in titles: + break + else: + info[each[:-1]] = every_info[:-3] + break + elif each == '主治疾病:': + for every_info in base_info[base_info.index(each) + 1:]: + if every_info in titles: + break + else: + illness = "" + info[each[:-1]] = illness.join(every_info.replace("\xa0", "").split()) + break + else: + for every_info in base_info[base_info.index(each) + 1:]: + if every_info in titles: + break + else: + info[each[:-1]] = every_info + break + info["主治疾病"]="测试" + info["批准文号"] = ehtml.xpath("//td/div/u/a/text()")[0] + + info["是否处方"] = bool(ehtml.xpath("""//td/div/span[@class="cRed"]""")) + + temp = ehtml.xpath("""//ul[@class="property"]//text()""") + contents = [] + for content in temp: + if content not in contents: + contents.append(content) + + contents.pop(contents.index(" ")) + + # info["说明书"] = contents + SMS = "" + + info["说明书"] = SMS.join(contents) + + count += 1 + print(f"Saving infomation {page}-{count}") + time.sleep(0.65) + # All infomation has been downloaded and preprocessed! + # ----------------------------------------- + print(info) + # try: + # self.cur.execute("INSERT INTO medicine_chengyao VALUES(?,?,?,?,?,?,?,?,?,?)", + # (info.get("产品名称", "NULL"), info.get("规格", "NULL"), info.get("剂型", "NULL"), + # info.get("包装单位", "NULL"), info.get("生产厂家", "NULL"), + # info.get("条形码", "NULL"), info.get("主治疾病", "NULL"), info.get("批准文号", "NULL"), + # info.get("是否处方", "NULL"), info.get("说明书", "NULL"))) + # self.conn.commit() + # except(sqlite3.Error): + # self.conn.rollback() + # print("saving error!") + # 'info' is going to be saved in one database + # Writing saving codes below...... + except(IndexError,requests.HTTPError,TimeoutError,requests.exceptions.ConnectionError): + print("Failed to download data!") + self.failed_num += 1 + continue + + + + +def main(): + medicine = Medicine() + types = [118, 119, 131] + a = [131] + for type in a: + for i in range(0,2500): + medicine.get_data(type, i + 1) + time.sleep(0.1) + if medicine.flag == 1: + break + print("下载失败的条目数量:", medicine.failed_num) + medicine.conn.close() + + +if __name__ == "__main__": + main() + +# failed in 429, 430 is missing should be complemented diff --git a/Src/medi_fetch/sqlite_database.py b/Src/medi_fetch/sqlite_database.py new file mode 100644 index 0000000..8474fcf --- /dev/null +++ b/Src/medi_fetch/sqlite_database.py @@ -0,0 +1,42 @@ +# MEDICATION REMINDER SYSTEM FOR SENIORS +# database: SQLite 3 +# Modules required: sqlite3 +# -*- coding: utf-8 -*- +# Author: TOMYUE(tang yue) in DASE_ECNU 2021 +import sqlite3 + +try: + conn = sqlite3.connect("medicine.db") + + sql_query_1 = '''CREATE TABLE medicine_chengyao( + Products_name TEXT, + Specfications TEXT, + Formulation TEXT , + Packing_unit TEXT , + Company TEXT , + Barcode TEXT , + Main_treat_disease TEXT , + Approval_number TEXT , + OTC_test TEXT , + Instructions TEXT); + ''' + cur = conn.cursor() + print("Successfully Connected to SQLite") + print() + + cur.execute(sql_query_1) + conn.commit() + print("SQLite table created") + + cur.close() + +except sqlite3.Error as error: + print("Error while executing:", error) + +finally: + if conn: + conn.close() + print("sqlite connection is closed") + + +