Permalink
Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.
Sign up
Fetching contributors…
Cannot retrieve contributors at this time
{ | |
"translatorID": "1dd21245-29cf-434d-b5b8-49eae0a6912a", | |
"label": "CLASE", | |
"creator": "Sebastian Karcher", | |
"target": "^https?://132\\.248\\.9\\.1\\:", | |
"minVersion": "3.0", | |
"maxVersion": "", | |
"priority": 100, | |
"inRepository": true, | |
"translatorType": 4, | |
"browserSupport": "gcsibv", | |
"lastUpdated": "2013-12-07 15:15:58" | |
} | |
function detectWeb(doc, url) { | |
if (url.indexOf("func=full-set") != -1) return "journalArticle" | |
else if (url.indexOf("func=short") != -1 || url.indexOf("func=find") != -1) return "multiple"; | |
} | |
function cleanAuthorstring(author) { | |
//removes author number in parentheses and e-mails | |
author = author.replace(/\(\d+\)/, "").replace(/[^\s]+@[^\s]+/, "").replace(/\-\s*$/, "") | |
return author | |
} | |
function scrape(doc, url) { | |
var newItem = new Zotero.Item("journalArticle"); | |
var title = ZU.xpathText(doc, '//tr/th[contains(@class, "txtLeft") and contains(text(), "Título")]/following-sibling::td'); | |
var publication = ZU.xpathText(doc, '//tr/th[contains(@class, "txtLeft") and contains(text(), "Revista")]/following-sibling::td'); | |
var date = ZU.xpathText(doc, '//tr/th[contains(@class, "txtLeft") and contains(text(), "Año de la revista")]/following-sibling::td'); | |
var ISSN = ZU.xpathText(doc, '//tr/th[contains(@class, "txtLeft") and contains(text(), "ISSN")]/following-sibling::td'); | |
var language = ZU.xpathText(doc, '//tr/th[contains(@class, "txtLeft") and contains(text(), "Idioma") and not(contains(text(), "resumen"))]/following-sibling::td'); | |
var abstract = ZU.xpathText(doc, '//tr/th[contains(@class, "txtLeft") and contains(text(), "Resumen")]/following-sibling::td'); | |
var fulltext = ZU.xpathText(doc, '//tr/th[contains(@class, "txtLeft") and contains(text(), "Texto completo")]/following-sibling::td'); | |
//Descripción field has pages, issue and volume | |
var description = ZU.xpathText(doc, '//tr/th[contains(@class, "txtLeft") and contains(text(), "Descripción")]/following-sibling::td'); | |
if (description) { | |
var volume = description.match(/V([^\s]+)/); | |
var issue = description.match(/N([^\s]+)/); | |
var pages = description.match(/P([^\s]+)/); | |
} | |
//Authors and Tags can have multiple rows. In that case the td[1] remains empty we loop through them until that's no longer the case | |
var author1 = ZU.xpathText(doc, '//tr/th[contains(@class, "txtLeft") and contains(text(), "Autor")]/following-sibling::td'); | |
if (author1) newItem.creators.push(ZU.cleanAuthor(cleanAuthorstring(author1), "author", true)) | |
var authorloop = ZU.xpath(doc, '//tr[td[@id="bold" and contains(text(), "Autor")]]/following-sibling::tr/td[1]') | |
var author; | |
for (var i in authorloop) { | |
if (authorloop[i].textContent.search(/[^\s]/) == -1) { | |
author = ZU.xpathText(authorloop[i], './following-sibling::td') | |
if (author.length > 0) newItem.creators.push(ZU.cleanAuthor(cleanAuthorstring(author), "author", true)); | |
} else { | |
break | |
} | |
} | |
var tag1 = ZU.xpathText(doc, '//tr/th[contains(@class, "txtLeft") and contains(text(), "Palabra Clave")]/following-sibling::td'); | |
if (tag1) newItem.tags.push(tag1.trim()) | |
var tagloop = ZU.xpath(doc, '//tr[th[contains(@class, "txtLeft") and contains(text(), "Palabra Clave")]]/following-sibling::tr/td[1]') | |
var tag; | |
for (var i in tagloop) { | |
if (tagloop[i].textContent.search(/[^\s]/) == -1) { | |
tag = ZU.xpathText(tagloop[i], './following-sibling::td').trim() | |
if (tag.length > 0) newItem.tags.push(tag); | |
} else { | |
break | |
} | |
} | |
if (fulltext) { | |
fulltext = fulltext.trim(); | |
if (fulltext.search(/\.pdf/) != -1) { | |
newItem.attachments.push({ | |
url: fulltext, | |
title: "CLASE Full Text PDF", | |
mimeType: "application/pdf" | |
}) | |
} else { | |
newItem.attachments.push({ | |
url: fulltext, | |
title: "CLASE Full Text", | |
mimeType: "text/html" | |
}) | |
} | |
} | |
newItem.attachments.push({ | |
document: doc, | |
title: "CLASE Record Snapshot", | |
mimeType: "text/html" | |
}) | |
newItem.title = title; | |
newItem.publication = publication; | |
newItem.date = date; | |
if (pages) newItem.pages = pages[1]; | |
if (volume) newItem.volume = volume[1]; | |
if (issue) newItem.issue = issue[1]; | |
newItem.abstractNote = abstract; | |
newItem.ISSN = ISSN; | |
newItem.language = language; | |
newItem.complete(); | |
} | |
function doWeb(doc, url) { | |
var articles = new Array(); | |
var items = {}; | |
if (detectWeb(doc, url) == "multiple") { | |
//this currently doesn't do anything as multiple detect is disabled | |
var titles = doc.evaluate('//tr/td/a[contains(@href, "func=full-set-set")][2]', doc, null, XPathResult.ANY_TYPE, null); | |
var next_title; | |
while (next_title = titles.iterateNext()) { | |
items[next_title.href] = next_title.textContent; | |
} | |
Zotero.selectItems(items, function (items) { | |
if (!items) { | |
return true; | |
} | |
for (var i in items) { | |
articles.push(i); | |
} | |
Z.debug(articles) | |
Zotero.Utilities.processDocuments(articles, scrape); | |
}) | |
} else { | |
scrape(doc, url); | |
} | |
}/** BEGIN TEST CASES **/ | |
var testCases = [] | |
/** END TEST CASES **/ |