zotero/translators/DBLP Computer Science Bibliography.js

170 lines
4.7 KiB
JavaScript

{
"translatorID":"625c6435-e235-4402-a48f-3095a9c1a09c",
"translatorType":4,
"label":"DBLP Computer Science Bibliography",
"creator":"Adam Crymble",
"target":"http://(search?|dblp?).mpi-inf",
"minVersion":"1.0.0b4.r5",
"maxVersion":"",
"priority":100,
"inRepository":true,
"lastUpdated":"2008-09-02 13:40:00"
}
function detectWeb(doc, url) {
if (doc.title.match("journals")) {
return "journalArticle";
} else if (doc.title.match("conf")) {
return "conferencePaper";
} else if (doc.title.match("DBLP entry")) {
return "bookSection";
}
}
//DBLP Computer Science Database Translator. Code by Adam Crymble.
//Doesn't work for multiple entries. Site uses a different URL for the search and single entry. Multiple code attached as comment.
function associateData (newItem, dataTags, field, zoteroField) {
if (dataTags[field]) {
newItem[zoteroField] = dataTags[field];
}
}
function scrape(doc, url) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
} : null;
var dataTags = new Object();
var mediaType = detectWeb(doc, url);
if (mediaType == "bookSection") {
var newItem = new Zotero.Item("bookSection");
} else if (mediaType == "conferencePaper") {
var newItem = new Zotero.Item("conferencePaper");
} else if (mediaType == "journalArticle") {
var newItem = new Zotero.Item("journalArticle");
}
var xPathAllData = doc.evaluate('//pre', doc, nsResolver, XPathResult.ANY_TYPE, null);
var allData = xPathAllData.iterateNext().textContent.split("},");
var cleanFirstEntry = allData[0].indexOf(",");
allData[0] = allData[0].substr(cleanFirstEntry);
var headers = new Array();
var content = new Array();
var splitAllData;
for (var i = 0; i < allData.length-2; i++) {
splitAllData = allData[i].split("=");
headers.push(splitAllData[0].replace(/^\s*|\s*$|\W*/g, ''));
content.push(splitAllData[1].replace(/^\s*|\s*$|\{*/g, ''));
fieldTitle = headers[i].replace(",", '');
if (fieldTitle == "author") {
var authors = content[i].split("and");
for (var j =0; j<authors.length; j++) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(authors[j], "author"));
}
} else if (fieldTitle == "editor") {
var editors = content[i].split("and");
for (var j =0; j<editors.length; j++) {
newItem.creators.push(Zotero.Utilities.cleanAuthor(editors[j], "editor"));
}
} else {
dataTags[fieldTitle] = content[i];
}
}
if (mediaType == "conferencePaper") {
associateData (newItem, dataTags, "booktitle", "conferenceName");
} else {
associateData (newItem, dataTags, "booktitle", "bookTitle");
}
newItem.url = doc.location.href;
associateData (newItem, dataTags, "year", "date");
associateData (newItem, dataTags, "pages", "pages");
associateData (newItem, dataTags, "title", "title");
associateData (newItem, dataTags, "publisher", "publisher");
associateData (newItem, dataTags, "volume", "volume");
associateData (newItem, dataTags, "isbn", "ISBN");
associateData (newItem, dataTags, "series", "series");
associateData (newItem, dataTags, "journal", "publicationTitle");
associateData (newItem, dataTags, "number", "issue");
newItem.complete();
}
function doWeb(doc, url) {
var namespace = doc.documentElement.namespaceURI;
var nsResolver = namespace ? function(prefix) {
if (prefix == 'x') return namespace; else return null;
} : null;
var articles = new Array();
/* Multiple code doesn't work due to Permission denied to get property HTMLDocument.documentElement error.
if (detectWeb(doc, url) == "multiple") {
var items = new Object();
//newer interface xPaths
if (doc.title.match("DEMO")) {
var titles = doc.evaluate('//a/font', doc, nsResolver, XPathResult.ANY_TYPE, null);
var links = doc.evaluate('//dt/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
while (next_title = titles.iterateNext()) {
items[links.iterateNext().href] = next_title.textContent;
}
//older interface xPaths
} else {
var titles = doc.evaluate('//td[3]', doc, nsResolver, XPathResult.ANY_TYPE, null);
var links = doc.evaluate('//td[1]/a', doc, nsResolver, XPathResult.ANY_TYPE, null);
var next_title;
var split1;
var split2;
while (next_title = titles.iterateNext()) {
split1 = next_title.textContent.indexOf(":");
var title = next_title.textContent.substr(split1+2);
split2 = title.indexOf(".");
title = title.substr(0, split2);
items[links.iterateNext().href] = title;
}
}
items = Zotero.selectItems(items);
for (var i in items) {
articles.push(i);
}
} else {
*/
articles = [url];
//}
Zotero.Utilities.processDocuments(articles, scrape, function() {Zotero.done();});
Zotero.wait();
}