朱玉強(山東師范大學圖書館,山東濟南250014)
?
CALIS館際互借系統文獻預處理程序設計
朱玉強
(山東師范大學圖書館,山東濟南250014)
[摘要]針對館際互借員需要對用戶向CALIS系統提交的文獻請求進行大量重復性預處理操作的現狀,設計并實現基于網頁文檔對象的輔助程序,全自動檢索、獲取并向用戶推送免費資源,執行“本館運送”操作,以提升館際互借員操作體驗,有效節省圖書館經費。
[關鍵詞]CALIS館際互借網頁文檔對象跨域訪問
[分類號]TP393
CALIS管理中心于2004年6月21日啟動“館際互借/文獻傳遞服務網”,開展返還式“館際互借”及非返還式“文獻傳遞”服務[1]。以山東師范大學圖書館為例,除CALIS提供館際互借補貼外,該館還通過圖書館經費向讀者追加補貼,用戶幾乎全免費獲取非返還式電子全文。讀者通過CALIS免費獲取文獻后,往往不愿再去檢索本地館藏,有需求時直接向CALIS系統提交。為節省本館經費,館際互借員有必要對讀者申請預先處理,對本地有館藏或可通過免費途徑得到的文獻,直接執行“本館運送”操作。筆者通過CALIS館際互借官方QQ群調研,上述現象普通存在。故此通過操作網頁文檔對象等途徑編制程序,全自動預處理館際互借請求,可有效節省圖書館經費,提升館際互借員操作體驗。
CALIS館際互借系統依托網頁實現功能,故程序圍繞對網頁元素的自動操作展開。溫曉明[2]使用Python語言,通過向圖書館OPAC服務器提交POST請求的方式模擬人工操作網頁,檢測圖書館電子資源可用性;胡衛等[3]編制軟件,向HTTP服務器發送POST請求,取回服務器響應后的網頁源文件,模擬人工搜索、下載地震相關資料;張金等[4]為解決網頁表單數據重復填寫等問題,通過分析Web頁面結構,提出一種Web元素智能識別方法,實現自動化操作;陳江勇等[5]使用測試工具Selenium提供的API對Web界面元素所持有事件進行封裝,達到自動操作網頁元素、對Web應用程序進行自動測試的目的;任昌[6]介紹了綜合運用DOM樹路徑、DOM壓縮樹路徑以及參考點等方式進行網頁對象定位;張宗科[7]對于不能使用網絡蜘蛛下載的網頁,通過模擬按鍵等方式模擬人工打開、保存、關閉網頁系列操作,減輕人工重復勞動;楊延航等[8]介紹了使用ASP.NET實現向網頁上傳文件的方法。上述文獻或囿于應用環境,均未涉及異域數據集成環境中(下簡稱“跨域”)對網頁元素的操作。陳臘梅等[9]提出了使用XMLHTTP代理外加JSON技術解決AJAX跨域訪問和展現數據的問題,解決方案相對復雜。CALIS館際互借系統網頁雖未采用復雜的框架及跨域元素,但難免被嵌套使用。筆者除利用微軟提供的針對IE瀏覽器的二次開發接口操作網頁元素外,還利用Win32 API函數實現了跨域網頁元素的枚舉和操作,總體工作流程如圖1所示。

圖1 總體工作流程
3.1取網頁文檔對象、定位目標網頁元素
程序工作于Internet Explorer或用戶指定的IE內核瀏覽器。取瀏覽器句柄,篩選類名為“Internet Explorer_Server”(下簡稱“IES”)子句柄;操作IES,取網頁文檔對象;操作網頁文檔對象,實現模擬真人點擊或填表等。算法描述如下:
輸入:Internet Explorer或IE內核瀏覽器。
輸出:可精確定位的目標網頁元素。
Step1:運行瀏覽器,使用FindWindow或EnumWindows取頂級窗口句柄hwnd;使用FindWindowEx或EnumChild?Windows取hwnd中ClassName為“Internet Explorer_Server”的子句柄hwnd_IES。
Step2:取hwnd_IES網頁文檔對象。易語言中核心代碼為:
①Message=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,網頁文檔對象)。
Step3:取網頁文檔對象中具體元素并操作。以“CALIS山東省文獻信息服務中心”館際互借員登錄界面[10]為例,“賬號”文本框源碼為“”,自動填寫用戶名“zhuyq”可用以下代碼:
元素=網頁文檔對象.對象型方法(“getElementBy?Id”,“userid”)
元素.寫屬性(“value”,“zhuyq”)
如元素無“id”和“name”,可使用“getElementsByTag?Name”取同類Tag元素集合,再據元素特殊屬性如矩形大小、坐標等篩選。如網頁含框架,還需搜索框架。對于跨域框架,如類似“”則相對復雜,可調用IServiceProvider接口實現網頁元素的定位和操作[11],算法如圖2所示。

圖2 跨域框架操作
3.2格式化用戶提交的文獻請求
自動登錄后,取“新收到讀者申請”列表,逐一跳轉列表各鏈接,在“事務信息”詳情頁,提取用戶郵箱、文獻類型、出版物名稱、文章題目等信息,進而決定后續自動操作方法及目標,流程如圖3所示。

圖3 格式化用戶提交的文獻請求
3.3自動檢索館藏資源并下載
結合山東師范大學圖書館實際,對用戶提交請求,紙本資料以檢索館藏OPAC為主;電子資源以檢索“讀秀”為主;另據語種、學科分類,選相關專題數據庫做輔助檢索。如OPAC顯示館藏有紙本資源,采集網頁源碼,使用正則表達式篩選館藏地及索取號信息,供后續推送結果;如館藏有電子資源,自動下載全文,供后續推送。算法上,除操作網頁文檔對象,同時調用HTTP下載協議以及諸如SendMessage、PostMessage等Windows API。筆者就此曾專門撰文[12],另外自動檢索駐濟協作館聯合目錄、各館資源發現系統亦與此類似,不再贅述。
3.4自動檢索互聯網免費資源并下載
互聯網資源浩如煙海,結合本校用戶文獻請求范圍及筆者工作實踐,劃定www.socolar.com、百度文庫、Google學術搜索、新浪愛問、道客巴巴作為互聯網免費資源檢索范圍。此類資源站中,有些檢索到全文可直接下載;有些需登錄,甚至要求賬號達到一定積分值方可下載。對前者,采用3.3所述方法即可;對后者,筆者針對不同網站特點制作了賬號自動申請、自動分享軟件,采用ADSL斷網重連自動換IP的方法規避驗證碼限制,借以獲取積分,提升賬號下載流量。
3.5自動推送結果并自動結算
綜合各自動操作結果,核查最終有否紙本或電子資料可提供給用戶。如有,利用SMTP協議向3.2中采集的用戶郵箱發送郵件,推送紙本資源館藏地、索取號或電子文檔全文,之后可自動執行“本館運送”操作;如沒有則記錄,供后續轉人工操作。

圖4 CALIS“本館運送”操作界面
CALIS館際互借系統執行“本館運送”共4個步驟:①單擊圖4所示下拉框“本館運送”項;②在彈出窗口單擊“提交”按鈕;③單擊彈出信息框確認按鈕,執行提交;④關閉成功提示信息框,其中第1步相對復雜。通過網頁SPY工具探知同一頁面各下拉框“id”均為空,“name”均為“send”,可如下操作:
輸入:含類似“
輸出:可精確定位的SELECT元素、打開“本館運送”網頁供操作。
Step1:取網頁文檔對象。
Step2:取“SELECT”元素對象集:對象集=網頁文檔對象.對象型方法(“getElementsByTagName”,“SELECT”)。
Step3:枚舉對象集所有元素,如返回的“onchange”屬性包含“s_openwindow”,取其中數字編碼如“5098046”,則此SELECT元素對應的即為申請號為5098046的文獻請求。
Step4:操作篩選到的SELECT元素。核心代碼為:元素.寫屬性(“selectedIndex”,2)。
程序界面如圖5所示。將程序分別運行于WinXP SP3、WIN7 SP1(32位、64位)、WIN8(32位、64位)操作系統以及Internet Explorer v6.0-v10.0瀏覽器環境中,常駐內存7×24小時測試,軟件未發生崩潰。測試期間,總計25臺電腦、4200小時內對用戶提交的1000條館際互借請求(真實請求319條,另有為測試向系統提交的681條仿真請求)進行了處理,共計篩選出可執行“本館運送”的請求873條,向用戶推送索取號354次,向用戶郵箱投遞電子文檔439篇(次),自動執行“本館運送”操作867次。經人工復核,成功率91.4%。

圖5 程序主界面
圖6顯示自動下載到免費全文后,向用戶郵箱投遞電子全文附件,郵件正文除說明情況外,還可以對用戶進行簡單培訓。

圖6 向用戶郵箱投遞電子全文附件
程序自動對處理失敗的條目進行詳細記錄并提供可能的錯誤原因,供館際互借員后續分析、處理,如圖7所示。

圖7 錯誤日志
筆者通過操作網頁文檔對象,模擬網頁元素填表、點擊、下載等操作,設計并實現了基于CALIS館際互借系統的文獻請求預處理程序。該程序可降低館際互借成本,減少館際互借員操作,將操作員從重復性工作中解放出來,提高工作效率。目前該程序無法使用多線程開展工作,速度較慢,效率較低,對惡劣網絡環境容錯能力較差,有待進一步優化。
參考文獻:
[1]李軍凱.CALIS館際互借與文獻傳遞網的現狀與發展[J].圖書館雜志,2005(10):30-33.
[2]溫曉明.基于Python的電子資源可用性檢測方案[J].中華醫學圖書情報雜志,2013(1):68-71.
[3]胡衛,等.自動任意下載網頁上的地震目錄資料[J].地震地磁觀測與研究,2005(6):105-110.
[4]張金,劉小飛.Web網頁控件的智能識別及其自動化操作[J].計算機系統應用,2009(4):163-166.
[5]陳江勇,等.Web自動化測試框架的設計與實現[J].福建師范大學學報:自然科學版,2013(4):39-45.
[6]任昌.基于多特征融合的網頁對象自動定位技術研究[D].太原:中北大學,2011.
[7]張宗科.自動下載批量網頁的一種模擬人工實現方法[J].電腦編程技巧與維護,2013(12):96-98.
[8]楊延航,裴樹軍.在網頁中實現文件上傳方法的分析與研究[J].信息技術,2004(6):76-77,81.
[9]陳臘梅,等.AJAX跨域訪問的研究與應用[J].計算機工程與設計,2008(22):5680-5684.
[10]山東大學圖書館.CALIS山東省文獻信息服務中心[EB/ OL].(2013-11-20)[2013-12-22].http://uas.sd.calis.edu. cn:8090.
[11]濁酒一壺.易語言跨域操作網頁/易語言漢語編程官方論壇[EB/OL].(2012-08-25)[2013-12-22].http://bbs. eyuyan.com/read.php?tid=317997.
[12]朱玉強.圖書館電子資源可否瀏覽及下載監測程序設計[J].現代圖書情報技術,2013(11):86-90.
朱玉強男,1978年生。碩士,副研究館員。研究方向:現代圖書情報技術。
收稿日期:(2014-09-04;責編:張欣。)