REPLACE INTO "translators" VALUES ('96b9f483-c44d-5784-cdad-ce21b984fe01', '2006-11-24 17:00:00', 1, 100, 4, 'Amazon.com', 'Simon Kornblith', '^http://www\.amazon\.com/', 'function detectWeb(doc, url) { var searchRe = new RegExp(''^http://(?:www\.)?amazon\.com/(gp/search/|exec/obidos/search-handle-url/|s/)''); if(searchRe.test(doc.location.href)) { return "multiple"; } else { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//table/tbody/tr/td[@class="bucket"]/div[@class="content"]/ul/li''; if(doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext()) { return "book"; } } } ', 'function scrape(doc) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var newItem = new Zotero.Item("book"); // Retrieve authors try { var xpath = ''//table/tbody/tr/td[2]/form/div[@class="buying"]/a/text()[1]''; var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt; while(elmt = elmts.iterateNext()) { newItem.creators.push(Zotero.Utilities.cleanAuthor(elmt.nodeValue, "author")); } } catch(ex) {Zotero.Utilities.debug(ex);} // Retrieve data from "Product Details" box var xpath = ''//table/tbody/tr/td[@class="bucket"]/div[@class="content"]/ul/li''; var elmts = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null); var elmt; newItem.extra = ""; while(elmt = elmts.iterateNext()) { try { var attribute = Zotero.Utilities.cleanString(doc.evaluate(''./B[1]/text()[1]'', elmt, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue); var value = Zotero.Utilities.getNodeString(doc, elmt, ''./descendant-or-self::*[name() != "B"]/text()'', nsResolver); if(value) { value = Zotero.Utilities.cleanString(value); if(attribute == "Publisher:") { if(value.lastIndexOf("(") != -1) { newItem.date = value.substring(value.lastIndexOf("(")+1, value.length-1); value = value.substring(0, value.lastIndexOf("(")-1); } if(value.lastIndexOf(";") != -1) { newItem.edition = value.substring(value.lastIndexOf(";")+2, value.length); value = value.substring(0, value.lastIndexOf(";")); } newItem.publisher = value; } else if(attribute == "ISBN:") { newItem.ISBN = value; } else if(value.substring(value.indexOf(" ")+1, value.length) == "pages") { newItem.pages = value.substring(0, value.indexOf(" ")); } else if(attribute != "Average Customer Review:") { if(attribute == "In-Print Editions:") { value = value.replace(" | All Editions", ""); } else { value = value.replace(/\([^)]*\)/g, ""); } newItem.extra += attribute+" "+value+"\n"; } } } catch(ex) {} } if(newItem.extra) { newItem.extra = newItem.extra.substr(0, newItem.extra.length-1); } newItem.attachments.push({title:"Amazon.com Product Page", document:doc}); var xpath = ''//table/tbody/tr/td[2]/form/div[@class="buying"]/b[@class="sans"]/text()[1]''; var title = doc.evaluate(xpath, doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext().nodeValue; title = Zotero.Utilities.cleanString(title); if(title.lastIndexOf("(") != -1 && title.lastIndexOf(")") == title.length-1) { title = title.substring(0, title.lastIndexOf("(")-1); } newItem.title = title; newItem.complete(); } function doWeb(doc, url) { var searchRe = new RegExp(''^http://www\.amazon\.com/(gp/search/|exec/obidos/search-handle-url/|s/)''); var m = searchRe.exec(doc.location.href) if(m) { var namespace = doc.documentElement.namespaceURI; var nsResolver = namespace ? function(prefix) { if (prefix == ''x'') return namespace; else return null; } : null; var xpath = ''//table/tbody/tr/td/a/span[@class="srTitle"]/../..''; var searchresults = Zotero.Utilities.gatherElementsOnXPath(doc, doc, xpath, nsResolver); var items = Zotero.Utilities.getItemArray(doc, searchresults, ''^http://www\.amazon\.com/(gp/product/|exec/obidos/tg/detail/|[^/]+/dp/)'', ''^(Buy new|Hardcover|Paperback|Digital)$''); items = Zotero.selectItems(items); if(!items) { return true; } var uris = new Array(); for(var i in items) { uris.push(i); } Zotero.Utilities.processDocuments(uris, function(doc) { scrape(doc) }, function() { Zotero.done(); }, null); Zotero.wait(); } else { scrape(doc); } }');