我是圖書館的工讀生,有一項工作是圖書館的電子資源檢測。
內容是檢查所有的電子資源是否能正常使用。
這麼無聊的事情,為什麼不交給程式去做呢?
前言
之所以會想寫程式來解決,是因為他連結太麻煩了:(
點進A電子資源後,會先到圖書館系統A的頁面,再點擊連結才會做轉址的動作。



既然動作重複性高,為什麼不寫一個程式讓他自動檢測呢?
內容
點進電子資源後,會發現每個資源都有屬於自己的alma(e.x alma991003786330204121),進一步的尋找後,發現了一個API網址。
https://nkust.primo.exlibrisgroup.com/primaws/rest/pub/edelivery/alma991003786330204121?vid=886NKUST_INST:86NKUST
中間能發現他也有放置一個alma,於是目標就是抓取每一項電子資源的alma並丟到網址中,使用API。
API內容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| {"beaconO22":"57", "electronicServices" : [ { "adaptorid" : "ALMA_01", "ilsApiId" : "61102217450004121", "serviceUrl" : "/view/action/uresolver.do?operation=resolveService&package_service_id=4607220230004121&institutionId=4121&customerId=4120", "licenceExist" : "false", "packageName" : "Abbreviations.com 縮寫查詢網", "authNote" : "", "publicNote" : "Open Access<br/>", "numberOfFiles" : 0, "hasAccess" : false, "serviceType" : "ELECTRONIC", "registrationRequired" : false } ], "serviceMode" : [ "Viewit" ], "availability" : [ "not_restricted" ], "availabilityLinks" : [ "directlink" ], "displayedAvailability" : "not_restricted", "displayLocation" : false, "additionalLocations" : false, "digitalAuxiliaryMode" : false, "hideResourceSharing" : false, "GetIt1" : [ { "category" : "Alma-E", "links" : [ { "isLinktoOnline" : true, "getItTabText" : "service_viewit", "adaptorid" : "ALMA_01", "ilsApiId" : "61102217450004121", "link" : "/view/action/uresolver.do?operation=resolveService&package_service_id=4607220230004121&institutionId=4121&customerId=4120", "inst4opac" : "", "@id" : "_:0" } ] } ], "link" : [ ] }
|
serviceUrl 及 link 的值都是我們需要的內容,他會帶我們到電子資源的頁面,因為內容都一樣,所以擇一即可。
將值帶入網址中,會得到
https://nkust.primo.exlibrisgroup.com/view/action/uresolver.do?operation=resolveService&package_service_id=4607220230004121&institutionId=4121&customerId=4120
這個會直接將頁面導向該資源的正確位址。
結論
其實原本是用nodejs寫,最近才改成Python的,實測的話434項約10分鐘檢測完(之前手工測300多項時,耗時約一小時。),省下了將近六分之五的時間。
不過也因為是自用,所以功能不完善、程式碼也很亂QQ
之後會慢慢的做改變,讓其他工讀生也能使用(?
https://github.com/mlgzackfly/nkust_lib_check