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

1221 lines
47 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 -*-
from datetime import *
import calendar
import re
import urllib
import spynner
from pyquery import PyQuery
user_agent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36"
browser = spynner.Browser(
#debug_level=spynner.WARNING,
#debug_level=spynner.ERROR,
# debug_level=spynner.DEBUG,
#debug_level=spynner.INFO,
# user_agent = user_agent,
)
SESSION = False
def remove_space(s):
return s.replace(u' ','').strip()
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
def Login():
global SESSION
if SESSION:
return SESSION
# timeout when loading images
try:
browser.load("http://portal.ntuh.gov.tw/General/Login.aspx")
except:
pass
# print browser.html.encode('utf8')
# exit()
# f = open('/tmp/workfile.txt', 'w')
# print >>f, browser.html.encode('utf8')
# f.close()
# exit()
browser.wk_fill("input[name=txtUserID]", "004552")
browser.wk_fill("input[name=txtPass]", "n122119493")
browser.click("input[id=rdblQuickMenu_0]")
browser.click("input[name=imgBtnSubmitNew]")
browser.wait_load()
pattern = "SESSION=(\w*)"
matches = re.findall('SESSION=(\w*)', browser.html)
SESSION = matches[0]
return SESSION
#病歷號/身分證號
def ReportPathology(ID, SESSION=Login()):
browser = spynner.Browser()
# browser = spynner.Browser(debug_level=spynner.DEBUG)
url = 'http://ihisaw.ntuh.gov.tw/WebApplication/ElectronicMedicalReportViewer/MobileMasterPage.aspx?SESSION=%s' % SESSION
# print url
browser.load(url)
# print browser.url, len(browser.html)
browser.wk_fill("#txbIDInput", str(ID))
browser.wk_click("#btnQueryAction")
browser.wait_load(timeout=30)
#print browser.url, len(browser.html)
matches0 = re.findall('<tr(.*?)</tr>', browser.html, re.DOTALL)
SingleMedicalReport = []
for m0 in matches0:
if m0.encode('utf-8').find('病理報告')!=-1:
if m0.find('>*<') != -1:
# skip records w/o report date
continue
matches = re.findall('<a id="(.*?)"', m0)
# print matches[0]
browser.click("a[id=%s]"%matches[0])
browser.wait_load()
m_iframe = re.findall('<iframe id="Reportifrm" name="Reportifrm" scrolling="auto" frameborder="0" src="(.*?)"', browser.html)
SingleMedicalReport.append(m_iframe[0].replace('amp;', ''))
browser.click("input[name=backToHome]")
browser.wait_load()
report = []
for r in SingleMedicalReport:
browser.load(r)
if browser.html.find('lblReportDate') == -1:
continue
matches = re.findall('ChartNo=(.*?)&ReportKey=(.*?)&ReportCode=(.*?)&PersonID=(.*?)$', browser.url)
ChartNo = matches[0][0]
ReportKey = matches[0][1]
ReportCode = matches[0][2]
PersonID = matches[0][3]
PathCode = re.findall('lblPathCode">(.*?)</span>', browser.html)[0]
SpecimenGetDate = re.findall('lblSpecimenGetDate">(.*?)</span>', browser.html)[0]
ReportDate = re.findall('lblReportDate">(.*?)</span>', browser.html)[0]
SpecimenCode = re.findall('lblSpecimenCode">(.*?)</span>', browser.html)[0]
DepCode = re.findall('lblDepCode">(.*?)</span>', browser.html)[0]
WardNoRoomCoBedNo = re.findall('lblWardNoRoomCoBedNo">(.*?)</span>', browser.html)[0]
Result = re.findall('lblResult">(.*?)<', browser.html)[0]
report.append({'url': browser.url,
'html': browser.html,
'ChartNo': ChartNo,
'ReportKey': ReportKey,
'ReportCode': ReportCode,
'PersonID': PersonID,
'PathCode': PathCode,
'SpecimenGetDate': SpecimenGetDate,
'ReportDate': ReportDate,
'SpecimenCode': SpecimenCode,
'DepCode': DepCode,
'WardNoRoomCoBedNo': WardNoRoomCoBedNo,
'Result': Result,
})
return report
def GetPatientList(ID, year, month, SESSION=Login()):
weakday, number = calendar.monthrange(year, month)
year = str(year)
month = str(month)
number = str(number)
browser.load('http://ihisaw.ntuh.gov.tw/WebApplication/InPatient/Ward/OpenWard.aspx?SESSION=%s' % SESSION)
browser.fill('input[id=NTUHWeb1_QueryInPatientPersonAccountControl1_IDInputTextBox]', ID)
browser.fill('input[id=NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI1_YearInput]', year)
browser.fill('input[id=NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI1_MonthInput]', month)
browser.fill('input[id=NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI1_DayInput]', '1')
browser.fill('input[id=NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI2_YearInput]', year)
browser.fill('input[id=NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI2_MonthInput]', month)
browser.fill('input[id=NTUHWeb1_QueryInPatientPersonAccountControl1_DateTextBoxYearMonthDayInputUI2_DayInput]', number)
browser.click("input[id=NTUHWeb1_QueryInPatientPersonAccountControl1_EmpNoCareQueryButton]")
browser.wait_load()
# print browser.html
matches0 = re.findall('<tr(.*?)</tr>', browser.html, re.DOTALL)
PatientList = []
pattern = u'''
_WardLabel">(.*?)</span>
(.*?)_RoomLabel">(.*?)</span>
(.*?)_BedLabel">(.*?)</span>
(.*?)_LinkPatientName" title="(.*?)"
(.*?)_PatChartNo">(.*?)</span>
(.*?)_PatientSex">(.*?)</span>
(.*?)_PatientAge" title="生日:(.*?)">(.*?)</span>
(.*?)"住院總天數:(.*?)天">(.*?)</span>
'''
pattern = pattern.replace('"', '\\"')
pattern = pattern.replace('\n', '')
for m0 in matches0:
matches = re.findall(pattern, m0, re.DOTALL)
if matches:
# print matches
Pat = {}
Pat['Ward'] = remove_space(matches[0][0])
Pat['Room'] = remove_space(matches[0][2])
Pat['Bed'] = remove_space(matches[0][4])
Pat['Name'] = remove_space(matches[0][6])
Pat['ChartNo'] = remove_space(matches[0][8])
Pat['Sex'] = remove_space(matches[0][10])
Pat['Birthday'] = remove_space(matches[0][12]).replace('_', '-')
Pat['Age'] = remove_space(matches[0][13])
Pat['HospitalDays']= remove_space(matches[0][15])
Pat['Enter'] = remove_space(matches[0][16]).replace('/', '-')
# print Pat
PatientList.append(Pat)
return PatientList
'''
<select name="NTUHWeb1$QueryInPatientPersonAccountControl1$DropListWard" onchange="javascript:setTimeout('__doPostBack(\'NTUHWeb1$QueryInPatientPersonAccountControl1$DropListWard\',\'\')', 0)" id="NTUHWeb1_QueryInPatientPersonAccountControl1_DropListWard" class="normalText">
<input type="submit" name="NTUHWeb1$QueryInPatientPersonAccountControl1$QueryAccountNoByWardInput" value="病床查詢" id="NTUHWeb1_QueryInPatientPersonAccountControl1_QueryAccountNoByWardInput" accesskey="S" class="button" style="font-weight:bold;">
'''
def QueryAccountNoByWardInput(Ward, SESSION = Login()):
# print Ward
#
# import codecs, locale, sys
# import time
# browser.load('http://ihisaw.ntuh.gov.tw/WebApplication/InPatient/Ward/OpenWard.aspx?SESSION=%s' % SESSION, 1, wait_callback=wait_load)
browser.load('http://ihisaw.ntuh.gov.tw/WebApplication/InPatient/Ward/OpenWard.aspx?SESSION=%s' % SESSION)
ret = browser.load_jquery(True)
browser.select('#NTUHWeb1_QueryInPatientPersonAccountControl1_DropListWard option[value="%s"]'% Ward)
# browser.runjs("$('#NTUHWeb1_QueryInPatientPersonAccountControl1_DropListWard select').val('04A2').trigger('change');")
browser.click('#NTUHWeb1_QueryInPatientPersonAccountControl1_CheckBoxShowDrMainColumn',wait_load=True)
if 'LinkConfirmDiagnosisOrder' in browser.html:
browser.click('#NTUHWeb1_QueryInPatientPersonAccountControl1_CheckBoxShowDrMainColumn',wait_load=True)
# browser.browse()
## browser.fill('select[name=NTUHWeb1$QueryInPatientPersonAccountControl1$DropListWard]', Ward)
# print 1
## browser.wait_load(timeout = 9)
# browser.click_ajax("input[name=NTUHWeb1$QueryInPatientPersonAccountControl1$QueryAccountNoByWardInput]")
## print 2
## browser.wait_load()
# sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout)
# print browser.html
# exit()
d = PyQuery(browser.html)
ret = []
for tr in d('tr'):
tr = PyQuery(tr)
class1 = tr.attr['class']
if class1 in ['tableText', 'tableText2']:
r = {}
for td in tr('td'):
span = PyQuery(td)('span')
a = PyQuery(td)('a')
if span.attr['id']:
k = span.attr['id'].split('_')[-1]
v = span.text()
r[k] = v
if a.attr['id']:
k = a.attr['id'].split('_')[-1]
v = a.text()
r[k] = v
if span.attr['title']:
if len(span.attr['title'].split(':')) > 1:
k = span.attr['title'].split(':')[0].strip()
v = span.attr['title'].split(':')[1].strip()
else:
k = span.attr['id'].split('_')[-1]+'Title'
v = span.attr['title']
r[k] = v
# print r
r['LinkPatientName'] = r['LinkPatientName'].replace(u'[禁]', '').strip()
# print r['LinkPatientName']
# print class1
# print tr.text()
ret.append(r)
return ret
def get_dischargenotelist(html):
import urllib
import urllib2
'''
<form name="dischargenotelist" action="http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/SimpleInfoShowUsingPlaceHolder.aspx?SESSION=7326382368C5409597FFF02670E79E7E" target="dischargenote" method="post"><input type="hidden" name="KeyCodeList" value="12T01517135|12T07674504"><input type="hidden" name="KeyNameList" value="外_2012/06/05|復_2012/01/03"><input type="hidden" name="AccountIDSE" value="12T01517135"><input type="hidden" name="Func" value="DischargeSummary"></form>
'''
form = re.findall('<form(.*?)</form>', html)[0]
url = re.findall('action=\\"(.*?)\\"', form)[0]
q = {}
inputs = re.findall('<input(.*?)name=\\"(.*?)\\" value=\\"(.*?)\\"', form)
for input in inputs:
q[input[1]] = input[2].encode('utf-8')
data = urllib.urlencode(q)
results = urllib.urlopen(url, data)
content = results.read()
encoding=results.headers['content-type'].split('charset=')[-1]
ucontent = unicode(content, encoding)
q['HTML'] = ucontent
return q
def ShowDischargeNote(ID, SESSION=Login()):
# browser.debug_level = spynner.INFO
browser.load('http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/PatientMedicalRecordListQuery.aspx?QueryBySelf=N&SESSION=%s' % SESSION)
# print browser.html
browser.fill('input[name="NTUHWeb1$PatientBasicInfoQueryByIDAndName1$ctl01"]', ID)
browser.click('input[name="NTUHWeb1$PatientBasicInfoQueryByIDAndName1$ctl09"]')
browser.wait_load()
# print browser.html
matches0 = re.findall('<tr(.*?)</tr>', browser.html, re.DOTALL)
pattern = u'''
_InLabelHospName">(.*?)</span>
(.*?)_InLabelDeptName">(.*?)</span>
(.*?)_InLabelInDate">(.*?)</span>
(.*?)_InLabelOutDate">(.*?)</span>
(.*?)_InLabelWardName">(.*?)</span>
(.*?)_InLabelRoomName">(.*?)</span>
(.*?)_InLabelBedName">(.*?)</span>
(.*?)_InLabelMainDrName">(.*?)</span>
(.*?)_InLabelMainDiagnosisName">(.*?)</span>
(.*?)_InLabelStatusName">(.*?)</span>
(.*?)<input type="submit" (.*?) value=""
'''
'''
(.*?)<input type="submit" (.*?) value="" (id=".*?")
'''
pattern = pattern.replace('"', '\\"')
pattern = pattern.replace('\n', '')
SimpleInfoShowUsingPlaceHolder = []
for m0 in matches0:
# print m0
matches = re.findall(pattern, m0, re.DOTALL)
if matches:
In = {}
In['OutDate'] = remove_space(matches[0][6]).replace('/', '-')
if In['OutDate'] == '':
continue
In['HospName'] = remove_space(matches[0][0])
In['DeptName'] = remove_space(matches[0][2])
In['InDate'] = remove_space(matches[0][4]).replace('/', '-')
# In['OutDate'] = remove_space(matches[0][6])
In['WardName'] = remove_space(matches[0][8])
In['RoomName'] = remove_space(matches[0][10])
In['BedName'] = remove_space(matches[0][12])
In['MainDrName'] = remove_space(matches[0][14])
In['MainDiagnosisName'] = remove_space(matches[0][16])
In['StatusName'] = remove_space(matches[0][18])
In['ShowDischargeNote'] = remove_space(matches[0][20])
# In['ShowDischargeNote'] = remove_space(matches[0][21])
try:
# print browser.html
browser.click('input[%s]' % In['ShowDischargeNote'])
browser.wait_load()
except:
print "input[%s] ERROR!!!" % In['ShowDischargeNote']
browser.load('http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/PatientMedicalRecordListQuery.aspx?QueryBySelf=N&SESSION=%s' % SESSION)
browser.fill('input[name="NTUHWeb1$PatientBasicInfoQueryByIDAndName1$ctl01"]', ID)
browser.click('input[name="NTUHWeb1$PatientBasicInfoQueryByIDAndName1$ctl09"]')
browser.wait_load()
continue
q = get_dischargenotelist(browser.html)
In['AccountIDSE'] = q['AccountIDSE']
In['Func'] = q['Func']
In['KeyCodeList'] = q['KeyCodeList']
In['KeyNameList'] = q['KeyNameList']
In['HTML'] = q['HTML']
# print In['InDate'], In['OutDate']
SimpleInfoShowUsingPlaceHolder.append(In)
return SimpleInfoShowUsingPlaceHolder
def GetOutpatientByPhysician(name):
ret = []
# print 'x%sx'%name
# return
url = 'https://reg.ntuh.gov.tw/webadministration/DtQueryA.aspx'
browser.load(url)
# print browser.html
browser.wk_fill('input[name="DtName"]', name)
browser.click('input[name="QueryButton"]')
browser.wait_load()
# print browser.url
# print browser.html
'''
<td align="center" style="width:35px;"></td><td align="center" style="color:Red;width:80px;">停止掛號</td><td align="center" style="color:Green;width:70px;">住院醫師(代診不續掛)</td><td align="center" style="width:90px;">102.5.29<br>星期三 上午</td><td align="center" style="color:OrangeRed;width:70px;">總院區</td><td align="center" style="color:OrangeRed;width:70px;"></td><td style="width:90px;">外科部</td><td style="width:90px;">腦神經外科</td><td align="center">06</td><td align="center" style="width:50px;">105206</td><td align="center">不可</td><td align="center" style="color:Blue;width:120px;"></td><td style="color:Red;width:120px;">曾漢民 請假;住院醫師(代診不續掛) </td><td align="center"><a href="CurrentCondition.aspx?x=SQBEAD0AMQA1ADQAMAA5ADIANwAmAGwAYQBuAGcAPQBjAGgA0">查詢</a></td>
<td align="center" style="width:35px;"></td><td align="center" style="width:80px;">. <a href="RegistForm.aspx?x=RABlAHAAdAA9AFMAVQBSAEcAJgBIAG8AcwBwAD0AVAAwACYAQwBsAGkAbgBpAGMAQwBvAGQAZQA9ADAAMAAmAEMAbABpAG4AaQBjAE4AdQBtAD0AMQAwACYAQQBNAFAATQA9ADIAJgBTAHUAYgBEAGUAcAB0AD0AMAA3ACYARAB0AD0AMAAwADQANQA1ADIAJgBQAGgAbwBuAGkAYwBDAG8AZABlAD0AMgAwADUAMgAxADAAJgBEAGEAdABlAD0AMgAwADEAMwAvADUALwAzADEAJgBXAGUAZQBrAD0ANQAmAFMAcgB2AFQAeQBwAGUAPQAgAE8AMQAmAFMAcgB2AEkARAA9ADEANQA0ADIANAAyADcAJgB1AHMAZQBEAHIAUgBlAHMAdABDAG4AdAA9AG4A0" style="color:Blue;">掛號</a> .</td><td align="center" style="color:Green;width:70px;">蕭輔仁</td><td align="center" style="width:90px;">102.5.31<br>星期五 下午</td><td align="center" style="color:OrangeRed;width:70px;">總院區</td><td align="center" style="color:OrangeRed;width:70px;">西址-1樓</td><td style="width:90px;">外科部</td><td style="width:90px;">神經外科</td><td align="center">10</td><td align="center" style="width:50px;">205210</td><td align="center">可</td><td align="center" style="color:Blue;width:120px;"> 神經外科 </td><td></td><td></td>
<td align="center" style="width:35px;"></td><td align="center" style="color:Red;width:80px;">非有效掛號時段內</td><td align="center" style="color:Green;width:70px;">陳敞牧</td><td align="center" style="width:90px;">102.5.29<br>星期三 下午</td><td align="center" style="color:OrangeRed;width:70px;">總院區</td><td align="center" style="color:OrangeRed;width:70px;"></td><td style="width:90px;">外科部</td><td style="width:90px;">腦神經外科</td><td align="center">08</td><td align="center" style="color:Red;width:50px;">非有效時段內</td><td align="center">可</td><td align="center" style="color:Blue;width:120px;"></td><td></td><td align="center"><a href="CurrentCondition.aspx?x=SQBEAD0AMQA1ADQAMAA5ADIANQAmAGwAYQBuAGcAPQBjAGgA0">查詢</a></td>
'''
pattern = '<td align="center" style="width:35px;"></td><td(.*)>(.*)</td><td align="center" style="color:Green;width:70px;">(.*)</td><td align="center" style="width:90px;">(?P<date>.*)<br>(?P<ampm>.*)</td><td align="center" style="color:OrangeRed;width:70px;">(.*)</td><td align="center" style="color:OrangeRed;width:70px;">(.*)</td><td style="width:90px;">(?P<dept>.*)</td><td style="width:90px;">(.*)</td><td align="center">(?P<clinic>.*)</td><td(.*)">(.*)</td><td align="center">(.*)</td><td align="center" style="color:Blue;width:120px;">(.*)</td><td(.*)>(.*)</td><td(.*)>(.*)</td>'
pattern = pattern.replace('"', '\\"')
# matches = re.findall(pattern, browser.html)
# if not matches:
# exit()
# for m in matches:
# for mm in m:
# print mm,
# print
matches = [m.groupdict() for m in re.finditer(pattern, browser.html)]
for m in matches:
# print m['date'], m['ampm'], m['dept'], m['clinic']
ret.append({
'date': minguo2ce(m['date']),
'ampm': m['ampm'].split(' ')[1],
'dept': m['dept'],
'clinic': m['clinic'],
})
return ret
# exit()
#import pprint
#class MyPrettyPrinter(pprint.PrettyPrinter):
# def format(self, object, context, maxlevels, level):
# if isinstance(object, unicode):
# return (object.encode('utf8'), True, False)
# return pprint.PrettyPrinter.format(self, object, context, maxlevels, level)
def OpenClinicsPatientList(clinic, SESSION=Login()):
url = 'http://hisaw.ntuh.gov.tw/WebApplication/Clinics/OpenClinics.aspx?SESSION=%s' % SESSION
browser.load(url)
# browser.load_jquery(True)
OptionValue ={}
pattern = 'value="(?P<val>.*?)">(?P<text>.*?)</option>'
pattern = pattern.replace('"', '\\"')
matches = [m.groupdict() for m in re.finditer(pattern, browser.html)]
for m in matches:
t = m['text'].strip()
v = m['val'].strip()
if t != v:
OptionValue[t] = v
# for o in OptionValue:
# print o, OptionValue[o]
# exit()
browser.wk_select('#NTUHWeb1_DeptDropList', OptionValue[clinic['dept']])
browser.wk_fill('input[name="NTUHWeb1$DateTextBoxYearMonthDayInputUI1$YearInput"]', str(clinic['date'].year))
browser.wk_fill('input[name="NTUHWeb1$DateTextBoxYearMonthDayInputUI1$MonthInput"]', str(clinic['date'].month))
browser.wk_fill('input[name="NTUHWeb1$DateTextBoxYearMonthDayInputUI1$DayInput"]', str(clinic['date'].day))
browser.wk_select('#NTUHWeb1_AMPMDropList', OptionValue[clinic['ampm']])
browser.wk_fill('input[name="NTUHWeb1$ClinicNoInput"]', clinic['clinic'])
browser.wk_click('input[name="NTUHWeb1$QueryScheduleList"]', wait_load=True, timeout=9)
# MyPrettyPrinter().pprint(clinic)
try:
browser.wk_click('input[name="NTUHWeb1$CheckBoxAllPatient"]', wait_load=True, timeout=9)
except:
return None
# browser.wait_load()
# browser.submit("input[name=NTUHWeb1$QueryScheduleList]")
# print browser.html
pattern = 'VisitSeqnoPlusName" value="(?P<SeqnoPlusName>.*?)"'
pattern = pattern.replace('"', '\\"')
matches = [m.groupdict() for m in re.finditer(pattern, browser.html)]
PatientList = []
for m in matches:
seq, name = m['SeqnoPlusName'].split(' ')
name2 = name.split('')[0]
# print seq, name, name2
PatientList.append((name2, clinic['physician']))
# print PatientList
return PatientList
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 = browser.load(url)
body = browser.html
'''
<input id="BloodCallRecordDataGrid_ctl02_CheckboxSelect" type="checkbox" name="BloodCallRecordDataGrid$ctl02$CheckboxSelect">
</td><td>
<span id="BloodCallRecordDataGrid_ctl02_PatChartNo">5656063</span>
</td><td align="left">
<span id="BloodCallRecordDataGrid_ctl02_RequestSheetNo">T0122861905</span>
</td><td align="left">
<span id="BloodCallRecordDataGrid_ctl02_ExamDate">20120425</span>
</td><td align="left">
<a id="BloodCallRecordDataGrid_ctl02_LinkOrderNameNew" href="javascript:__doPostBack('BloodCallRecordDataGrid$ctl02$LinkOrderNameNew','')" style="color:Black;">MRI With/Without Contrast--Brain</a>
<input type="hidden" name="BloodCallRecordDataGrid$ctl02$HdnNewImage" id="BloodCallRecordDataGrid_ctl02_HdnNewImage" value="True">
<input type="hidden" name="BloodCallRecordDataGrid$ctl02$HdnOldImage" id="BloodCallRecordDataGrid_ctl02_HdnOldImage" value="False">
</td><td align="left">
</td><td align="left">
<span id="BloodCallRecordDataGrid_ctl02_Modality">MR</span>
</td><td align="left">
<span id="BloodCallRecordDataGrid_ctl02_VerifiedStateString">已確認</span>
</td>
'''
pattern='''
<span id="(.*?)_PatChartNo">(?P<PatChartNo>.*?)</span>
</td><td align="left">
<span id="(.*?)_RequestSheetNo">(?P<RequestSheetNo>.*?)</span>
</td><td align="left">
<span id="(.*?)_ExamDate">(?P<ExamDate>.*?)</span>
</td><td align="left">
<a id="BloodCallRecordDataGrid(.*?)Black;">(?P<LinkOrderName>.*?)</a>
(.*?)
<span id="(.*?)_Modality">(?P<Modality>.*?)</span>
</td><td align="left">
<span id="(.*?)_VerifiedStateString">(?P<VerifiedStateString>.*?)</span>
'''
pattern = pattern.replace('"', '\\"')
pattern = pattern.replace('\n', '\\s*')
# matches = re.findall(pattern, body)
matches = [m.groupdict() for m in re.finditer(pattern, browser.html, re.DOTALL)]
results = []
for match in matches:
r = {}
r['PatChartNo'] = remove_space(match['PatChartNo'])
r['RequestSheetNo'] = remove_space(match['RequestSheetNo'])
r['ExamDate'] = remove_space(match['ExamDate'])
r['LinkOrderName'] = remove_space(match['LinkOrderName'])
r['Modality'] = remove_space(match['Modality'])
r['VerifiedStateString'] = remove_space(match['VerifiedStateString'])
results.append(r)
return results
#Excluded version
def PACSImageShowReport(ID, RequestSheetNoExcluded = [], Modality = ['CT', 'MR'],SESSION = None):
if SESSION is None:
SESSION = Login()
url = "http://ihisaw.ntuh.gov.tw/WebApplication/ElectronicMedicalReportViewer/MobileMasterPage.aspx?SESSION=%s" % SESSION
browser.load(url)
browser.wk_fill("input[name=txbIDInput]", ID)
browser.click_link("input[name=btnQueryAction]")
# browser.wait_load()
d = PyQuery(browser.html)
reportitems = []
d2 = d('div').filter(lambda i: PyQuery(this).children('div').attr.reportgroup == u'影核醫')
for ri in d2('.reportitem'):
Included = False
for mod in Modality:
if mod in ri.find('td').text:
Included = True
break
if not Included:
# print '%s excluded'%ri.find('td').text.strip()
continue
for rsn in RequestSheetNoExcluded:
if rsn in ri.attrib['param']:
ri = None
break
if ri is not None:
# print ri.find('td').text.strip()
reportitems.append(ri)
# print reportitems
# exit()
urls = []
if reportitems:
ri0 = reportitems[0]
# link = "tr[id=%s]"%ri0.attrib['id']
link = "a[id=%s]"%ri0.attrib['id'].replace('itemHolder', 'lbnSelectPrintIEH')
# print link
browser.click_link(link)
d = PyQuery(browser.html)
url = d('#Reportifrm').attr['src']
# print ri0
# print url
# print (ri0.attrib['param'], ri.attrib['param'])
for ri in reportitems:
# print (ri0.attrib['param'], ri.attrib['param'])
urls.append(url.replace(ri0.attrib['param'], ri.attrib['param']))
# return urls
reports = []
for url in urls:
r = {}
browser.load(url)
if u'已發報告' in browser.html:
d = PyQuery(browser.html)
r['PatChartNo'] = d('div.patientInfo').find('td')[1].text
r['RequestSheetNo'] = d('td').filter(lambda i: PyQuery(this).children('span').attr.id is not None and 'AccessNo' in PyQuery(this).children('span').attr.id).text()
r['ExamDate'] = d('td').filter(lambda i: PyQuery(this).children('span').attr.id is not None and 'ExamDate' in PyQuery(this).children('span').attr.id).text()
r['LinkOrderName'] = d('td').filter(lambda i: PyQuery(this).children('span').attr.id is not None and 'OrderDesc' in PyQuery(this).children('span').attr.id).text()
r['Modality'] = r['LinkOrderName'][:2]
r['VerifiedStateString'] = d('td').filter(lambda i: PyQuery(this).children('span').attr.id is not None and 'Status' in PyQuery(this).children('span').attr.id).text()
r['Exam'] = d('span').filter(lambda i: PyQuery(this).attr.id is not None and PyQuery(this).attr.id.endswith('TitleExam')).parents('tr').nextAll().children('td')[0].text_content().strip()
r['Impression'] = d('span').filter(lambda i: PyQuery(this).attr.id is not None and 'TitleImpression' in PyQuery(this).attr.id).parents('tr').nextAll().children('td')[0].text_content().strip()
r['Report'] = browser.html
r['ExamDate'] = datetime.strptime(r['ExamDate'], "%Y/%m/%d")
reports.append(r)
print r['RequestSheetNo']
return reports
def ElectronicMedicalReportViewer(ID, ReportKeyExcluded = [], SESSION = None):
if SESSION is None:
SESSION = Login()
url = "http://ihisaw.ntuh.gov.tw/WebApplication/ElectronicMedicalReportViewer/MobileMasterPage.aspx?SESSION=%s" % SESSION
try:
browser.load(url)
except:
return []
browser.wk_fill("input[name=txbIDInput]", ID)
browser.click_link("input[name=btnQueryAction]")
# browser.wait_load()
d = PyQuery(browser.html)
ret1 = []
for groupHolder in d('div').filter(lambda i: PyQuery(this).attr.id is not None and PyQuery(this).attr.id.endswith('groupHolder')):
reportitems = []
d2 = PyQuery(groupHolder)
print d2.attr.id
for ri in d2('.reportitem'):
td = PyQuery(ri).children('td')
ReportClass = td[0].text.strip()
# CheckDate = td[1].text.strip()
# ReportDate = td[2].text.strip()
# print CheckDate, ReportDate
try:
CheckDate = datetime.strptime(td[1].text.strip(), "%Y/%m/%d").date()
except:
CheckDate = None
try:
ReportDate = datetime.strptime(td[2].text.strip(), "%Y/%m/%d").date()
except:
ReportDate = None
# print ReportClass, CheckDate, ReportDate
for rk in ReportKeyExcluded:
if rk in ri.attrib['param']:
ri = None
break
if ri is not None:
# print ri.find('td').text.strip()
reportitems.append((ri, ReportClass, CheckDate, ReportDate))
if reportitems:
ri0 = reportitems[0][0]
link = "a[id=%s]"%ri0.attrib['id'].replace('itemHolder', 'lbnSelectPrintIEH')
# print link
try:
browser.click_link(link, timeout=30)
d = PyQuery(browser.html)
url = d('#Reportifrm').attr['src']
browser.click_link("input[name=backToHome]")
except:
print 'timeout'
reportitems = []
url = "http://ihisaw.ntuh.gov.tw/WebApplication/ElectronicMedicalReportViewer/MobileMasterPage.aspx?SESSION=%s" % SESSION
browser.load(url, load_timeout=30)
browser.wk_fill("input[name=txbIDInput]", ID)
browser.click_link("input[name=btnQueryAction]")
for ri, ReportClass, CheckDate, ReportDate in reportitems:
# urls.append((url.replace(ri0.attrib['param'], ri.attrib['param']), ReportClass, CheckDate, ReportDate))
url2 = url.replace(ri0.attrib['param'], ri.attrib['param'])
# print url2
ret1.append({
'URL': url2,
'ReportClass': ReportClass,
'CheckDate': CheckDate,
'ReportDate': ReportDate,
})
# return urls
ret2 = []
for ret in ret1:
ReportKey = re.search(r'ReportKey=(.+)&ReportCode', ret['URL']).group(1)
ReportCode = re.search(r'ReportCode=(.+)&PersonID', ret['URL']).group(1)
# print ret['URL']
try: # avoid stop on timeout
browser.load(ret['URL'])
except:
continue
html = browser.html
# if u'未打報告' in html:
# continue
ret['ReportKey'] = ReportKey
ret['ReportCode'] = ReportCode
ret['Report'] = html
ret2.append(ret)
# print ret
# exit
# if len(reports) > 10: #debug with 10 reports maximum
# break
# print
return ret2
def PatientMedicalRecordList(Chart, KeyCodeExcluded = [], KeyNameExcluded = [], SESSION = Login()):
result ={}
url = "http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/PatientMedicalRecordListQuery.aspx?QueryBySelf=N&SESSION=%s" % SESSION
browser.load(url)
browser.wk_fill('input[name="NTUHWeb1$PatientBasicInfoQueryByIDAndName1$ctl01"]', Chart)
browser.click_link('input[name="NTUHWeb1$PatientBasicInfoQueryByIDAndName1$ctl09"]')
body = browser.html
pattern = r'<span id="NTUHWeb1_PatAccountListRecord1_PatBasicDescription" .*?>(?P<name>.*?)\((?P<gender>.*?),(?P<birthday>.*?),(?P<age>.*?)\) (?P<extra> .*?)? \((?P<branch>.*?)\)</span>'
r = re.compile(pattern)
# print r.findall(body)
d = [m.groupdict() for m in r.finditer(body)]
if d:
d[0]['Dead'] = None
if d[0]['extra']:
# print d[0]['extra']
matches = re.findall(ur'(..../../..) 已死亡', d[0]['extra'])
# print matches
if matches:
d[0]['Dead'] = matches[0]
# print d[0]
result.update(d[0])
else:
result['Dead'] = None
d = PyQuery(browser.html)
# 住
InPat = {}
Emergency = {}
OutPat = {}
InPatList = []
EmergencyList = []
OutPatList = []
# for record in d('input').filter(lambda i: PyQuery(this).attr.id is not None and PyQuery(this).attr.id.endswith('ShowDischargeNote')).parents('tr'):
for record in d('tr'):
ieo = {} #住門急
record = PyQuery(record)
if record.attr.onmouseover is None:
continue
for SpanLabel in PyQuery(record)('span'):
SpanLabel = PyQuery(SpanLabel)
# if SpanLabel.attr.id is None:
# continue
# print SpanLabel.attr.id
if 'GridViewInPatRecord' in SpanLabel.attr.id:
match = re.search(r'InLabel(.*)$', SpanLabel.attr.id)
key = match.group(1)
value = SpanLabel.text().strip()
if value:
ieo[key] = value
ieo['spanid'] = re.search(r'(.*)_(.*)', SpanLabel.attr.id).group(1)
if 'GridViewEmergencyContent' in SpanLabel.attr.id:
match = re.search(r'LabelEmer(.*)$', SpanLabel.attr.id)
key = match.group(1)
value = SpanLabel.text().strip()
if value:
ieo[key] = value
ieo['spanid'] = re.search(r'(.*)_(.*)', SpanLabel.attr.id).group(1)
if 'GridViewOutPatRecord' in SpanLabel.attr.id:
match = re.search(r'_Label(.*)$', SpanLabel.attr.id)
key = match.group(1)
value = SpanLabel.text().strip()
if value:
ieo[key] = value
ieo['spanid'] = re.search(r'(.*)_(.*)', SpanLabel.attr.id).group(1)
if 'GridViewInPatRecord' in ieo['spanid']:
KeyName = u'%s_%s'%(ieo['DeptName'], ieo['InDate'])
InPat[KeyName]= ieo
if KeyName not in KeyNameExcluded:
InPatList.append(KeyName)
if 'GridViewEmergencyContent' in ieo['spanid']:
KeyName = u'%s_%s'%(ieo['DeptName'], ieo['ComeClinicDate'])
Emergency[KeyName]= ieo
if KeyName not in KeyNameExcluded:
EmergencyList.append(KeyName)
if 'GridViewOutPatRecord' in ieo['spanid']:
KeyName = u'%s_%s'%(ieo['DeptName'], ieo['ComeClinicDate'])
OutPat[KeyName]= ieo
if KeyName not in KeyNameExcluded:
OutPatList.append(KeyName)
browser2 = spynner.Browser()
if InPatList:
browser.click_link('input[id="%s_ShowDischargeNote"]'%InPat.itervalues().next()['spanid'])
df = PyQuery(browser.html)
form = df('form[name="dischargenotelist"]')
url = form.attr.action
data = {}
for input in form.children('input'):
input = PyQuery(input)
n = input.attr.name
v = input.attr.value
data[n] =v
for KeyCode, KeyName in zip(data['KeyCodeList'].split('|'), data['KeyNameList'].split('|')):
if KeyCode == '' or (KeyCode in KeyCodeExcluded):
continue
data2 = data
data2['AccountIDSE'] = KeyCode
data2['KeyCodeList'] = KeyCode
data2['KeyNameList'] = KeyName.encode('utf8')
print data2
posturl = '%s&%s' % (url, urllib.urlencode(data2))
try:
browser2.load(posturl)
except:
continue
InPat[KeyName]['KeyCode'] = KeyCode
InPat[KeyName]['Func'] = data2['Func']
InPat[KeyName]['DOC'] = browser2.html
if EmergencyList:
browser.click_link('input[id="%s_ShowEmergencyClinicHistory"]'%Emergency.itervalues().next()['spanid'])
df = PyQuery(browser.html)
form = df('form[name="emerrecordlist"]')
url = form.attr.action
data = {}
for input in form.children('input'):
input = PyQuery(input)
n = input.attr.name
v = input.attr.value
data[n] =v
for KeyCode, KeyName in zip(data['KeyCodeList'].split('|'), data['KeyNameList'].split('|')):
if KeyCode == '' or (KeyCode in KeyCodeExcluded):
continue
data2 = data
data2['AccountIDSE'] = KeyCode
data2['KeyCodeList'] = KeyCode
data2['KeyNameList'] = KeyName.encode('utf8')
print data2
posturl = '%s&%s' % (url, urllib.urlencode(data2))
try:
browser2.load(posturl)
except:
continue
Emergency[KeyName]['KeyCode'] = KeyCode
Emergency[KeyName]['Func'] = data2['Func']
Emergency[KeyName]['DOC'] = browser2.html
if OutPatList:
browser.click_link('input[id="%s_ShowMedicalRecord"]'%OutPat.itervalues().next()['spanid'])
df = PyQuery(browser.html)
form = df('form[name="dischargenotelist"]')
url = form.attr.action
data = {}
for input in form.children('input'):
input = PyQuery(input)
n = input.attr.name
v = input.attr.value
data[n] =v
for KeyCode, KeyName in zip(data['KeyCodeList'].split('|'), data['KeyNameList'].split('|')):
if KeyCode == '' or (KeyCode in KeyCodeExcluded):
continue
data2 = data
data2['AccountIDSE'] = KeyCode
data2['KeyCodeList'] = KeyCode
data2['KeyNameList'] = KeyName.encode('utf8')
print data2
posturl = '%s&%s' % (url, urllib.urlencode(data2))
try:
browser2.load(posturl)
except:
continue
OutPat[KeyName]['KeyCode'] = KeyCode
OutPat[KeyName]['Func'] = data2['Func']
OutPat[KeyName]['DOC'] = browser2.html
result['InPat'] = InPat
result['Emergency'] = Emergency
result['OutPat'] = OutPat
return result
### Old
#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
browser.load(url)
browser.wk_fill('input[name="NTUHWeb1$PatientBasicInfoQueryByIDAndName1$ctl01"]', Chart)
browser.wk_click('input[name="NTUHWeb1$PatientBasicInfoQueryByIDAndName1$ctl09"]', wait_load=True, timeout=9)
body = browser.html
result = {}
#已死亡?
#<span id="NTUHWeb1_PatAccountListRecord1_PatBasicDescription" style="background-color:Azure;font-size:Larger;">丁美倫(F,1971/10/29,42y0m) (總院)</span>
#<span id="NTUHWeb1_PatAccountListRecord1_PatBasicDescription" style="background-color:Azure;font-size:Larger;">邵輝雄(M,1948/08/27,62y0m21d) 2010/09/17 已死亡 (總院)</span>
#<span id="NTUHWeb1_PatAccountListRecord1_PatBasicDescription" style="background-color:Azure;font-size:Larger;">郭德(M,1935/12/01,72y5m10d) 2008/05/11 已死亡 (總院)</span>
pattern = r'<span id="NTUHWeb1_PatAccountListRecord1_PatBasicDescription" .*?>(?P<name>.*?)\((?P<gender>.*?),(?P<birthday>.*?),(?P<age>.*?)\) (?P<extra> .*?)? \((?P<branch>.*?)\)</span>'
r = re.compile(pattern)
# print r.findall(body)
d = [m.groupdict() for m in r.finditer(body)]
if d:
d[0]['Dead'] = None
if d[0]['extra']:
# print d[0]['extra']
matches = re.findall(ur'(..../../..) 已死亡', d[0]['extra'])
# print matches
if matches:
d[0]['Dead'] = matches[0]
print d[0]
result.update(d[0])
else:
result['Dead'] = None
# 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.strptime(remove_space(match[2]),'%Y/%m/%d')
# r['OutDate'] = datetime.datetime.strptime(remove_space(match[3]),'%Y/%m/%d')
try:
r['OutDate'] = 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.strptime(remove_space(match[2]),'%Y/%m/%d')
try:
r['DischargeDate'] = 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.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 ShowOperationList(Chart, KeyCodeExcluded = [], KeyNameExcluded = [], SESSION = Login()):
url = "http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/PatientMedicalRecordListQuery.aspx?QueryBySelf=N&SESSION=%s" % SESSION
browser.load(url)
browser.wk_fill('input[name="NTUHWeb1$PatientBasicInfoQueryByIDAndName1$ctl01"]', Chart)
browser.click_link('input[name="NTUHWeb1$PatientBasicInfoQueryByIDAndName1$ctl09"]')
browser.click_link('input[name="NTUHWeb1$PatAccountListRecord1$ShowOperationList"]')
match = re.search(r"'(http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/SimpleInfoShowUsingPlaceHolder.aspx.+?)'", browser.html)
if match is None:
return []
url = match.group(1)
# url = re.search(r"http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/SimpleInfoShowUsingPlaceHolder.aspx?SESSION=(.+)", browser.html).group(1)
browser.load(url)
body = browser.html
pattern ="'TreeViewItem','(.*?)'\)(.*?)>(.*?)</a>"
# pattern = 'name="KeyCodeList" value=(.*?)><input type=hidden name="KeyNameList" value=(.*?)>'
matches=re.findall(pattern, body)
KeyList = []
for m in matches:
KeyCode = m[0][1:]
KeyName = m[2]
if KeyCode in KeyCodeExcluded:
continue
if KeyName in KeyNameExcluded:
continue
KeyList.append((KeyCode, KeyName))
url = 'http://ihisaw.ntuh.gov.tw/WebApplication/OtherIndependentProj/PatientBasicInfoEdit/SimpleInfoShowUsingPlaceHolder.aspx?SESSION=%s' % SESSION
ret = []
for KeyCode, KeyName in KeyList:
data = {
'KeyCodeList': KeyCode,
'KeyNameList': KeyName,
'Func' : 'OPNoteList',
}
posturl = '%s&%s' % (url, urllib.urlencode(data))
browser.load(posturl)
ret.append({
'KeyCode': KeyCode,
'KeyName': KeyName,
'DOC' : browser.html,
})
return ret