Skip to content

Instantly share code, notes, and snippets.

@tingjhenjiang
Last active December 8, 2021 19:10
Show Gist options
  • Save tingjhenjiang/322fc4f664e8bb65b5943094186e5a0e to your computer and use it in GitHub Desktop.
Save tingjhenjiang/322fc4f664e8bb65b5943094186e5a0e to your computer and use it in GitHub Desktop.
網頁及國家圖書館期刊文獻網檢索結果轉RIS
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