@ -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") | |||||
@ -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() | |||||
@ -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 |
@ -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") | |||||