adm18/ntuh/submodule/ntuhgov.20230412/intra_old.py

966 lines
32 KiB
Python
Raw Permalink Normal View History

2025-09-16 05:20:19 +00:00
#!/usr/bin/python
# coding=utf-8
# 2010-09-16 move from project cyberknife
PASSWORD = 'n122119493'
from datetime import date
import mechanize
from urllib2 import urlopen
#from ClientForm import ParseResponse
import datetime
import hashlib
import re
import urllib
import urllib2
import pdb
import math
import pprint
pp = pprint.PrettyPrinter()
br = mechanize.Browser(factory=mechanize.RobustFactory())
br.set_handle_robots(False)
def xtrace(R):
pdb.set_trace()
def remove_space(s):
return s.replace(' ','').strip()
#print remove_space(' 123 ')
def minguo2ce(minguo):
pattern = '(\d+)\.([ 0-9]{1,2})\.([ 0-9]{1,2})'
s = re.search(pattern, minguo)
if s:
yy = int(s.group(1))+1911
try:
mm = int(s.group(2))
except:
mm = 1
try:
dd = int(s.group(3))
except:
dd = 1
return date( yy, mm , dd )
pattern = '(\d+)/([ 0-9]{1,2})/([ 0-9]{1,2})'
s = re.search(pattern, minguo)
if s:
yy = int(s.group(1))+1911
try:
mm = int(s.group(2))
except:
mm = 1
try:
dd = int(s.group(3))
except:
dd = 1
return date( yy, mm , dd )
return
#print minguo2ce(' 75.01.25')
########## Old intra system
def Default_Dr(REQUEST):
if (REQUEST.has_key('ChartNo')) and REQUEST['ChartNo'] != "":
values = { 'ChartNo' : REQUEST['ChartNo'] }
elif (REQUEST.has_key('Name')) and REQUEST['Name'] != "":
values = { 'Name' : REQUEST['Name'].decode('utf_8').encode('big5') }
elif (REQUEST.has_key('idcode')) and REQUEST['idcode'] != "":
values = { 'idcode' : REQUEST['idcode'] }
else:
return ""
url = 'http://intra.mc.ntu.edu.tw/main/ChartNo/Default_Dr.asp'
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
the_page = the_page.decode('big5','ignore').encode('utf_8')
pattern = ( '(?s)<td align="center">(.*?)</td>(.*?)'
+ '<td width="100"><font color="blue">(.*?)</font>(.*?)'
+ '<td align="center"><font color="blue">(.*?)</font>(.*?)'
+ '<td align="center">(.*?)</td>(.*?)'
+ '<td align="center">(.*?)</td>(.*?)'
+ '<td>(.*?)</td>(.*?)'
+ '<td>(.*?)</td>(.*?)'
+ '<td>(.*?)</td>' )
matches = re.findall(pattern, the_page)
result = []
for match in matches:
r = {}
r['name'] = remove_space(match[2])
r['medical_records'] = remove_space(match[4])
r['gender'] = remove_space(match[6])
r['birthday'] = minguo2ce(match[8])
r['address'] = remove_space(match[10])
r['phone'] = remove_space(match[12])
r['id_cards'] = remove_space(match[14])
result.append(r)
return result
#print Default_Dr({ 'HIS' : '',
# 'firstname' : '',
# 'MIS' : 'N122119493' })
def percent_encoding(keys, REQUEST):
data = {}
for key in keys:
if REQUEST.__contains__(key):
data[key] = REQUEST[key]
return urllib.urlencode(data)
#print percent_encoding(['HIS','MIS'],
# { 'HIS' : '3009684',
# 'firstname' : '',
# 'MIS' : 'N122119493' })
def CheckUser():
br.open("http://intra.mc.ntu.edu.tw/CheckUser_Ehospital.asp?myurl=default_Ehospital.asp")
br.select_form(name="form1")
br["uid"] = 'dtsurg08'
br["pwd"] = 'x'
response = br.submit() # submit current form
return response.read()
def chinese2date(chinese):
pattern = '(\d+)(\D+)(\d{1,2})(\D+)(\d{1,2})'
s = re.search(pattern, chinese)
if s:
yy = int(s.group(1))
mm = int(s.group(3))
dd = int(s.group(5))
return date( yy, mm , dd )
return
def oncrt_query(ChartNo):
url = "http://intra.mc.ntu.edu.tw/DigReport/ONC_RT/oncrt_query.asp"
response = br.open(url)
if response.read().decode('big5','ignore').encode('utf_8').find('閒置時間超過六十分鐘'):
CheckUser()
response = br.open(url)
br.select_form(name="FrontPage_Form1")
br["ChartNo"] = str(ChartNo)
response = br.submit()
body = response.read().decode('big5','ignore').encode('utf_8')
htmlcomments = re.compile('\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>')
body = htmlcomments.sub('', body)
# print body
# body = body[body.find('←テᄄ¦ᄑヘ'):]
pattern = (
'(?s)<tr align="center">(\s*?)'
+'<td>(.*?)</td>(\s*?)'
+'<td>(.*?)</td>(\s*?)'
+'<td>(.*?)</td>(\s*?)'
+'<td>(.*?)</td>(\s*?)'
+'<td>(.*?)</td>(\s*?)'
+'<td>(.*?)</td>(\s*?)'
+'<td>(.*?)</td>(\s*?)'
+'<td>(.*?)</td>(\s*?)'
+'<td align="left">(.*?)</td>'
)
matches = re.findall(pattern, body)
result = []
for match in matches:
r = {}
r['site'] = remove_space(match[1])
r['way'] = remove_space(match[3])
r['radiation_energy'] = remove_space(match[5])
r['number_of_treatment'] = remove_space(match[7])
r['total_dose'] = remove_space(match[9])
r['start_date'] = chinese2date(match[11])
r['end_date'] = chinese2date(match[13])
r['the_number_of_treatment'] = remove_space(match[15])
r['remarks'] = remove_space(match[17])
result.append(r)
return result
def op_note_case(ChartNo):
url = "http://intra.mc.ntu.edu.tw/DigReport/OpNote/case.asp"
response = br.open(url)
if response.read().decode('big5','ignore').encode('utf_8').find('閒置時間超過六十分鐘'):
CheckUser()
response = br.open(url)
br.select_form(name="FrontPage_Form1")
br["ChartNo"] = str(ChartNo)
response = br.submit()
body = response.read().decode('big5','ignore').encode('utf_8')
htmlcomments = re.compile('\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>')
body = htmlcomments.sub('', body)
# print body
# body = body[body.find('←テᄄ¦ᄑヘ'):]
pattern = (
'(?s)<TD ALIGN="center"><A HREF="OpNote.asp\?ChartNo=([^\n\r]*)(\s*?)'
+'([^\n\r]*?)(\s*?)'
+'</A></TD>(\s*?)'
+'<TD ALIGN="center">(\s*?)'
+'([^\n\r]*?)(\s*?)'
+'</TD>(\s*?)'
+'<TD>(\s*?)'
+'([^\n\r]*?)(\s*?)'
+'</TD>(\s*?)'
+'<TD>(\s*?)'
+'([^\n\r]*?)(\s*?)'
+'</TD>'
)
matches = re.findall(pattern, body)
result = []
for match in matches:
r = {}
r['surgery_date_time'] = minguo2ce(match[2])
r['division'] = remove_space(match[6])
r['name_surgery'] = remove_space(match[10])
r['surgeon'] = remove_space(match[14])
result.append(r)
return result
def path_exam(ChartNo):
url = "http://intra.mc.ntu.edu.tw/DigReport/Lab/PathExam.asp"
response = br.open(url)
if response.read().decode('big5','ignore').encode('utf_8').find('閒置時間超過六十分鐘'):
CheckUser()
response = br.open(url)
br.select_form(name="FrontPage_Form1")
br["ChartNo"] = str(ChartNo)
response = br.submit()
body = response.read().decode('big5','ignore').encode('utf_8')
htmlcomments = re.compile('\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>')
body = htmlcomments.sub('', body)
# print body
# body = body[body.find('←テᄄ¦ᄑヘ'):]
'''
<TD ALIGN="center" WIDTH="50"><A HREF="PathReport_new.asp?PathCode=S0900742&amp;ChartNo=4129089&amp;ChineseName=¥ᄡヤ₩ヨヌ￧ᄃタ &amp;Sex=M&amp;Birthday=+0120815&amp;SpecimenCode=b &amp;SpecimenGetDate=098/01/08&amp;ReportDate=098/01/09&amp;VSIdNo=DTPAT031 &amp;RIdNo=&amp;ExamDr=DTPAT031 &amp;InCharge=¥ᄚᄂ¥ヨト￧ミᆭ ">S0900742</A></TD>
<TD ALIGN="center" WIDTH="80">HMC </TD>
<TD></TD>
<TD>b </TD>
<TD>098/01/08</TD>
<TD>098/01/09</TD>
'''
pattern = '''\
<TD ALIGN="center" WIDTH="50"><A HREF="PathReport(.*?).asp\?PathCode=(.*?)&amp;ChartNo=(.*?)&amp;ChineseName=(.*?)&amp;Sex=(.*?)&amp;Birthday=(.*?)&amp;SpecimenCode=(.*?)&amp;SpecimenGetDate=(.*?)&amp;ReportDate=(.*?)&amp;VSIdNo=(.*?)&amp;RIdNo=(.*?)&amp;ExamDr=(.*?)&amp;InCharge=(.*?)">(.*?)</A></TD>(\s*?)\
<TD ALIGN="center" WIDTH="80">(.*?)</TD>(\s*?)\
<TD>(.*?)</TD>(\s*?)\
<TD>(.*?)</TD>(\s*?)\
<TD>(.*?)</TD>(\s*?)\
<TD>(.*?)</TD>\
'''
matches = re.findall(pattern, body)
result = []
for match in matches:
# print match
r = {}
r['path_code'] = remove_space(match[1])
r['specimen_code'] = remove_space(match[6])
r['specimen_get_date'] = minguo2ce(match[7])
r['report_date'] = minguo2ce(match[8])
r['division'] = remove_space(match[15])
r['bed'] = remove_space(match[17])
purl = 'http://intra.mc.ntu.edu.tw/DigReport/Lab/PathReport.asp?PathCode=%s' % r['path_code']
# print purl
presponse = br.open(purl)
pbody = presponse.read().decode('big5','ignore').encode('utf_8')
pbody = htmlcomments.sub('', pbody)
'''
<td colspan="5" bgcolor="#F8F0E0" width="534"><font color="red">
Liver, biopsy, hepatocellular carcinoma<br>
'''
ppattern = '<td colspan="5" bgcolor="#F8F0E0" width="534"><font color="red">(.*?)(<br>|</font>)'
pmatches = re.findall(ppattern, pbody, re.DOTALL)
# print pmatches
report = []
for pmatch in pmatches:
report.append(remove_space(pmatch[0]))
# print report
r['report'] = ','.join(report)
result.append(r)
return result
def XrayExam(ChartNo):
url = "http://intra.mc.ntu.edu.tw/DigReport/Xray/XrayExam.asp"
url = 'http://portal.ntuh.gov.tw/DigReport/Xray/XrayExam.asp'
response = br.open(url)
if response.read().decode('big5','ignore').encode('utf_8').find('閒置時間超過六十分鐘'):
CheckUser()
response = br.open(url)
body = {}
br.select_form(name="FrontPage_Form1")
br["ChartNo"] = str(ChartNo)
br["durnum"] = ['12']
br["reptype"] = ['CT']
br["dattype"] = ['Y']
response = br.submit()
body['CT'] = response.read().decode('big5','ignore').encode('utf_8')
br.select_form(name="FrontPage_Form1")
br["ChartNo"] = str(ChartNo)
br["durnum"] = ['12']
br["reptype"] = ['MRI']
br["dattype"] = ['Y']
response = br.submit()
body['MRI'] = response.read().decode('big5','ignore').encode('utf_8')
# pattern="<a href='Ximage/XrayReport.asp?reportseqno=A20080629173&amp;ChartNo=4399879&amp;ChineseName=陳建錫 &amp;Sex=M&amp;Birthday=+0451119&amp;ExamDate=2008-06-28&amp;accessno=T0089317804&amp;ReferNo=T0089317804&amp;status=5'>Pelvis: for THR</a>"
pattern="<a href='(Ximage/XrayReport.asp\\?reportseqno=(.*?)&amp;ChartNo=(.*?)&amp;ChineseName=(.*?)&amp;Sex=(.*?)&amp;Birthday=(.*?)&amp;ExamDate=(.*?)&amp;accessno=(.*?)&amp;ReferNo=(.*?)&amp;status=(.*?))'>(.*?)</a>"
# pattern="Ximage/XrayReport.asp?reportseqno=(.*?)"
pattern = pattern.replace("'", "\\'")
pattern = pattern.replace('&', '\\&')
results = []
for m in ['CT', 'MRI']:
matches = re.findall(pattern, body[m])
for match in matches:
r = {}
r['reportseqno'] = remove_space(match[0])
r['ChartNo'] = remove_space(match[1])
r['ChineseName'] = remove_space(match[2])
r['Sex'] = remove_space(match[3])
r['Birthday'] = remove_space(match[4])
r['ExamDate'] = remove_space(match[5])
r['accessno'] = remove_space(match[6])
r['ReferNo'] = remove_space(match[7])
r['status'] = remove_space(match[8])
r['LinkOrderName'] = remove_space(match[9])
r['Modality'] = m
results.append(r)
pp.pprint(urllib2.unquote(match[0]))
# pp.pprint(results)
return results
########################################New portal systemn
def Login():
br.open("http://portal.ntuhrs.ntuh.gov.tw/General/Login.aspx")
br.select_form(name="Form1")
# br["rdblQuickMenu"] = ['O']
br["txtUserID"] = '004552'
br["txtPass"] = hashlib.md5(PASSWORD).hexdigest()
# print br.possible_items("rdblQuickMenu")
# print br.form
response = br.submit() # submit current form
pattern = "http://hisaw.ntuh.gov.tw/WebApplication/Clinics/OpenClinics.aspx\?SESSION=(\w*)"
string = str(response.read())
# print string
matches = re.findall(pattern, string)
return matches[0]
def HeightWeight(PersonID):
SESSION = Login()
url = "http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/QueryHeightWeightByPersonID.aspx?SESSION=%s&PersonID=%s" % (SESSION,PersonID)
response = br.open(url)
body = response.read()
'''
<span id="PatientHeightWeightGrid_ctl03_HeightLabel">171</span>
</font></td><td align="left"><font color="#333333">
<span id="PatientHeightWeightGrid_ctl03_HeightPerLabel"></span>
</font></td><td align="left"><font color="#333333">
<span id="PatientHeightWeightGrid_ctl03_WeightLabel">75</span>
'''
pattern = '''\
<span id="PatientHeightWeightGrid_ctl03_HeightLabel">(.*?)</span>(\s*?)\
</font></td><td align="left"><font color="#333333">(\s*?)\
<span id="PatientHeightWeightGrid_ctl03_HeightPerLabel">(.*?)</span>(\s*?)\
</font></td><td align="left"><font color="#333333">(\s*?)\
<span id="PatientHeightWeightGrid_ctl03_WeightLabel">(.*?)</span>\
'''
matches = re.findall(pattern, body)
# print matches[0]
if matches:
h = matches[0][0]
w = matches[0][6]
else:
h = 0
w = 0
try:
bsa = math.sqrt(float(h) * float(w) / 3600) #Mosteller formula
except:
bsa = 0
return {'Height': h, 'Weight': w, 'BSA': bsa}
def ReportResult(PersonID):
SESSION = Login()
url = "http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/ReportResultQuery.aspx?SESSION=%s&PersonID=%s" % (SESSION,PersonID)
response = br.open(url)
br.select_form(name="Form1")
response = br.submit() # submit current form
body = response.read()
print body
return
response = urlopen(url)
forms = ParseResponse(response, backwards_compat=False)
form = forms[0]
print form
form.set_all_readonly(False)
form["__EVENTTARGET"] = "LinkbuttonRadReport"
# form.click() returns a urllib2.Request object
# (see HTMLForm.click.__doc__ if you don't have urllib2)
print urlopen(form.click()).read()
def icd_query(ChartNo):
Login()
br.select_form(name="Form1")
br["NTUHWeb1:QueryPersonIDByChartNo2:txbChartNoInput"] = str(ChartNo)
br["NTUHWeb1:QueryPersonIDByChartNo2:AutoShowRecord"] = True
response = br.submit() # submit current form
return response.read()
################## os.getcwd()##############
def get_path():
import os,sys
return os.path.realpath(os.path.dirname(sys.argv[0]))
###############################
vs = {}
def unf_byDisDate(deptcode, StartDate, EndDate):
import csv
reader = csv.reader(open(get_path()+"/vs.csv", "rb"))
for row in reader:
# print row[1], row[0]
vs[row[1]]=row[0]
url = "http://intra.mc.ntu.edu.tw/main/Discharge/unf_byDisDate.asp"
response = br.open(url)
br.select_form(nr=0)
br["deptcode"] = [deptcode]
br["StartDate"] = StartDate
br["EndDate"] = EndDate
response = br.submit()
body = response.read().decode('big5','ignore').encode('utf_8')
pattern = """
<tr>\s*
<td align="center" bgcolor="#FFFFFF">(.*?)</td>
<td align="center" bgcolor="#FFFFFF">(.*?)</td>
<td align="center" bgcolor="#FFFFFF">(.*?)</td>
<td align="center" bgcolor="#FFFFFF">(.*?)</td>
<td align="center" bgcolor="#FFFFFF">
<p align="left">
(.*?)
</td>
<td align="center" bgcolor="#FFFFFF">
(.*?)
</td>
<td align="center" bgcolor="#FFFFFF">(.*?)</td>
<td align="center" bgcolor="#FFFFFF">(.*?)</td>
<td align="center" bgcolor="#FFFFFF">(.*?)</td>
<td align="center" bgcolor="#FFFFFF">
(.*?)
</td>
<td align="center" bgcolor="#FFFFFF">(.*?)</td>
<td align="center" bgcolor="#FFFFFF">(.*?)</td>
</tr>
"""
pattern = pattern.replace('"', '\\"')
pattern = pattern.replace('\n', '\\s*')
matches = re.findall(pattern, body)
result = []
for match in matches:
r = {}
r['no'] = remove_space(match[0])
r['doctor_code'] = remove_space(match[1])
r['doctor_name'] = remove_space(match[2])
r['discharge_date'] = remove_space(match[3])
r['patients_name'] = remove_space(match[4])
r['medical_record_number'] = remove_space(match[5])
r['account'] = remove_space(match[6])
r['admission_date'] = remove_space(match[7])
r['hospital_ bed'] = remove_space(match[8])
r['category'] = remove_space(match[9])
r['dr'] = remove_space(match[10])
r['resident'] = remove_space(match[11])
if vs.has_key(r['dr']):
r['division'] = vs[r['dr']]
else:
r['division'] = 'Others'
result.append(r)
return result
def formatDate(sDate):
dScrap = sDate
iDay = dScrap.day
iMon = dScrap.month
iYea = dScrap.year
sDay = str(iDay)
sMon = str(iMon)
sYea = str(iYea - 1911)
if len(sDay) == 1:
sDay = "0" + sDay
if len(sMon) == 1:
sMon = "0" + sMon
if len(sYea) == 2:
sYea = "0" + sYea;
sScrap = sYea + sMon + sDay;
return sScrap;
def unf_sort(StartDay, EndDay):
StartDate = datetime.date.today() + datetime.timedelta(days=StartDay)
EndDate = datetime.date.today() + datetime.timedelta(days=EndDay)
result = unf_byDisDate('SURG', formatDate(StartDate), formatDate(EndDate))
dr = []
resident = []
division = []
for r in result:
dr.append(r['dr'])
resident.append(r['resident'])
division.append(r['division'])
# The count is doubled, so we div it by 2
dr_freq = [(a, dr.count(a)/2) for a in set(dr)]
dr_sort = sorted(dr_freq, key=lambda x: -x[1])
resident_freq = [(a, resident.count(a)/2) for a in set(resident)]
resident_sort = sorted(resident_freq, key=lambda x: -x[1])
division_freq = [(a, division.count(a)/2) for a in set(division)]
division_sort = sorted(division_freq, key=lambda x: -x[1])
# print "\n¦ᄌᄏ₩ᄇᄏ←ニᆱ¥ᄌᆱ,¦ᄏᄑ₩ユᄌ"
# for dr in dr_sort:
# print "%s,%s" % dr
#
# print "\n¦ᄑマ←ルᄁ←ニᆱ¥ᄌᆱ,¦ᄏᄑ₩ユᄌ"
# for resident in resident_sort:
# print "%s,%s" % resident
return {'dr': dr_sort,
'resident': resident_sort,
'division': division_sort,
}
def PACSImageShowList(PersonID, SESSION = Login()):
'''
Show list of PACS Image
'''
# url = "http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/PACSImageShowList.aspx?SESSION=%s&PatClass=I&AccountIDSE=10T01921636&PersonID=%s&Hosp=T0&Seed=20100915175850&EMRPop=Y" % (SESSION,PersonID)
url = "http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/PACSImageShowList.aspx?SESSION=%s&PatClass=I&PersonID=%s&Hosp=T0&EMRPop=Y" % (SESSION,PersonID)
# print url
response = br.open(url)
body = response.read()
#<span id="BloodCallRecordDataGrid_ctl02_PatChartNo">5554778</span>
#</td><td align="left">
#<span id="BloodCallRecordDataGrid_ctl02_RequestSheetNo">T0100881014</span>
#</td><td align="left">
#
#<span id="BloodCallRecordDataGrid_ctl02_ExamDate">20100907</span>
#</td><td align="left">
#<a onclick="OpenPACs();" id="BloodCallRecordDataGrid_ctl02_LinkOrderName" href="javascript:__doPostBack('BloodCallRecordDataGrid$ctl02$LinkOrderName','')"><font color="Black">Spine:Thoracolumbar AP, LAT.</font></a>
#</td><td align="left">
#<span id="BloodCallRecordDataGrid_ctl02_Modality">DX</span>
#</td><td align="left">
#<span id="BloodCallRecordDataGrid_ctl02_VerifiedStateString">￯﾿ᆬ￯ᄒᄋ￯ᄒᄇ￯﾿ᄃ￯ᄒᄁ￯ᄒᄎ￯﾿ᄄ￯ᄒᆰ￯ᄒヘ</span>
pattern="""
<span id="(.*?)_PatChartNo">(.*?)</span>
</td><td align="left">
<span id="(.*?)_RequestSheetNo">(.*?)</span>
</td><td align="left">
<span id="(.*?)_ExamDate">(.*?)</span>
</td><td align="left">
<a onclick=(.*?)><font color="Black">(.*?)</font></a>
</td><td align="left">
<span id="(.*?)_Modality">(.*?)</span>
</td><td align="left">
<span id="(.*?)_VerifiedStateString">(.*?)</span>
"""
pattern = pattern.replace('"', '\\"')
pattern = pattern.replace('\n', '\\s*')
matches = re.findall(pattern, body)
results = []
for match in matches:
r = {}
r['PatChartNo'] = remove_space(match[1])
r['RequestSheetNo'] = remove_space(match[3])
r['ExamDate'] = remove_space(match[5])
r['LinkOrderName'] = remove_space(match[7])
r['Modality'] = remove_space(match[9])
r['VerifiedStateString'] = remove_space(match[11])
results.append(r)
return results
#def PatientMedicalRecordListQuery(PersonID, SESSION = Login()):
def PatientMedicalRecordListQuery(Chart, SESSION = Login()):
'''
Show hospital visit
'''
# print PersonID
# print Chart
url = "http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/PatientMedicalRecordListQuery.aspx?QueryBySelf=N&SESSION=%s" % SESSION
br.open(url)
br.select_form(name="Form1")
# br["NTUHWeb1$PersonIDInputTextBox"] = PersonID
br["NTUHWeb1$ChartInputTextBox"] = Chart
response = br.submit()
body = response.read()
result = {}
#已死亡?
pattern = '<span id="NTUHWeb1_PatAccountListRecord1_PatBasicDescription">(.*?)\\((.*?)\\)(.*?)</span>'
matches = re.findall(pattern, body)
try:
match = matches[0]
search = re.search('..../../..', match[2])
result['Dead'] = datetime.datetime.strptime(search.group(0),'%Y/%m/%d')
except:
result['Dead'] = None
# match = matches[0]
# if match[2].find('已死亡') != -1:
# search = re.search('..../../..', match[2])
# result['Dead'] = search.group(0)
# else:
# result['Dead'] = None
# 住
pattern ='''
<span id=".*?_InLabelHospName">(.*?)</span>
.*?
<span id=".*?_InLabelDeptName">(.*?)</span>
.*?
<span id=".*?_InLabelInDate">(.*?)</span>
.*?
<span id=".*?_InLabelOutDate">(.*?)</span>
.*?
<span id=".*?_InLabelWardName">(.*?)</span>
.*?
<span id=".*?_InLabelRoomName">(.*?)</span>
.*?
<span id=".*?_InLabelBedName">(.*?)</span>
.*?
<span id=".*?_InLabelMainDrName">(.*?)</span>
.*?
<span id=".*?_InLabelMainDiagnosisName">(.*?)</span>
.*?
<span id=".*?_InLabelStatusName">(.*?)</span>
'''
pattern = pattern.replace('"', '\\"')
pattern = pattern.replace('\n', '\\s*?')
matches = re.findall(pattern, body)
In = []
for match in matches:
r = {}
r['HospName'] = remove_space(match[0])
r['DeptName'] = remove_space(match[1])
r['InDate'] = datetime.datetime.strptime(remove_space(match[2]),'%Y/%m/%d')
# r['OutDate'] = datetime.datetime.strptime(remove_space(match[3]),'%Y/%m/%d')
try:
r['OutDate'] = datetime.datetime.strptime(remove_space(match[3]),'%Y/%m/%d')
except:
r['OutDate'] = None
r['WardName'] = remove_space(match[4])
r['RoomName'] = remove_space(match[5])
r['BedName'] = remove_space(match[6])
r['MainDrName'] = remove_space(match[7])
r['MainDiagnosisName'] = remove_space(match[8])
r['StatusName'] = remove_space(match[9])
In.append(r)
result['In'] = In
# 急
pattern ='''
<span id=".*?_LabelEmerHospName">(.*?)</span>
.*?
<span id=".*?_LabelEmerDeptName">(.*?)</span>
.*?
<span id=".*?_LabelEmerComeClinicDate">(.*?)</span>
.*?
<span id=".*?_LabelEmerDischargeDate">(.*?)</span>
.*?
<span id=".*?_LabelEmerMainDrName">(.*?)</span>
.*?
<span id=".*?_LabelEmerMainDiagnosisName">(.*?)</span>
.*?
<span id=".*?_LabelEmerStatusName">(.*?)</span>
.*?
<span id=".*?_LabelEmerTempBedID">(.*?)</span>
'''
pattern = pattern.replace('"', '\\"')
pattern = pattern.replace('\n', '\\s*?')
matches = re.findall(pattern, body)
Emer = []
for match in matches:
r = {}
r['HospName'] = remove_space(match[0])
r['DeptName'] = remove_space(match[1])
r['ComeClinicDate'] = datetime.datetime.strptime(remove_space(match[2]),'%Y/%m/%d')
try:
r['DischargeDate'] = datetime.datetime.strptime(remove_space(match[3]),'%Y/%m/%d')
except:
r['DischargeDate'] = None
r['MainDrName'] = remove_space(match[4])
r['MainDiagnosisName'] = remove_space(match[5])
r['StatusName'] = remove_space(match[6])
r['TempBedID'] = remove_space(match[7])
Emer.append(r)
result['Emer'] = Emer
# 門
pattern ='''
<span id=".*?_LabelHospName">(.*?)</span>
.*?
<span id=".*?_LabelDeptName">(.*?)</span>
.*?
<span id=".*?_LabelComeClinicDate">(.*?)</span>
.*?
<span id=".*?_LabelSpecialCureName">(.*?)</span>
.*?
<span id=".*?_LabelMainDrName">(.*?)</span>
.*?
<span id=".*?_LabelMainDiagnosisName">(.*?)</span>
.*?
<span id=".*?_LabelAccountStatusName">(.*?)</span>
'''
pattern = pattern.replace('"', '\\"')
pattern = pattern.replace('\n', '\\s*?')
matches = re.findall(pattern, body)
OutPat = []
for match in matches:
r = {}
r['HospName'] = remove_space(match[0])
r['DeptName'] = remove_space(match[1])
r['ComeClinicDate'] = datetime.datetime.strptime(remove_space(match[2]),'%Y/%m/%d')
r['SpecialCureName'] = remove_space(match[3])
r['MainDrName'] = remove_space(match[4])
r['MainDiagnosisName'] = remove_space(match[5])
r['AccountStatusName'] = remove_space(match[6])
OutPat.append(r)
result['OutPat'] = OutPat
return result
def doPostBack(form, eventTarget, eventArgument):
#Creates a new __EVENTTARGET control and adds the value specified
#.NET doesn't generate this in mechanize for some reason -- suspect maybe is
#normally generated by javascript or some useragent thing?
form.new_control('hidden','__EVENTTARGET',attrs = dict(name='__EVENTTARGET'))
form.new_control('hidden','__EVENTARGUMENT',attrs = dict(name='__EVENTARGUMENT'))
form.set_all_readonly(False)
form["__EVENTTARGET"] = eventTarget
form["__EVENTARGUMENT"] = eventArgument
def operationnotelist(Chart, SESSION = Login()):
url = "http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/PatientMedicalRecordListQuery.aspx?QueryBySelf=N&SESSION=%s" % SESSION
br.open(url)
br.select_form(name="Form1")
# br["NTUHWeb1$PersonIDInputTextBox"] = PersonID
br["NTUHWeb1$ChartInputTextBox"] = Chart
response = br.submit('NTUHWeb1$ButtonQuery')
br.select_form(name="Form1")
# request = br.click("NTUHWeb1$PatAccountListRecord1$ShowOperationList")
# response = mechanize.urlopen(request)
response = br.submit("NTUHWeb1$PatAccountListRecord1$ShowOperationList")
'''
<form name=operationnotelist action='http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/SimpleInfoShowUsingPlaceHolder.aspx?SESSION=A71FAC405B2D4E10865E94BCF1AFF563' target="operationnotelist" method="post" >
<input type=hidden name="KeyCodeList" value=2010-T0-046815|2010-T0-014806|2010-T0-014453|2010-T0-009297|2010-T0-006240|2010-T0-004275|2009-T0-056119|DWJ1211906971228>
<input type=hidden name="KeyNameList" value=SURG_2010/10/22|SURG_2010/04/10|SURG_2010/04/08|SURG_2010/03/08|SURG_2010/02/09|SURG_2010/01/29|SURG_2009/12/28|SURG_2009/12/28>
<input type=hidden name="Func" value=OPNoteList>
</form><script language='javascript'>operationnotelist.submit();</script>
'''
# print response.read()
# return
body = response.read()
pattern = 'name="KeyCodeList" value=(.*?)><input type=hidden name="KeyNameList" value=(.*?)>'
matches=re.findall(pattern, body)
# print matches[0]
# print KeyCodeList, KeyNameList
# br.select_form('operationnotelist')
# response = br.submit()
return (matches[0][0], matches[0][1])
def ShowOperationNote(KeyCodeList, KeyNameList, SESSION=Login()):
url = 'http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/SimpleInfoShowUsingPlaceHolder.aspx?SESSION=%s' % SESSION
data = {
'KeyCodeList': KeyCodeList,
'KeyNameList': KeyNameList,
'Func' : 'OPNoteList',
}
response = br.open(url, urllib.urlencode(data))
body = response.read()
pattern ='(<div class="reportQuery">.*?</div>)\\s*?</td>'
matches=re.findall(pattern, body, re.DOTALL)
return matches[0]
def dischargenotelist(Chart, SESSION = Login()):
url = "http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/PatientMedicalRecordListQuery.aspx?QueryBySelf=N&SESSION=%s" % SESSION
br.open(url)
br.select_form(name="Form1")
br["NTUHWeb1$ChartInputTextBox"] = Chart
response = br.submit('NTUHWeb1$ButtonQuery')
Notes = re.findall('NTUHWeb1\$.*?ShowDischargeNote',
response.read())
# print Notes
'''
<form name=dischargenotelist action='http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/SimpleInfoShowUsingPlaceHolder.aspx?SESSION=D32EB731A5CF4262B605EC26D2D232A8' target="dischargenote" method="post" >
<input type=hidden name="KeyCodeList" value=10T02569131|10T07485265|09T07305932>
<input type=hidden name="KeyNameList" value=外_2010/10/19|外_2010/01/08|外_2009/12/22>
<input type=hidden name="AccountIDSE" value=10T02569131>
<input type=hidden name="Func" value=DischargeSummary>
</form><script language='javascript'>dischargenotelist.submit();</script>
'''
pattern = 'name="KeyCodeList" value=(.*?)><input type=hidden name="KeyNameList" value=(.*?)><input type=hidden name="AccountIDSE" value=(.*?)>'
key = []
for Note in Notes:
# print Note
br.select_form(name="Form1")
response = br.submit(Note)
body = response.read()
matches=re.findall(pattern, body)
for match in matches:
# print match
key.append(match)
return key
def ShowDischargeNote(KeyCodeList, KeyNameList, AccountIDSE, SESSION=Login()):
url = 'http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/SimpleInfoShowUsingPlaceHolder.aspx?SESSION=%s' % SESSION
data = {
'KeyCodeList': KeyCodeList,
'KeyNameList': KeyNameList,
'AccountIDSE': AccountIDSE,
'Func' : 'DischargeSummary',
}
response = br.open(url, urllib.urlencode(data))
body = response.read()
pattern ='(<div class="reportQuery">.*?</div>)\\s*?</td>'
matches=re.findall(pattern, body, re.DOTALL)
return matches[0]
if __name__ == "__main__":
#PatientMedicalRecordListQuery('A101116124') #已死亡
#PatientMedicalRecordListQuery('R100260467')
#PatientMedicalRecordListQuery('L200772263') #已死亡
#pp.pprint(PatientMedicalRecordListQuery('4582056'))
XrayExam('5621920')
pass