朱玉強(qiáng)(山東師范大學(xué)圖書館,山東濟(jì)南250014)
?
CALIS館際互借系統(tǒng)文獻(xiàn)預(yù)處理程序設(shè)計(jì)
朱玉強(qiáng)
(山東師范大學(xué)圖書館,山東濟(jì)南250014)
[摘要]針對(duì)館際互借員需要對(duì)用戶向CALIS系統(tǒng)提交的文獻(xiàn)請(qǐng)求進(jìn)行大量重復(fù)性預(yù)處理操作的現(xiàn)狀,設(shè)計(jì)并實(shí)現(xiàn)基于網(wǎng)頁文檔對(duì)象的輔助程序,全自動(dòng)檢索、獲取并向用戶推送免費(fèi)資源,執(zhí)行“本館運(yùn)送”操作,以提升館際互借員操作體驗(yàn),有效節(jié)省圖書館經(jīng)費(fèi)。
[關(guān)鍵詞]CALIS館際互借網(wǎng)頁文檔對(duì)象跨域訪問
[分類號(hào)]TP393
CALIS管理中心于2004年6月21日啟動(dòng)“館際互借/文獻(xiàn)傳遞服務(wù)網(wǎng)”,開展返還式“館際互借”及非返還式“文獻(xiàn)傳遞”服務(wù)[1]。以山東師范大學(xué)圖書館為例,除CALIS提供館際互借補(bǔ)貼外,該館還通過圖書館經(jīng)費(fèi)向讀者追加補(bǔ)貼,用戶幾乎全免費(fèi)獲取非返還式電子全文。讀者通過CALIS免費(fèi)獲取文獻(xiàn)后,往往不愿再去檢索本地館藏,有需求時(shí)直接向CALIS系統(tǒng)提交。為節(jié)省本館經(jīng)費(fèi),館際互借員有必要對(duì)讀者申請(qǐng)預(yù)先處理,對(duì)本地有館藏或可通過免費(fèi)途徑得到的文獻(xiàn),直接執(zhí)行“本館運(yùn)送”操作。筆者通過CALIS館際互借官方QQ群調(diào)研,上述現(xiàn)象普通存在。故此通過操作網(wǎng)頁文檔對(duì)象等途徑編制程序,全自動(dòng)預(yù)處理館際互借請(qǐng)求,可有效節(jié)省圖書館經(jīng)費(fèi),提升館際互借員操作體驗(yàn)。
CALIS館際互借系統(tǒng)依托網(wǎng)頁實(shí)現(xiàn)功能,故程序圍繞對(duì)網(wǎng)頁元素的自動(dòng)操作展開。溫曉明[2]使用Python語言,通過向圖書館OPAC服務(wù)器提交POST請(qǐng)求的方式模擬人工操作網(wǎng)頁,檢測(cè)圖書館電子資源可用性;胡衛(wèi)等[3]編制軟件,向HTTP服務(wù)器發(fā)送POST請(qǐng)求,取回服務(wù)器響應(yīng)后的網(wǎng)頁源文件,模擬人工搜索、下載地震相關(guān)資料;張金等[4]為解決網(wǎng)頁表單數(shù)據(jù)重復(fù)填寫等問題,通過分析Web頁面結(jié)構(gòu),提出一種Web元素智能識(shí)別方法,實(shí)現(xiàn)自動(dòng)化操作;陳江勇等[5]使用測(cè)試工具Selenium提供的API對(duì)Web界面元素所持有事件進(jìn)行封裝,達(dá)到自動(dòng)操作網(wǎng)頁元素、對(duì)Web應(yīng)用程序進(jìn)行自動(dòng)測(cè)試的目的;任昌[6]介紹了綜合運(yùn)用DOM樹路徑、DOM壓縮樹路徑以及參考點(diǎn)等方式進(jìn)行網(wǎng)頁對(duì)象定位;張宗科[7]對(duì)于不能使用網(wǎng)絡(luò)蜘蛛下載的網(wǎng)頁,通過模擬按鍵等方式模擬人工打開、保存、關(guān)閉網(wǎng)頁系列操作,減輕人工重復(fù)勞動(dòng);楊延航等[8]介紹了使用ASP.NET實(shí)現(xiàn)向網(wǎng)頁上傳文件的方法。上述文獻(xiàn)或囿于應(yīng)用環(huán)境,均未涉及異域數(shù)據(jù)集成環(huán)境中(下簡(jiǎn)稱“跨域”)對(duì)網(wǎng)頁元素的操作。陳臘梅等[9]提出了使用XMLHTTP代理外加JSON技術(shù)解決AJAX跨域訪問和展現(xiàn)數(shù)據(jù)的問題,解決方案相對(duì)復(fù)雜。CALIS館際互借系統(tǒng)網(wǎng)頁雖未采用復(fù)雜的框架及跨域元素,但難免被嵌套使用。筆者除利用微軟提供的針對(duì)IE瀏覽器的二次開發(fā)接口操作網(wǎng)頁元素外,還利用Win32 API函數(shù)實(shí)現(xiàn)了跨域網(wǎng)頁元素的枚舉和操作,總體工作流程如圖1所示。
圖1 總體工作流程
3.1取網(wǎng)頁文檔對(duì)象、定位目標(biāo)網(wǎng)頁元素
程序工作于Internet Explorer或用戶指定的IE內(nèi)核瀏覽器。取瀏覽器句柄,篩選類名為“Internet Explorer_Server”(下簡(jiǎn)稱“IES”)子句柄;操作IES,取網(wǎng)頁文檔對(duì)象;操作網(wǎng)頁文檔對(duì)象,實(shí)現(xiàn)模擬真人點(diǎn)擊或填表等。算法描述如下:
輸入:Internet Explorer或IE內(nèi)核瀏覽器。
輸出:可精確定位的目標(biāo)網(wǎng)頁元素。
Step1:運(yùn)行瀏覽器,使用FindWindow或EnumWindows取頂級(jí)窗口句柄hwnd;使用FindWindowEx或EnumChild?Windows取hwnd中ClassName為“Internet Explorer_Server”的子句柄hwnd_IES。
Step2:取hwnd_IES網(wǎng)頁文檔對(duì)象。易語言中核心代碼為:
①M(fèi)essage=RegisterWindowMessageA(“WM_HT?ML_GETOBJECT”);
②SendMessageTimeout(hwnd_IES,Message,0,0,2,1000,ResourceNO);
③ObjectFromLresult(ResourceNO,{ 32,197,111,98,30,164,207,17,167,49,0,160,201,8,38,55 },0,網(wǎng)頁文檔對(duì)象)。
Step3:取網(wǎng)頁文檔對(duì)象中具體元素并操作。以“CALIS山東省文獻(xiàn)信息服務(wù)中心”館際互借員登錄界面[10]為例,“賬號(hào)”文本框源碼為“”,自動(dòng)填寫用戶名“zhuyq”可用以下代碼:
元素=網(wǎng)頁文檔對(duì)象.對(duì)象型方法(“getElementBy?Id”,“userid”)
元素.寫屬性(“value”,“zhuyq”)
如元素?zé)o“id”和“name”,可使用“getElementsByTag?Name”取同類Tag元素集合,再據(jù)元素特殊屬性如矩形大小、坐標(biāo)等篩選。如網(wǎng)頁含框架,還需搜索框架。對(duì)于跨域框架,如類似“”則相對(duì)復(fù)雜,可調(diào)用IServiceProvider接口實(shí)現(xiàn)網(wǎng)頁元素的定位和操作[11],算法如圖2所示。
圖2 跨域框架操作
3.2格式化用戶提交的文獻(xiàn)請(qǐng)求
自動(dòng)登錄后,取“新收到讀者申請(qǐng)”列表,逐一跳轉(zhuǎn)列表各鏈接,在“事務(wù)信息”詳情頁,提取用戶郵箱、文獻(xiàn)類型、出版物名稱、文章題目等信息,進(jìn)而決定后續(xù)自動(dòng)操作方法及目標(biāo),流程如圖3所示。
圖3 格式化用戶提交的文獻(xiàn)請(qǐng)求
3.3自動(dòng)檢索館藏資源并下載
結(jié)合山東師范大學(xué)圖書館實(shí)際,對(duì)用戶提交請(qǐng)求,紙本資料以檢索館藏OPAC為主;電子資源以檢索“讀秀”為主;另據(jù)語種、學(xué)科分類,選相關(guān)專題數(shù)據(jù)庫做輔助檢索。如OPAC顯示館藏有紙本資源,采集網(wǎng)頁源碼,使用正則表達(dá)式篩選館藏地及索取號(hào)信息,供后續(xù)推送結(jié)果;如館藏有電子資源,自動(dòng)下載全文,供后續(xù)推送。算法上,除操作網(wǎng)頁文檔對(duì)象,同時(shí)調(diào)用HTTP下載協(xié)議以及諸如SendMessage、PostMessage等Windows API。筆者就此曾專門撰文[12],另外自動(dòng)檢索駐濟(jì)協(xié)作館聯(lián)合目錄、各館資源發(fā)現(xiàn)系統(tǒng)亦與此類似,不再贅述。
3.4自動(dòng)檢索互聯(lián)網(wǎng)免費(fèi)資源并下載
互聯(lián)網(wǎng)資源浩如煙海,結(jié)合本校用戶文獻(xiàn)請(qǐng)求范圍及筆者工作實(shí)踐,劃定www.socolar.com、百度文庫、Google學(xué)術(shù)搜索、新浪愛問、道客巴巴作為互聯(lián)網(wǎng)免費(fèi)資源檢索范圍。此類資源站中,有些檢索到全文可直接下載;有些需登錄,甚至要求賬號(hào)達(dá)到一定積分值方可下載。對(duì)前者,采用3.3所述方法即可;對(duì)后者,筆者針對(duì)不同網(wǎng)站特點(diǎn)制作了賬號(hào)自動(dòng)申請(qǐng)、自動(dòng)分享軟件,采用ADSL斷網(wǎng)重連自動(dòng)換IP的方法規(guī)避驗(yàn)證碼限制,借以獲取積分,提升賬號(hào)下載流量。
3.5自動(dòng)推送結(jié)果并自動(dòng)結(jié)算
綜合各自動(dòng)操作結(jié)果,核查最終有否紙本或電子資料可提供給用戶。如有,利用SMTP協(xié)議向3.2中采集的用戶郵箱發(fā)送郵件,推送紙本資源館藏地、索取號(hào)或電子文檔全文,之后可自動(dòng)執(zhí)行“本館運(yùn)送”操作;如沒有則記錄,供后續(xù)轉(zhuǎn)人工操作。
圖4 CALIS“本館運(yùn)送”操作界面
CALIS館際互借系統(tǒng)執(zhí)行“本館運(yùn)送”共4個(gè)步驟:①單擊圖4所示下拉框“本館運(yùn)送”項(xiàng);②在彈出窗口單擊“提交”按鈕;③單擊彈出信息框確認(rèn)按鈕,執(zhí)行提交;④關(guān)閉成功提示信息框,其中第1步相對(duì)復(fù)雜。通過網(wǎng)頁SPY工具探知同一頁面各下拉框“id”均為空,“name”均為“send”,可如下操作:
輸入:含類似“
輸出:可精確定位的SELECT元素、打開“本館運(yùn)送”網(wǎng)頁供操作。
Step1:取網(wǎng)頁文檔對(duì)象。
Step2:取“SELECT”元素對(duì)象集:對(duì)象集=網(wǎng)頁文檔對(duì)象.對(duì)象型方法(“getElementsByTagName”,“SELECT”)。
Step3:枚舉對(duì)象集所有元素,如返回的“onchange”屬性包含“s_openwindow”,取其中數(shù)字編碼如“5098046”,則此SELECT元素對(duì)應(yīng)的即為申請(qǐng)?zhí)枮?098046的文獻(xiàn)請(qǐng)求。
Step4:操作篩選到的SELECT元素。核心代碼為:元素.寫屬性(“selectedIndex”,2)。
程序界面如圖5所示。將程序分別運(yùn)行于WinXP SP3、WIN7 SP1(32位、64位)、WIN8(32位、64位)操作系統(tǒng)以及Internet Explorer v6.0-v10.0瀏覽器環(huán)境中,常駐內(nèi)存7×24小時(shí)測(cè)試,軟件未發(fā)生崩潰。測(cè)試期間,總計(jì)25臺(tái)電腦、4200小時(shí)內(nèi)對(duì)用戶提交的1000條館際互借請(qǐng)求(真實(shí)請(qǐng)求319條,另有為測(cè)試向系統(tǒng)提交的681條仿真請(qǐng)求)進(jìn)行了處理,共計(jì)篩選出可執(zhí)行“本館運(yùn)送”的請(qǐng)求873條,向用戶推送索取號(hào)354次,向用戶郵箱投遞電子文檔439篇(次),自動(dòng)執(zhí)行“本館運(yùn)送”操作867次。經(jīng)人工復(fù)核,成功率91.4%。
圖5 程序主界面
圖6顯示自動(dòng)下載到免費(fèi)全文后,向用戶郵箱投遞電子全文附件,郵件正文除說明情況外,還可以對(duì)用戶進(jìn)行簡(jiǎn)單培訓(xùn)。
圖6 向用戶郵箱投遞電子全文附件
程序自動(dòng)對(duì)處理失敗的條目進(jìn)行詳細(xì)記錄并提供可能的錯(cuò)誤原因,供館際互借員后續(xù)分析、處理,如圖7所示。
圖7 錯(cuò)誤日志
筆者通過操作網(wǎng)頁文檔對(duì)象,模擬網(wǎng)頁元素填表、點(diǎn)擊、下載等操作,設(shè)計(jì)并實(shí)現(xiàn)了基于CALIS館際互借系統(tǒng)的文獻(xiàn)請(qǐng)求預(yù)處理程序。該程序可降低館際互借成本,減少館際互借員操作,將操作員從重復(fù)性工作中解放出來,提高工作效率。目前該程序無法使用多線程開展工作,速度較慢,效率較低,對(duì)惡劣網(wǎng)絡(luò)環(huán)境容錯(cuò)能力較差,有待進(jìn)一步優(yōu)化。
參考文獻(xiàn):
[1]李軍凱.CALIS館際互借與文獻(xiàn)傳遞網(wǎng)的現(xiàn)狀與發(fā)展[J].圖書館雜志,2005(10):30-33.
[2]溫曉明.基于Python的電子資源可用性檢測(cè)方案[J].中華醫(yī)學(xué)圖書情報(bào)雜志,2013(1):68-71.
[3]胡衛(wèi),等.自動(dòng)任意下載網(wǎng)頁上的地震目錄資料[J].地震地磁觀測(cè)與研究,2005(6):105-110.
[4]張金,劉小飛.Web網(wǎng)頁控件的智能識(shí)別及其自動(dòng)化操作[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2009(4):163-166.
[5]陳江勇,等.Web自動(dòng)化測(cè)試框架的設(shè)計(jì)與實(shí)現(xiàn)[J].福建師范大學(xué)學(xué)報(bào):自然科學(xué)版,2013(4):39-45.
[6]任昌.基于多特征融合的網(wǎng)頁對(duì)象自動(dòng)定位技術(shù)研究[D].太原:中北大學(xué),2011.
[7]張宗科.自動(dòng)下載批量網(wǎng)頁的一種模擬人工實(shí)現(xiàn)方法[J].電腦編程技巧與維護(hù),2013(12):96-98.
[8]楊延航,裴樹軍.在網(wǎng)頁中實(shí)現(xiàn)文件上傳方法的分析與研究[J].信息技術(shù),2004(6):76-77,81.
[9]陳臘梅,等.AJAX跨域訪問的研究與應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2008(22):5680-5684.
[10]山東大學(xué)圖書館.CALIS山東省文獻(xiàn)信息服務(wù)中心[EB/ OL].(2013-11-20)[2013-12-22].http://uas.sd.calis.edu. cn:8090.
[11]濁酒一壺.易語言跨域操作網(wǎng)頁/易語言漢語編程官方論壇[EB/OL].(2012-08-25)[2013-12-22].http://bbs. eyuyan.com/read.php?tid=317997.
[12]朱玉強(qiáng).圖書館電子資源可否瀏覽及下載監(jiān)測(cè)程序設(shè)計(jì)[J].現(xiàn)代圖書情報(bào)技術(shù),2013(11):86-90.
朱玉強(qiáng)男,1978年生。碩士,副研究館員。研究方向:現(xiàn)代圖書情報(bào)技術(shù)。
收稿日期:(2014-09-04;責(zé)編:張欣。)