Last active
December 8, 2021 19:10
-
-
Save tingjhenjiang/322fc4f664e8bb65b5943094186e5a0e to your computer and use it in GitHub Desktop.
網頁及國家圖書館期刊文獻網檢索結果轉RIS
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
javascript: (() => { | |
function download(filename, text) { | |
element = document.createElement('a'); | |
element.setAttribute('href', 'data:text/plain.charset=utf-8,' + encodeURIComponent(text)); | |
element.setAttribute('download', filename); | |
element.style.display = 'none'; | |
document.body.appendChild(element); | |
element.click(); | |
document.body.removeChild(element); | |
} | |
function outputWebpageRisDoc(info) { | |
template = ''; | |
for (var key in info) { | |
template = template+key+' - '+info[key]+'\n'; | |
} | |
template = template+'ER'+' - '; | |
return template; | |
} | |
function getWebpageAttributes() { | |
title = document.getElementsByTagName("title")[0].textContent; | |
webpageUrl = window.location.href; | |
today = new Date(); | |
year = today.getFullYear(); | |
options = {year:'numeric',month:'short',day:'numeric'}; | |
accessDate = today.toLocaleDateString('en-US', options); | |
htmlMetaDataObj = {}; | |
htmlMetaData = document.getElementsByTagName("meta"); | |
for (var singleMetaDataObj of htmlMetaData) { | |
attrName = singleMetaDataObj.getAttributeNames(); | |
attrName = attrName.filter(an => an!='content')[0]; | |
attrKey = singleMetaDataObj.getAttribute(attrName); | |
htmlMetaDataObj[attrKey] = singleMetaDataObj.getAttribute('content'); | |
} | |
return { | |
'TY': 'WEB','PY': year, | |
'TI': title, | |
'AB': (htmlMetaDataObj['description']) ? htmlMetaDataObj['description'] : '', | |
'AU': (htmlMetaDataObj['author']) ? htmlMetaDataObj['author'] : '', | |
'Y2': accessDate, | |
'LK': webpageUrl, | |
'UR': webpageUrl, | |
'KW': (htmlMetaDataObj['keywords']) ? htmlMetaDataObj['keywords'] : '' | |
}; | |
} | |
function getNCLJSingleArticleMetadata() { | |
articleData = document.evaluate( | |
'//table[@class="data-detail"]', | |
document, | |
null, | |
XPathResult.FIRST_ORDERED_NODE_TYPE, | |
null | |
).singleNodeValue; | |
articleData = document.evaluate('//tr', articleData, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null ); | |
singleArticleData = articleData.iterateNext(); | |
results = {}; | |
rePattern = /[\t\n]*/g; | |
while (singleArticleData) { | |
attr = singleArticleData.getElementsByTagName("th")[0].textContent; | |
content = singleArticleData.getElementsByTagName("td")[0].textContent.trim().replace(rePattern, ''); | |
results[attr] = content; | |
singleArticleData = articleData.iterateNext(); | |
} | |
volAndIssue = results['卷期'].split('=')[0].split(':'); | |
pages = results['頁次'].replace('頁','').split('-'); | |
engNames = results['作者'].match(/[\w\s\,\-]*/gi).filter(n => n!= ''); | |
chiNames = results['作者']; | |
for (var engName of engNames) { | |
chiNames = chiNames.replace(engName, ''); | |
} | |
engNames = engNames.join('\;'); | |
chiNames = chiNames.split(';').filter(n => n!='').join('\;'); | |
engTitle = results['題名'].replace(results['主要題名']+':',''); | |
engTitle = engTitle.replace(results['主要題名'],''); | |
return { | |
'TY': 'JOUR', | |
'PY': results['出版日期'].substr(0,4), | |
'TI': results['主要題名'], | |
'TT': engTitle, | |
'AU': chiNames, | |
'TA': engNames, | |
'AB': results['中文摘要'], | |
'N2': results['英文摘要'], | |
'DA': results['出版日期'], | |
'IS': results['卷期'], | |
'J1': results['期刊'], | |
'JA': results['期刊'], | |
'JF': results['期刊'], | |
'UR': window.location.href, | |
'VL': volAndIssue[0], | |
'IS': volAndIssue[1], | |
'SP': pages[0], | |
'EP': pages[1], | |
'KW': results['關鍵詞'], | |
'LA': results['語文'].replace('chi','Chinese') | |
} | |
} | |
function downloadHtmlAttrsInRIS() { | |
attrs = (window.location.href.search(/NclService\/JournalContentDetail/)!=-1) ? getNCLJSingleArticleMetadata() : getWebpageAttributes(); | |
ris = outputWebpageRisDoc(attrs); | |
download('webpage.ris',ris); | |
} | |
downloadHtmlAttrsInRIS(); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment