adm18/ntuh/submodule/ntuhgov.20230412/intra_old.py
2025-09-16 13:20:19 +08:00

965 lines
32 KiB
Python
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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