diff --git a/translators/APN.ru.js b/translators/APN.ru.js new file mode 100644 index 0000000000..2a43ee99e6 --- /dev/null +++ b/translators/APN.ru.js @@ -0,0 +1,60 @@ +{ + "translatorID": "737216af-fc48-4aa5-bfae-560c9cfc5df5", + "label": "Агенство политических новостей", + "creator": "Avram Lyon", + "target": "^https?:\\/\\/www\\.apn\\.ru\\/", + "minVersion": "2.0", + "maxVersion": "", + "priority": 100, + "inRepository": true, + "translatorType": 4, + "lastUpdated": "2011-05-24 00:34:40" +} + +/* FW LINE 43:f6588e951d9d */ function flatten(c){var b=new Array();for(var d in c){var e=c[d];if(e instanceof Array){b=b.concat(flatten(e))}else{b.push(e)}}return b}var FW={_scrapers:new Array()};FW._Base=function(){this.callHook=function(b,c,e,a){if(typeof this["hooks"]==="object"){var d=this["hooks"][b];if(typeof d==="function"){d(c,e,a)}}};this.evaluateThing=function(f,e,c){var b=typeof f;if(b==="string"){return f}else{if(b==="object"){if(f instanceof Array){var d=this.evaluateThing;var a=f.map(function(g){return d(g,e,c)});return flatten(a)}else{return f.evaluate(e,c)}}else{if(b==="function"){return f(e,c)}else{return undefined}}}}};FW.Scraper=function(a){FW._scrapers.push(new FW._Scraper(a))};FW._Scraper=function(a){for(x in a){this[x]=a[x]}this._singleFieldNames=["abstractNote","applicationNumber","archive","archiveLocation","artworkMedium","artworkSize","assignee","audioFileType","audioRecordingType","billNumber","blogTitle","bookTitle","callNumber","caseName","code","codeNumber","codePages","codeVolume","committee","company","conferenceName","country","court","date","dateDecided","dateEnacted","dictionaryTitle","distributor","docketNumber","documentNumber","DOI","edition","encyclopediaTitle","episodeNumber","extra","filingDate","firstPage","forumTitle","genre","history","institution","interviewMedium","ISBN","ISSN","issue","issueDate","issuingAuthority","journalAbbreviation","label","language","legalStatus","legislativeBody","letterType","libraryCatalog","manuscriptType","mapType","medium","meetingName","nameOfAct","network","number","numberOfVolumes","numPages","pages","patentNumber","place","postType","presentationType","priorityNumbers","proceedingsTitle","programTitle","programmingLanguage","publicLawNumber","publicationTitle","publisher","references","reportNumber","reportType","reporter","reporterVolume","rights","runningTime","scale","section","series","seriesNumber","seriesText","seriesTitle","session","shortTitle","studio","subject","system","thesisType","title","type","university","url","version","videoRecordingType","volume","websiteTitle","websiteType"];this._makeAttachments=function(q,b,f,s){if(f instanceof Array){f.forEach(function(k){this._makeAttachments(q,b,k,s)},this)}else{if(typeof f==="object"){var p=f.urls||f.url;var m=f.types||f.type;var e=f.titles||f.title;var h=this.evaluateThing(p,q,b);var o=this.evaluateThing(e,q,b);var r=this.evaluateThing(m,q,b);var l=(r instanceof Array);var n=(o instanceof Array);if(!(h instanceof Array)){h=[h]}for(var j in h){var c=h[j];var g;var d;if(l){g=r[j]}else{g=r}if(n){d=o[j]}else{d=o}s.attachments.push({url:c,title:d,type:g})}}}};this.makeItems=function(o,b,m,c,l){var q=new Zotero.Item(this.itemType);q.url=b;for(var h in this._singleFieldNames){var n=this._singleFieldNames[h];if(this[n]){var g=this.evaluateThing(this[n],o,b);if(g instanceof Array){q[n]=g[0]}else{q[n]=g}}}var r=["creators","tags"];for(var f in r){var p=r[f];var d=this.evaluateThing(this[p],o,b);if(d){for(var e in d){q[p].push(d[e])}}}this._makeAttachments(o,b,this["attachments"],q);c(q);l([q])}};FW._Scraper.prototype=new FW._Base;FW.MultiScraper=function(a){FW._scrapers.push(new FW._MultiScraper(a))};FW._MultiScraper=function(a){for(x in a){this[x]=a[x]}this._mkSelectItems=function(e,d){var b=new Object;for(var c in e){b[d[c]]=e[c]}return b};this._selectItems=function(e,d){var b=new Array();for(var c in Zotero.selectItems(this._mkSelectItems(e,d))){b.push(c)}return b};this._mkAttachments=function(g,d,f){var b=this.evaluateThing(this["attachments"],g,d);var c=new Object();if(b){for(var e in f){c[f[e]]=b[e]}}return c};this._makeChoices=function(f,p,c,d,h){if(f instanceof Array){f.forEach(function(k){this._makeTitlesUrls(k,p,c,d,h)},this)}else{if(typeof f==="object"){var m=f.urls||f.url;var e=f.titles||f.title;var n=this.evaluateThing(m,p,c);var j=this.evaluateThing(e,p,c);var l=(j instanceof Array);if(!(n instanceof Array)){n=[n]}for(var g in n){var b=n[g];var o;if(l){o=j[g]}else{o=j}h.push(b);d.push(o)}}}};this.makeItems=function(m,b,k,c,h){Zotero.debug("Entering MultiScraper.makeItems");if(this.beforeFilter){var n=this.beforeFilter(m,b);if(n!=b){this.makeItems(m,n,k,c,h);return}}var g=[];var l=[];this._makeChoices(this["choices"],m,b,g,l);var f=this._selectItems(g,l);var d=this._mkAttachments(m,b,l);if(!f){h([])}else{var j=[];var e=this.itemTrans;Zotero.Utilities.processDocuments(f,function(q){var p=q.documentURI;var o=e;if(o===undefined){o=FW.getScraper(q,p)}if(o===undefined){}else{o.makeItems(q,p,d[p],function(r){j.push(r);c(r)},function(){})}},function(){h(j)})}}};FW._MultiScraper.prototype=new FW._Base;FW.DelegateTranslator=function(a){return new FW._DelegateTranslator(a)};FW._DelegateTranslator=function(a){for(x in a){this[x]=a[x]}this._translator=Zotero.loadTranslator(this.translatorType);this._translator.setTranslator(this.translatorId);this.makeItems=function(g,d,b,f,c){Zotero.debug("Entering DelegateTranslator.makeItems");var e;Zotero.Utilities.HTTP.doGet(d,function(h){this._translator.setHandler("itemDone",function(k,j){e=j;if(b){j.attachments=b}});this._translator.setString(h);this._translator.translate();f(e)},function(){c([e])})}};FW.DelegateTranslator.prototype=new FW._Scraper;FW._StringMagic=function(){this._filters=new Array();this.addFilter=function(a){this._filters.push(a);return this};this.split=function(a){return this.addFilter(function(b){return b.split(a).filter(function(c){return(c!="")})})};this.replace=function(c,b,a){return this.addFilter(function(d){if(d.match(c)){return d.replace(c,b,a)}else{return d}})};this.prepend=function(a){return this.replace(/^/,a)};this.append=function(a){return this.replace(/$/,a)};this.remove=function(b,a){return this.replace(b,"",a)};this.trim=function(){return this.addFilter(function(a){return Zotero.Utilities.trim(a)})};this.trimInternal=function(){return this.addFilter(function(a){return Zotero.Utilities.trimInternal(a)})};this.match=function(a,b){if(!b){b=0}return this.addFilter(function(d){var c=d.match(a);if(c===undefined||c===null){return undefined}else{return c[b]}})};this.cleanAuthor=function(b,a){return this.addFilter(function(c){return Zotero.Utilities.cleanAuthor(c,b,a)})};this.key=function(a){return this.addFilter(function(b){return b[a]})};this.capitalizeTitle=function(){return this.addFilter(function(a){return Zotero.Utilities.capitalizeTitle(a)})};this.unescapeHTML=function(){return this.addFilter(function(a){return Zotero.Utilities.unescapeHTML(a)})};this.unescape=function(){return this.addFilter(function(a){return unescape(a)})};this._applyFilters=function(c,e){for(i in this._filters){c=flatten(c);c=c.filter(function(a){return((a!==undefined)&&(a!==null))});for(var d=0;d0&&a[0]){return f}}}return undefined};FW.getScraper=function(b,a){var c=FW.detectWeb(b,a);return FW._scrapers.filter(function(d){return(d.evaluateThing(d.itemType,b,a)==c)&&(d.evaluateThing(d.detect,b,a))})[0]};FW.doWeb=function(c,a){Zotero.debug("Entering FW.doWeb");var b=FW.getScraper(c,a);b.makeItems(c,a,[],function(d){b.callHook("scraperDone",d,c,a);if(!d.title){d.title=""}d.complete()},function(){Zotero.done()});Zotero.wait();Zotero.debug("Leaving FW.doWeb")}; +/* + APN.ru (Агенство политических новостей) Translator + Copyright (C) 2011 Avram Lyon, ajlyon@gmail.com + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +function detectWeb(doc, url) { + return FW.detectWeb(doc, url); +} +function doWeb(doc, url) { return FW.doWeb(doc, url); } + + +/** Articles */ +FW.Scraper({ itemType : 'newspaperArticle', + detect : FW.Xpath('//div[@class="block_div"]/div/*[@class="article_title"]'), + title : FW.Xpath('//div[@class="block_div"]/div/*[@class="article_title"]').text().trim(), + attachments : [ { + url : FW.Url().replace(/article/,"print"), + type: "text/html", + title: "APN.ru Printable" }], + creators : FW.Xpath('//div[@class="block_div"]/div/a[@class="pub_aname"]').text().cleanAuthor("author"), + date : FW.Xpath('//div[@class="block_div"]/div/span[@class="pub_date"]').text(), + publicationTitle : "Агенство политических новостей" + }); + + +/** Search results */ +FW.MultiScraper({ itemType : "multiple", + detect : FW.Xpath('//div[@class="search_content"]'), + choices : { + titles : FW.Xpath('//div[@class="search_content"]/div/a[@class="searchtitle"]').text(), + urls : FW.Xpath('//div[@class="search_content"]/div/a[@class="searchtitle"]').key('href').text() + } +}); diff --git a/translators/Ab Imperio.js b/translators/Ab Imperio.js new file mode 100644 index 0000000000..a42d495bdb --- /dev/null +++ b/translators/Ab Imperio.js @@ -0,0 +1,75 @@ +{ + "translatorID": "f3e31f93-c18d-4ba3-9aa6-1963702b5762", + "label": "Ab Imperio", + "creator": "Avram Lyon", + "target": "^https?://(?:www\\.)?abimperio\\.net/", + "minVersion": "2.0", + "maxVersion": "", + "priority": 100, + "inRepository": true, + "translatorType": 4, + "lastUpdated": "2011-05-24 00:28:49" +} + +/* FW LINE 43:f6588e951d9d */ function flatten(c){var b=new Array();for(var d in c){var e=c[d];if(e instanceof Array){b=b.concat(flatten(e))}else{b.push(e)}}return b}var FW={_scrapers:new Array()};FW._Base=function(){this.callHook=function(b,c,e,a){if(typeof this["hooks"]==="object"){var d=this["hooks"][b];if(typeof d==="function"){d(c,e,a)}}};this.evaluateThing=function(f,e,c){var b=typeof f;if(b==="string"){return f}else{if(b==="object"){if(f instanceof Array){var d=this.evaluateThing;var a=f.map(function(g){return d(g,e,c)});return flatten(a)}else{return f.evaluate(e,c)}}else{if(b==="function"){return f(e,c)}else{return undefined}}}}};FW.Scraper=function(a){FW._scrapers.push(new FW._Scraper(a))};FW._Scraper=function(a){for(x in a){this[x]=a[x]}this._singleFieldNames=["abstractNote","applicationNumber","archive","archiveLocation","artworkMedium","artworkSize","assignee","audioFileType","audioRecordingType","billNumber","blogTitle","bookTitle","callNumber","caseName","code","codeNumber","codePages","codeVolume","committee","company","conferenceName","country","court","date","dateDecided","dateEnacted","dictionaryTitle","distributor","docketNumber","documentNumber","DOI","edition","encyclopediaTitle","episodeNumber","extra","filingDate","firstPage","forumTitle","genre","history","institution","interviewMedium","ISBN","ISSN","issue","issueDate","issuingAuthority","journalAbbreviation","label","language","legalStatus","legislativeBody","letterType","libraryCatalog","manuscriptType","mapType","medium","meetingName","nameOfAct","network","number","numberOfVolumes","numPages","pages","patentNumber","place","postType","presentationType","priorityNumbers","proceedingsTitle","programTitle","programmingLanguage","publicLawNumber","publicationTitle","publisher","references","reportNumber","reportType","reporter","reporterVolume","rights","runningTime","scale","section","series","seriesNumber","seriesText","seriesTitle","session","shortTitle","studio","subject","system","thesisType","title","type","university","url","version","videoRecordingType","volume","websiteTitle","websiteType"];this._makeAttachments=function(q,b,f,s){if(f instanceof Array){f.forEach(function(k){this._makeAttachments(q,b,k,s)},this)}else{if(typeof f==="object"){var p=f.urls||f.url;var m=f.types||f.type;var e=f.titles||f.title;var h=this.evaluateThing(p,q,b);var o=this.evaluateThing(e,q,b);var r=this.evaluateThing(m,q,b);var l=(r instanceof Array);var n=(o instanceof Array);if(!(h instanceof Array)){h=[h]}for(var j in h){var c=h[j];var g;var d;if(l){g=r[j]}else{g=r}if(n){d=o[j]}else{d=o}s.attachments.push({url:c,title:d,type:g})}}}};this.makeItems=function(o,b,m,c,l){var q=new Zotero.Item(this.itemType);q.url=b;for(var h in this._singleFieldNames){var n=this._singleFieldNames[h];if(this[n]){var g=this.evaluateThing(this[n],o,b);if(g instanceof Array){q[n]=g[0]}else{q[n]=g}}}var r=["creators","tags"];for(var f in r){var p=r[f];var d=this.evaluateThing(this[p],o,b);if(d){for(var e in d){q[p].push(d[e])}}}this._makeAttachments(o,b,this["attachments"],q);c(q);l([q])}};FW._Scraper.prototype=new FW._Base;FW.MultiScraper=function(a){FW._scrapers.push(new FW._MultiScraper(a))};FW._MultiScraper=function(a){for(x in a){this[x]=a[x]}this._mkSelectItems=function(e,d){var b=new Object;for(var c in e){b[d[c]]=e[c]}return b};this._selectItems=function(e,d){var b=new Array();for(var c in Zotero.selectItems(this._mkSelectItems(e,d))){b.push(c)}return b};this._mkAttachments=function(g,d,f){var b=this.evaluateThing(this["attachments"],g,d);var c=new Object();if(b){for(var e in f){c[f[e]]=b[e]}}return c};this._makeChoices=function(f,p,c,d,h){if(f instanceof Array){f.forEach(function(k){this._makeTitlesUrls(k,p,c,d,h)},this)}else{if(typeof f==="object"){var m=f.urls||f.url;var e=f.titles||f.title;var n=this.evaluateThing(m,p,c);var j=this.evaluateThing(e,p,c);var l=(j instanceof Array);if(!(n instanceof Array)){n=[n]}for(var g in n){var b=n[g];var o;if(l){o=j[g]}else{o=j}h.push(b);d.push(o)}}}};this.makeItems=function(m,b,k,c,h){Zotero.debug("Entering MultiScraper.makeItems");if(this.beforeFilter){var n=this.beforeFilter(m,b);if(n!=b){this.makeItems(m,n,k,c,h);return}}var g=[];var l=[];this._makeChoices(this["choices"],m,b,g,l);var f=this._selectItems(g,l);var d=this._mkAttachments(m,b,l);if(!f){h([])}else{var j=[];var e=this.itemTrans;Zotero.Utilities.processDocuments(f,function(q){var p=q.documentURI;var o=e;if(o===undefined){o=FW.getScraper(q,p)}if(o===undefined){}else{o.makeItems(q,p,d[p],function(r){j.push(r);c(r)},function(){})}},function(){h(j)})}}};FW._MultiScraper.prototype=new FW._Base;FW.DelegateTranslator=function(a){return new FW._DelegateTranslator(a)};FW._DelegateTranslator=function(a){for(x in a){this[x]=a[x]}this._translator=Zotero.loadTranslator(this.translatorType);this._translator.setTranslator(this.translatorId);this.makeItems=function(g,d,b,f,c){Zotero.debug("Entering DelegateTranslator.makeItems");var e;Zotero.Utilities.HTTP.doGet(d,function(h){this._translator.setHandler("itemDone",function(k,j){e=j;if(b){j.attachments=b}});this._translator.setString(h);this._translator.translate();f(e)},function(){c([e])})}};FW.DelegateTranslator.prototype=new FW._Scraper;FW._StringMagic=function(){this._filters=new Array();this.addFilter=function(a){this._filters.push(a);return this};this.split=function(a){return this.addFilter(function(b){return b.split(a).filter(function(c){return(c!="")})})};this.replace=function(c,b,a){return this.addFilter(function(d){if(d.match(c)){return d.replace(c,b,a)}else{return d}})};this.prepend=function(a){return this.replace(/^/,a)};this.append=function(a){return this.replace(/$/,a)};this.remove=function(b,a){return this.replace(b,"",a)};this.trim=function(){return this.addFilter(function(a){return Zotero.Utilities.trim(a)})};this.trimInternal=function(){return this.addFilter(function(a){return Zotero.Utilities.trimInternal(a)})};this.match=function(a,b){if(!b){b=0}return this.addFilter(function(d){var c=d.match(a);if(c===undefined||c===null){return undefined}else{return c[b]}})};this.cleanAuthor=function(b,a){return this.addFilter(function(c){return Zotero.Utilities.cleanAuthor(c,b,a)})};this.key=function(a){return this.addFilter(function(b){return b[a]})};this.capitalizeTitle=function(){return this.addFilter(function(a){return Zotero.Utilities.capitalizeTitle(a)})};this.unescapeHTML=function(){return this.addFilter(function(a){return Zotero.Utilities.unescapeHTML(a)})};this.unescape=function(){return this.addFilter(function(a){return unescape(a)})};this._applyFilters=function(c,e){for(i in this._filters){c=flatten(c);c=c.filter(function(a){return((a!==undefined)&&(a!==null))});for(var d=0;d0&&a[0]){return f}}}return undefined};FW.getScraper=function(b,a){var c=FW.detectWeb(b,a);return FW._scrapers.filter(function(d){return(d.evaluateThing(d.itemType,b,a)==c)&&(d.evaluateThing(d.detect,b,a))})[0]};FW.doWeb=function(c,a){Zotero.debug("Entering FW.doWeb");var b=FW.getScraper(c,a);b.makeItems(c,a,[],function(d){b.callHook("scraperDone",d,c,a);if(!d.title){d.title=""}d.complete()},function(){Zotero.done()});Zotero.wait();Zotero.debug("Leaving FW.doWeb")}; +/* + Ab Imperio Translator + Copyright (C) 2011 Avram Lyon, ajlyon@gmail.com + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +function detectWeb(doc, url) { + return FW.detectWeb(doc, url); +} +function doWeb(doc, url) { return FW.doWeb(doc, url); } + + +/** Articles */ +FW.Scraper({ itemType : 'journalArticle', + detect : FW.Xpath('//center[h3]/h3'), + title : FW.Xpath('//center[h3]/h3').text().trim(), + attachments : [ + { + url : FW.Xpath('//a[contains(@href,"pdf") and contains(text(),"PDF")]').key("href"), + type : "application/pdf", + title: "Ab Imperio PDF" + }, + { + url : FW.Url(), + type : "text/html", + title: "Ab Imperio Snapshot" + }, + { + url : FW.Xpath('//table//td/a[img[contains(@src,"doc.gif")]]').key("href"), + type : "text/html", + title: "Ab Imperio Snapshot" + }], + creators : FW.Xpath('//center[h3]').text().remove(/^[^\n]*\n/).remove(/\n.*/).cleanAuthor("author"), + // Of course, release date is always later, but we'll still call this a date and not a volume + date : FW.Xpath('//center[h3]/font').text().match(/\/([0-9]{4})/,1), + issue : FW.Xpath('//center[h3]/font').text().match(/([0-9]+)\//,1), + abstractNote : FW.Xpath('//center[h3]/following-sibling::p[1]').text(), + publicationTitle : "Ab Imperio" +}); + +/* This can be thrown off by articles that the user doesn't have access to... */ +/** Search results */ +FW.MultiScraper({ itemType : "multiple", + detect : FW.Url().match(/state=(?:shown|srch)/), + choices : { + titles : FW.Xpath('//a[contains(@href,"state=showa")]').text(), + urls : FW.Xpath('//a[contains(@href,"state=showa")]').key('href').text() + } +}); \ No newline at end of file diff --git a/translators/EurasiaNet.js b/translators/EurasiaNet.js new file mode 100644 index 0000000000..d434d0f463 --- /dev/null +++ b/translators/EurasiaNet.js @@ -0,0 +1,46 @@ +{ + "translatorID": "58ae38d2-80d3-4569-81eb-9cefc43ac5b4", + "label": "EurasiaNet", + "creator": "Avram Lyon", + "target": "^https?://www\\.eurasianet\\.org/", + "minVersion": "1.0", + "maxVersion": "", + "priority": 100, + "inRepository": true, + "translatorType": 4, + "lastUpdated": "2011-05-23 23:58:49" +} + +/* FW LINE 40:74d6b94e0722 /** Copyright (c) 2010, Erik Hetzner, GPL 3 or later */ function flatten(c){var b=new Array();for(var d in c){var e=c[d];if(e instanceof Array){b=b.concat(flatten(e))}else{b.push(e)}}return b}var FW={_scrapers:new Array()};FW._Base=function(){this.callHook=function(b,c,e,a){if(typeof this["hooks"]==="object"){var d=this["hooks"][b];if(typeof d==="function"){d(c,e,a)}}};this.evaluateThing=function(f,e,c){var b=typeof f;if(b==="string"){return f}else{if(b==="object"){if(f instanceof Array){var d=this.evaluateThing;var a=f.map(function(g){return d(g,e,c)});return flatten(a)}else{return f.evaluate(e,c)}}else{if(b==="function"){return f(e,c)}else{return undefined}}}}};FW.Scraper=function(a){FW._scrapers.push(new FW._Scraper(a))};FW._Scraper=function(a){for(x in a){this[x]=a[x]}this._singleFieldNames=["abstractNote","applicationNumber","archive","archiveLocation","artworkMedium","artworkSize","assignee","audioFileType","audioRecordingType","billNumber","blogTitle","bookTitle","callNumber","caseName","code","codeNumber","codePages","codeVolume","committee","company","conferenceName","country","court","date","dateDecided","dateEnacted","dictionaryTitle","distributor","docketNumber","documentNumber","DOI","edition","encyclopediaTitle","episodeNumber","extra","filingDate","firstPage","forumTitle","genre","history","institution","interviewMedium","ISBN","ISSN","issue","issueDate","issuingAuthority","journalAbbreviation","label","language","legalStatus","legislativeBody","letterType","libraryCatalog","manuscriptType","mapType","medium","meetingName","nameOfAct","network","number","numberOfVolumes","numPages","pages","patentNumber","place","postType","presentationType","priorityNumbers","proceedingsTitle","programTitle","programmingLanguage","publicLawNumber","publicationTitle","publisher","references","reportNumber","reportType","reporter","reporterVolume","rights","runningTime","scale","section","series","seriesNumber","seriesText","seriesTitle","session","shortTitle","studio","subject","system","thesisType","title","type","university","url","version","videoRecordingType","volume","websiteTitle","websiteType"];this._makeAttachments=function(q,b,f,s){if(f instanceof Array){f.forEach(function(k){this._makeAttachments(q,b,k,s)},this)}else{if(typeof f==="object"){var p=f.urls||f.url;var m=f.types||f.type;var e=f.titles||f.title;var h=this.evaluateThing(p,q,b);var o=this.evaluateThing(e,q,b);var r=this.evaluateThing(m,q,b);var l=(r instanceof Array);var n=(o instanceof Array);if(!(h instanceof Array)){h=[h]}for(var j in h){var c=h[j];var g;var d;if(l){g=r[j]}else{g=r}if(n){d=o[j]}else{d=o}s.attachments.push({url:c,title:d,type:g})}}}};this.makeItems=function(o,b,m,c,l){var q=new Zotero.Item(this.itemType);q.url=b;for(var h in this._singleFieldNames){var n=this._singleFieldNames[h];if(this[n]){var g=this.evaluateThing(this[n],o,b);if(g instanceof Array){q[n]=g[0]}else{q[n]=g}}}var r=["creators","tags"];for(var f in r){var p=r[f];var d=this.evaluateThing(this[p],o,b);if(d){for(var e in d){q[p].push(d[e])}}}this._makeAttachments(o,b,this["attachments"],q);c(q);l([q])}};FW._Scraper.prototype=new FW._Base;FW.MultiScraper=function(a){FW._scrapers.push(new FW._MultiScraper(a))};FW._MultiScraper=function(a){for(x in a){this[x]=a[x]}this._mkSelectItems=function(e,d){var b=new Object;for(var c in e){b[d[c]]=e[c]}return b};this._selectItems=function(e,d){var b=new Array();for(var c in Zotero.selectItems(this._mkSelectItems(e,d))){b.push(c)}return b};this._mkAttachments=function(g,d,f){var b=this.evaluateThing(this["attachments"],g,d);var c=new Object();if(b){for(var e in f){c[f[e]]=b[e]}}return c};this._makeChoices=function(f,p,c,d,h){if(f instanceof Array){f.forEach(function(k){this._makeTitlesUrls(k,p,c,d,h)},this)}else{if(typeof f==="object"){var m=f.urls||f.url;var e=f.titles||f.title;var n=this.evaluateThing(m,p,c);var j=this.evaluateThing(e,p,c);var l=(j instanceof Array);if(!(n instanceof Array)){n=[n]}for(var g in n){var b=n[g];var o;if(l){o=j[g]}else{o=j}h.push(b);d.push(o)}}}};this.makeItems=function(m,b,k,c,h){Zotero.debug("Entering MultiScraper.makeItems");if(this.beforeFilter){var n=this.beforeFilter(m,b);if(n!=b){this.makeItems(m,n,k,c,h);return}}var g=[];var l=[];this._makeChoices(this["choices"],m,b,g,l);var f=this._selectItems(g,l);var d=this._mkAttachments(m,b,l);if(!f){h([])}else{var j=[];var e=this.itemTrans;Zotero.Utilities.processDocuments(f,function(q){var p=q.documentURI;var o=e;if(o===undefined){o=FW.getScraper(q,p)}if(o===undefined){}else{o.makeItems(q,p,d[p],function(r){Zotero.debug("YAR!!!");j.push(r);c(r)},function(){})}},function(){h(j)})}}};FW._MultiScraper.prototype=new FW._Base;FW.DelegateTranslator=function(a){return new FW._DelegateTranslator(a)};FW._DelegateTranslator=function(a){for(x in a){this[x]=a[x]}this._translator=Zotero.loadTranslator(this.translatorType);this._translator.setTranslator(this.translatorId);this.makeItems=function(g,d,b,f,c){Zotero.debug("Entering DelegateTranslator.makeItems");var e;Zotero.Utilities.HTTP.doGet(d,function(h){this._translator.setHandler("itemDone",function(k,j){e=j;if(b){j.attachments=b}});this._translator.setString(h);this._translator.translate();f(e)},function(){c([e])})}};FW.DelegateTranslator.prototype=new FW._Scraper;FW._StringMagic=function(){this._filters=new Array();this.addFilter=function(a){this._filters.push(a);return this};this.split=function(a){return this.addFilter(function(b){return b.split(a).filter(function(c){return(c!="")})})};this.replace=function(c,b,a){return this.addFilter(function(d){if(d.match(c)){return d.replace(c,b,a)}else{return d}})};this.prepend=function(a){return this.replace(/^/,a)};this.append=function(a){return this.replace(/$/,a)};this.remove=function(b,a){return this.replace(b,"",a)};this.trim=function(){return this.addFilter(function(a){return Zotero.Utilities.trim(a)})};this.trimInternal=function(){return this.addFilter(function(a){return Zotero.Utilities.trimInternal(a)})};this.match=function(a,b){if(!b){b=0}return this.addFilter(function(d){var c=d.match(a);if(c===undefined){return undefined}else{return c[b]}})};this.cleanAuthor=function(b,a){return this.addFilter(function(c){return Zotero.Utilities.cleanAuthor(c,b,a)})};this.key=function(a){return this.addFilter(function(b){return b[a]})};this.capitalizeTitle=function(){return this.addFilter(function(a){return Zotero.Utilities.capitalizeTitle(a)})};this.unescapeHTML=function(){return this.addFilter(function(a){return Zotero.Utilities.unescapeHTML(a)})};this.unescape=function(){return this.addFilter(function(a){return unescape(a)})};this._applyFilters=function(c,e){Zotero.debug("Entering StringMagic._applyFilters");for(i in this._filters){c=flatten(c);c=c.filter(function(a){return((a!==undefined)&&(a!==null))});for(var d=0;d0&&a[0]){return f}}}return undefined};FW.getScraper=function(b,a){var c=FW.detectWeb(b,a);return FW._scrapers.filter(function(d){return(d.evaluateThing(d.itemType,b,a)==c)&&(d.evaluateThing(d.detect,b,a))})[0]};FW.doWeb=function(c,a){Zotero.debug("Entering FW.doWeb");var b=FW.getScraper(c,a);b.makeItems(c,a,[],function(d){b.callHook("scraperDone",d,c,a);if(!d.title){d.title=""}d.complete()},function(){Zotero.done()});Zotero.wait();Zotero.debug("Leaving FW.doWeb")}; +function detectWeb(doc, url) { return FW.detectWeb(doc, url); } +function doWeb(doc, url) { return FW.doWeb(doc, url); } + +/** Articles */ +FW.Scraper({ +itemType : 'newspaperArticle', +detect : FW.Url().match(/(\/node\/\d+|articles\/[a-zA-Z0-9]+\.shtml)/), +title : FW.Xpath('//h1[@class="title"]').text().trim(), +attachments : [ + { url: FW.Url().replace(/node/,"print"), + title: "EurasiaNet Printable", + type: "text/html" } + // Video? Not yet. +/* { url: FW.Xpath('//object[@id="videofield-embedded_api"]/param[@name="flashvars"]').key("value").match(/"url":"([^"])"/,0), + title: "EurasiaNet Video", + type: "video/x-flv" } */ + ], +// here, we use the replace(..) to break names on   +creators : FW.Xpath('//div[@class="submitted"]/span[@class="authors"]/a').text().replace(/\s/," ").cleanAuthor("author"), +date : FW.Xpath('//div[@class="submitted"]/span[@class="timestamp"]').text(), +tags : FW.Xpath('//div[@class="terms terms-inline"]/ul/li/a[@rel="tag"]').text(), +publicationTitle : "EurasiaNet" +}); + +FW.MultiScraper({ +itemType : 'multiple', +detect : FW.Url().match(/\/search\/node/), +choices : { + titles : FW.Xpath('//dl[@class="search-results node-results"]/dt[@class="title"]/a').text().trim(), + urls : FW.Xpath('//dl[@class="search-results node-results"]/dt[@class="title"]/a').key("href") +} +}); \ No newline at end of file diff --git a/translators/Gasyrlar Awazy.js b/translators/Gasyrlar Awazy.js new file mode 100644 index 0000000000..b6be9f2843 --- /dev/null +++ b/translators/Gasyrlar Awazy.js @@ -0,0 +1,43 @@ +{ + "translatorID": "8afd6209-ef61-4e64-ae6c-3b2d6f71aa50", + "label": "Гасырлар авазы / Эхо веков", + "creator": "Avram Lyon", + "target": "^https?://www\\.archive\\.gov\\.tatarstan\\.ru/magazine/go/anonymous/main/\\?path=mg:/", + "minVersion": "1.0", + "maxVersion": "", + "priority": 100, + "inRepository": true, + "translatorType": 4, + "lastUpdated": "2011-05-24 00:50:46" +} + +/* FW LINE 43:f6588e951d9d */ function flatten(c){var b=new Array();for(var d in c){var e=c[d];if(e instanceof Array){b=b.concat(flatten(e))}else{b.push(e)}}return b}var FW={_scrapers:new Array()};FW._Base=function(){this.callHook=function(b,c,e,a){if(typeof this["hooks"]==="object"){var d=this["hooks"][b];if(typeof d==="function"){d(c,e,a)}}};this.evaluateThing=function(f,e,c){var b=typeof f;if(b==="string"){return f}else{if(b==="object"){if(f instanceof Array){var d=this.evaluateThing;var a=f.map(function(g){return d(g,e,c)});return flatten(a)}else{return f.evaluate(e,c)}}else{if(b==="function"){return f(e,c)}else{return undefined}}}}};FW.Scraper=function(a){FW._scrapers.push(new FW._Scraper(a))};FW._Scraper=function(a){for(x in a){this[x]=a[x]}this._singleFieldNames=["abstractNote","applicationNumber","archive","archiveLocation","artworkMedium","artworkSize","assignee","audioFileType","audioRecordingType","billNumber","blogTitle","bookTitle","callNumber","caseName","code","codeNumber","codePages","codeVolume","committee","company","conferenceName","country","court","date","dateDecided","dateEnacted","dictionaryTitle","distributor","docketNumber","documentNumber","DOI","edition","encyclopediaTitle","episodeNumber","extra","filingDate","firstPage","forumTitle","genre","history","institution","interviewMedium","ISBN","ISSN","issue","issueDate","issuingAuthority","journalAbbreviation","label","language","legalStatus","legislativeBody","letterType","libraryCatalog","manuscriptType","mapType","medium","meetingName","nameOfAct","network","number","numberOfVolumes","numPages","pages","patentNumber","place","postType","presentationType","priorityNumbers","proceedingsTitle","programTitle","programmingLanguage","publicLawNumber","publicationTitle","publisher","references","reportNumber","reportType","reporter","reporterVolume","rights","runningTime","scale","section","series","seriesNumber","seriesText","seriesTitle","session","shortTitle","studio","subject","system","thesisType","title","type","university","url","version","videoRecordingType","volume","websiteTitle","websiteType"];this._makeAttachments=function(q,b,f,s){if(f instanceof Array){f.forEach(function(k){this._makeAttachments(q,b,k,s)},this)}else{if(typeof f==="object"){var p=f.urls||f.url;var m=f.types||f.type;var e=f.titles||f.title;var h=this.evaluateThing(p,q,b);var o=this.evaluateThing(e,q,b);var r=this.evaluateThing(m,q,b);var l=(r instanceof Array);var n=(o instanceof Array);if(!(h instanceof Array)){h=[h]}for(var j in h){var c=h[j];var g;var d;if(l){g=r[j]}else{g=r}if(n){d=o[j]}else{d=o}s.attachments.push({url:c,title:d,type:g})}}}};this.makeItems=function(o,b,m,c,l){var q=new Zotero.Item(this.itemType);q.url=b;for(var h in this._singleFieldNames){var n=this._singleFieldNames[h];if(this[n]){var g=this.evaluateThing(this[n],o,b);if(g instanceof Array){q[n]=g[0]}else{q[n]=g}}}var r=["creators","tags"];for(var f in r){var p=r[f];var d=this.evaluateThing(this[p],o,b);if(d){for(var e in d){q[p].push(d[e])}}}this._makeAttachments(o,b,this["attachments"],q);c(q);l([q])}};FW._Scraper.prototype=new FW._Base;FW.MultiScraper=function(a){FW._scrapers.push(new FW._MultiScraper(a))};FW._MultiScraper=function(a){for(x in a){this[x]=a[x]}this._mkSelectItems=function(e,d){var b=new Object;for(var c in e){b[d[c]]=e[c]}return b};this._selectItems=function(e,d){var b=new Array();for(var c in Zotero.selectItems(this._mkSelectItems(e,d))){b.push(c)}return b};this._mkAttachments=function(g,d,f){var b=this.evaluateThing(this["attachments"],g,d);var c=new Object();if(b){for(var e in f){c[f[e]]=b[e]}}return c};this._makeChoices=function(f,p,c,d,h){if(f instanceof Array){f.forEach(function(k){this._makeTitlesUrls(k,p,c,d,h)},this)}else{if(typeof f==="object"){var m=f.urls||f.url;var e=f.titles||f.title;var n=this.evaluateThing(m,p,c);var j=this.evaluateThing(e,p,c);var l=(j instanceof Array);if(!(n instanceof Array)){n=[n]}for(var g in n){var b=n[g];var o;if(l){o=j[g]}else{o=j}h.push(b);d.push(o)}}}};this.makeItems=function(m,b,k,c,h){Zotero.debug("Entering MultiScraper.makeItems");if(this.beforeFilter){var n=this.beforeFilter(m,b);if(n!=b){this.makeItems(m,n,k,c,h);return}}var g=[];var l=[];this._makeChoices(this["choices"],m,b,g,l);var f=this._selectItems(g,l);var d=this._mkAttachments(m,b,l);if(!f){h([])}else{var j=[];var e=this.itemTrans;Zotero.Utilities.processDocuments(f,function(q){var p=q.documentURI;var o=e;if(o===undefined){o=FW.getScraper(q,p)}if(o===undefined){}else{o.makeItems(q,p,d[p],function(r){j.push(r);c(r)},function(){})}},function(){h(j)})}}};FW._MultiScraper.prototype=new FW._Base;FW.DelegateTranslator=function(a){return new FW._DelegateTranslator(a)};FW._DelegateTranslator=function(a){for(x in a){this[x]=a[x]}this._translator=Zotero.loadTranslator(this.translatorType);this._translator.setTranslator(this.translatorId);this.makeItems=function(g,d,b,f,c){Zotero.debug("Entering DelegateTranslator.makeItems");var e;Zotero.Utilities.HTTP.doGet(d,function(h){this._translator.setHandler("itemDone",function(k,j){e=j;if(b){j.attachments=b}});this._translator.setString(h);this._translator.translate();f(e)},function(){c([e])})}};FW.DelegateTranslator.prototype=new FW._Scraper;FW._StringMagic=function(){this._filters=new Array();this.addFilter=function(a){this._filters.push(a);return this};this.split=function(a){return this.addFilter(function(b){return b.split(a).filter(function(c){return(c!="")})})};this.replace=function(c,b,a){return this.addFilter(function(d){if(d.match(c)){return d.replace(c,b,a)}else{return d}})};this.prepend=function(a){return this.replace(/^/,a)};this.append=function(a){return this.replace(/$/,a)};this.remove=function(b,a){return this.replace(b,"",a)};this.trim=function(){return this.addFilter(function(a){return Zotero.Utilities.trim(a)})};this.trimInternal=function(){return this.addFilter(function(a){return Zotero.Utilities.trimInternal(a)})};this.match=function(a,b){if(!b){b=0}return this.addFilter(function(d){var c=d.match(a);if(c===undefined||c===null){return undefined}else{return c[b]}})};this.cleanAuthor=function(b,a){return this.addFilter(function(c){return Zotero.Utilities.cleanAuthor(c,b,a)})};this.key=function(a){return this.addFilter(function(b){return b[a]})};this.capitalizeTitle=function(){return this.addFilter(function(a){return Zotero.Utilities.capitalizeTitle(a)})};this.unescapeHTML=function(){return this.addFilter(function(a){return Zotero.Utilities.unescapeHTML(a)})};this.unescape=function(){return this.addFilter(function(a){return unescape(a)})};this._applyFilters=function(c,e){for(i in this._filters){c=flatten(c);c=c.filter(function(a){return((a!==undefined)&&(a!==null))});for(var d=0;d0&&a[0]){return f}}}return undefined};FW.getScraper=function(b,a){var c=FW.detectWeb(b,a);return FW._scrapers.filter(function(d){return(d.evaluateThing(d.itemType,b,a)==c)&&(d.evaluateThing(d.detect,b,a))})[0]};FW.doWeb=function(c,a){Zotero.debug("Entering FW.doWeb");var b=FW.getScraper(c,a);b.makeItems(c,a,[],function(d){b.callHook("scraperDone",d,c,a);if(!d.title){d.title=""}d.complete()},function(){Zotero.done()});Zotero.wait();Zotero.debug("Leaving FW.doWeb")}; +function detectWeb(doc, url) { +if (url.match(/numbers\/\d{4}[^/]*\/[\d_]+\/[\d_]+\/?$/)) { +return FW.detectWeb(doc, url); +} +return false; // no multi now +} +function doWeb(doc, url) { return FW.doWeb(doc, url); } + +/** Articles */ +FW.Scraper({ itemType : 'journalArticle', + detect : FW.Xpath('//span[@class="bt1b"]').text(), + title : FW.Xpath('//span[@class="bt1b"]').text().trim(), + attachments : [ { + url : FW.Url(), + type : "text/html", + title : "Echo of the Ages Snapshot" + }], + creators : FW.Xpath('//td[p[@align="justify"]]/p[@align="right"]').text().remove(/,[^,]*(доктор|кандидат|специалист|аспирант)[^,]*/g).split(',').cleanAuthor("author"), + date : FW.Xpath('//td[span[@class="bt1b"]]/a[1]').text().match(/([0-9]{4})/), + issue : FW.Xpath('//td[span[@class="bt1b"]]/a[1]').text().match(/([0-9]{4})(.*)/,2), + section : FW.Xpath('//td[span[@class="bt1b"]]/a[2]').text(), + publicationTitle : "Гасырлар авазы / Эхо веков" }); + +/** Search results +FW.MultiScraper({ itemType : "multiple", +detect : !FW.Url().match(/numbers\/\d{4}[^/]*\/\d+\/\d+\/?$/), +titles : FW.Xpath('//a').text().replace(/numbers\/\d{4}[^/]*\/\d+\/\d+\/?$/), +urls : FW.Xpath('//ul[@class="results-list"]//h3/a').key('href').text() }); +*/ diff --git a/translators/Kommersant.js b/translators/Kommersant.js new file mode 100644 index 0000000000..db8f539909 --- /dev/null +++ b/translators/Kommersant.js @@ -0,0 +1,101 @@ +{ + "translatorID": "43bc17ed-e994-4fdb-ac28-594c839658ca", + "label": "Kommersant", + "creator": "Avram Lyon", + "target": "^https?:\\/\\/kommersant\\.ru\\/", + "minVersion": "2.1", + "maxVersion": "", + "priority": 100, + "inRepository": true, + "translatorType": 4, + "lastUpdated": "2011-05-24 01:01:53" +} + +/* FW LINE 43:f6588e951d9d */ function flatten(c){var b=new Array();for(var d in c){var e=c[d];if(e instanceof Array){b=b.concat(flatten(e))}else{b.push(e)}}return b}var FW={_scrapers:new Array()};FW._Base=function(){this.callHook=function(b,c,e,a){if(typeof this["hooks"]==="object"){var d=this["hooks"][b];if(typeof d==="function"){d(c,e,a)}}};this.evaluateThing=function(f,e,c){var b=typeof f;if(b==="string"){return f}else{if(b==="object"){if(f instanceof Array){var d=this.evaluateThing;var a=f.map(function(g){return d(g,e,c)});return flatten(a)}else{return f.evaluate(e,c)}}else{if(b==="function"){return f(e,c)}else{return undefined}}}}};FW.Scraper=function(a){FW._scrapers.push(new FW._Scraper(a))};FW._Scraper=function(a){for(x in a){this[x]=a[x]}this._singleFieldNames=["abstractNote","applicationNumber","archive","archiveLocation","artworkMedium","artworkSize","assignee","audioFileType","audioRecordingType","billNumber","blogTitle","bookTitle","callNumber","caseName","code","codeNumber","codePages","codeVolume","committee","company","conferenceName","country","court","date","dateDecided","dateEnacted","dictionaryTitle","distributor","docketNumber","documentNumber","DOI","edition","encyclopediaTitle","episodeNumber","extra","filingDate","firstPage","forumTitle","genre","history","institution","interviewMedium","ISBN","ISSN","issue","issueDate","issuingAuthority","journalAbbreviation","label","language","legalStatus","legislativeBody","letterType","libraryCatalog","manuscriptType","mapType","medium","meetingName","nameOfAct","network","number","numberOfVolumes","numPages","pages","patentNumber","place","postType","presentationType","priorityNumbers","proceedingsTitle","programTitle","programmingLanguage","publicLawNumber","publicationTitle","publisher","references","reportNumber","reportType","reporter","reporterVolume","rights","runningTime","scale","section","series","seriesNumber","seriesText","seriesTitle","session","shortTitle","studio","subject","system","thesisType","title","type","university","url","version","videoRecordingType","volume","websiteTitle","websiteType"];this._makeAttachments=function(q,b,f,s){if(f instanceof Array){f.forEach(function(k){this._makeAttachments(q,b,k,s)},this)}else{if(typeof f==="object"){var p=f.urls||f.url;var m=f.types||f.type;var e=f.titles||f.title;var h=this.evaluateThing(p,q,b);var o=this.evaluateThing(e,q,b);var r=this.evaluateThing(m,q,b);var l=(r instanceof Array);var n=(o instanceof Array);if(!(h instanceof Array)){h=[h]}for(var j in h){var c=h[j];var g;var d;if(l){g=r[j]}else{g=r}if(n){d=o[j]}else{d=o}s.attachments.push({url:c,title:d,type:g})}}}};this.makeItems=function(o,b,m,c,l){var q=new Zotero.Item(this.itemType);q.url=b;for(var h in this._singleFieldNames){var n=this._singleFieldNames[h];if(this[n]){var g=this.evaluateThing(this[n],o,b);if(g instanceof Array){q[n]=g[0]}else{q[n]=g}}}var r=["creators","tags"];for(var f in r){var p=r[f];var d=this.evaluateThing(this[p],o,b);if(d){for(var e in d){q[p].push(d[e])}}}this._makeAttachments(o,b,this["attachments"],q);c(q);l([q])}};FW._Scraper.prototype=new FW._Base;FW.MultiScraper=function(a){FW._scrapers.push(new FW._MultiScraper(a))};FW._MultiScraper=function(a){for(x in a){this[x]=a[x]}this._mkSelectItems=function(e,d){var b=new Object;for(var c in e){b[d[c]]=e[c]}return b};this._selectItems=function(e,d){var b=new Array();for(var c in Zotero.selectItems(this._mkSelectItems(e,d))){b.push(c)}return b};this._mkAttachments=function(g,d,f){var b=this.evaluateThing(this["attachments"],g,d);var c=new Object();if(b){for(var e in f){c[f[e]]=b[e]}}return c};this._makeChoices=function(f,p,c,d,h){if(f instanceof Array){f.forEach(function(k){this._makeTitlesUrls(k,p,c,d,h)},this)}else{if(typeof f==="object"){var m=f.urls||f.url;var e=f.titles||f.title;var n=this.evaluateThing(m,p,c);var j=this.evaluateThing(e,p,c);var l=(j instanceof Array);if(!(n instanceof Array)){n=[n]}for(var g in n){var b=n[g];var o;if(l){o=j[g]}else{o=j}h.push(b);d.push(o)}}}};this.makeItems=function(m,b,k,c,h){Zotero.debug("Entering MultiScraper.makeItems");if(this.beforeFilter){var n=this.beforeFilter(m,b);if(n!=b){this.makeItems(m,n,k,c,h);return}}var g=[];var l=[];this._makeChoices(this["choices"],m,b,g,l);var f=this._selectItems(g,l);var d=this._mkAttachments(m,b,l);if(!f){h([])}else{var j=[];var e=this.itemTrans;Zotero.Utilities.processDocuments(f,function(q){var p=q.documentURI;var o=e;if(o===undefined){o=FW.getScraper(q,p)}if(o===undefined){}else{o.makeItems(q,p,d[p],function(r){j.push(r);c(r)},function(){})}},function(){h(j)})}}};FW._MultiScraper.prototype=new FW._Base;FW.DelegateTranslator=function(a){return new FW._DelegateTranslator(a)};FW._DelegateTranslator=function(a){for(x in a){this[x]=a[x]}this._translator=Zotero.loadTranslator(this.translatorType);this._translator.setTranslator(this.translatorId);this.makeItems=function(g,d,b,f,c){Zotero.debug("Entering DelegateTranslator.makeItems");var e;Zotero.Utilities.HTTP.doGet(d,function(h){this._translator.setHandler("itemDone",function(k,j){e=j;if(b){j.attachments=b}});this._translator.setString(h);this._translator.translate();f(e)},function(){c([e])})}};FW.DelegateTranslator.prototype=new FW._Scraper;FW._StringMagic=function(){this._filters=new Array();this.addFilter=function(a){this._filters.push(a);return this};this.split=function(a){return this.addFilter(function(b){return b.split(a).filter(function(c){return(c!="")})})};this.replace=function(c,b,a){return this.addFilter(function(d){if(d.match(c)){return d.replace(c,b,a)}else{return d}})};this.prepend=function(a){return this.replace(/^/,a)};this.append=function(a){return this.replace(/$/,a)};this.remove=function(b,a){return this.replace(b,"",a)};this.trim=function(){return this.addFilter(function(a){return Zotero.Utilities.trim(a)})};this.trimInternal=function(){return this.addFilter(function(a){return Zotero.Utilities.trimInternal(a)})};this.match=function(a,b){if(!b){b=0}return this.addFilter(function(d){var c=d.match(a);if(c===undefined||c===null){return undefined}else{return c[b]}})};this.cleanAuthor=function(b,a){return this.addFilter(function(c){return Zotero.Utilities.cleanAuthor(c,b,a)})};this.key=function(a){return this.addFilter(function(b){return b[a]})};this.capitalizeTitle=function(){return this.addFilter(function(a){return Zotero.Utilities.capitalizeTitle(a)})};this.unescapeHTML=function(){return this.addFilter(function(a){return Zotero.Utilities.unescapeHTML(a)})};this.unescape=function(){return this.addFilter(function(a){return unescape(a)})};this._applyFilters=function(c,e){for(i in this._filters){c=flatten(c);c=c.filter(function(a){return((a!==undefined)&&(a!==null))});for(var d=0;d0&&a[0]){return f}}}return undefined};FW.getScraper=function(b,a){var c=FW.detectWeb(b,a);return FW._scrapers.filter(function(d){return(d.evaluateThing(d.itemType,b,a)==c)&&(d.evaluateThing(d.detect,b,a))})[0]};FW.doWeb=function(c,a){Zotero.debug("Entering FW.doWeb");var b=FW.getScraper(c,a);b.makeItems(c,a,[],function(d){b.callHook("scraperDone",d,c,a);if(!d.title){d.title=""}d.complete()},function(){Zotero.done()});Zotero.wait();Zotero.debug("Leaving FW.doWeb")}; +/* + Kommersant Translator + Copyright (C) 2011 Avram Lyon, ajlyon@gmail.com + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + + + +function detectWeb(doc, url) { + return FW.detectWeb(doc, url); +} +function doWeb(doc, url) { return FW.doWeb(doc, url); } + + +/** Articles */ +FW.Scraper({ itemType : 'magazineArticle', + detect : FW.Xpath('//div[@class="issue"]/a[contains(text(),"Журнал")]'), + title : FW.Xpath('//div[@class="document"]/div[@class="title"]').text().trim(), + attachments : [ + { + url : FW.Url(), + type : "text/html", + title : "Kommersant Snapshot" + } ], + creators : FW.Xpath('//div[contains(@class, "document_authors")][preceding-sibling::div[@class="document_vvodka"]]').text().split(",").cleanAuthor("author"), + date : FW.Xpath('//div[@class="issue"]/a').text().replace(/.*(\d{2})\.(\d{2})\.(\d{4})\s*$/,"$3-$2-$1"), + issue : FW.Xpath('//div[@class="issue"]/a').text().match(/№\s*(\d+(?: \(\d+\))?)/,1), + abstractNote : FW.Xpath('//div[@class="document_vvodka"]').text().trimInternal(), + publicationTitle : FW.Xpath('//div[@class="issue"]/a').text().match(/^\s*Журнал\s+"([^"]+)"/,1) +}); + +/** News Articles */ +FW.Scraper({ itemType : 'newspaperArticle', + detect : FW.Xpath('//div[@class="issue"]/a[contains(text(),"Газета") or contains(text(),"Online")]'), + title : FW.Xpath('//div[@class="document"]/div[@class="title"]').text().trim(), + attachments : [ + { + url : FW.Url(), + type : "text/html", + title : "Kommersant Snapshot" + } ], + creators : FW.Xpath('//div[contains(@class, "document_authors")][preceding-sibling::div[@class="document_vvodka"]]') + .text().replace(/\s?отдел\s[^,]*,?/gi,"") + .split(",").trim().cleanAuthor("author"), + date : FW.Xpath('//div[@class="issue"]/a').text().replace(/.*(\d{2})\.(\d{2})\.(\d{4})\s*(?:\/\/\s\d+:\d+)?$/,"$3-$2-$1"), + issue : FW.Xpath('//div[@class="issue"]/a').text().match(/№\s*(\d+(?: \(\d+\))?)/,1), + abstractNote : FW.Xpath('//div[@class="document_vvodka"]').text().trimInternal(), + publicationTitle : FW.Xpath('//div[@class="issue"]/a').text().match(/^\s*"([^"]+)"/,1) +}); + +/** News Articles - second format */ +FW.Scraper({ itemType : 'newspaperArticle', + detect : FW.Url().match(/\/News\//), + creators : FW.Xpath('//div[contains(@class, "document_authors")][preceding-sibling::div[@class="title"]]') + .text().replace(/\s?отдел\s[^,]*,?/gi,"") + .split(",").trim().cleanAuthor("author"), + publicationTitle : "Коммерсантъ", + title : FW.Xpath('//table[contains(@class,"news_block")]//div[@class="title"]').text().trim(), + attachments : [ + { + url : FW.Url(), + type : "text/html", + title : "Kommersant Snapshot" + } ], + date : FW.Xpath('//div[contains(@class,"other_blockname")]/div[@class="f-h"]').text().replace(/.*(\d{2})\.(\d{2})\.(\d{4}).*$/,"$3-$2-$1") + }); + +/** Search results */ +FW.MultiScraper({ itemType : "multiple", + detect : FW.Xpath('//table[contains(@class,"searchresults")]'), + choices : { + titles : FW.Xpath('//table[contains(@class,"searchresults")]/tbody/tr/td/a').text(), + urls : FW.Xpath('//table[contains(@class,"searchresults")]/tbody/tr/td/a').key('href').text() + } +}); diff --git a/translators/Matbugat.ru.js b/translators/Matbugat.ru.js new file mode 100644 index 0000000000..b65240f9fa --- /dev/null +++ b/translators/Matbugat.ru.js @@ -0,0 +1,71 @@ +{ + "translatorID": "4f7c1422-2eef-4d22-a4be-8e1a78ef7bd2", + "label": "Matbugat.ru", + "creator": "Avram Lyon", + "target": "^https?:\\/\\/(www\\.)?matbugat\\.ru\\/", + "minVersion": "2.0", + "maxVersion": "", + "priority": 100, + "inRepository": true, + "translatorType": 4, + "lastUpdated": "2011-05-24 01:07:06" +} + +/* FW LINE 43:f6588e951d9d */ function flatten(c){var b=new Array();for(var d in c){var e=c[d];if(e instanceof Array){b=b.concat(flatten(e))}else{b.push(e)}}return b}var FW={_scrapers:new Array()};FW._Base=function(){this.callHook=function(b,c,e,a){if(typeof this["hooks"]==="object"){var d=this["hooks"][b];if(typeof d==="function"){d(c,e,a)}}};this.evaluateThing=function(f,e,c){var b=typeof f;if(b==="string"){return f}else{if(b==="object"){if(f instanceof Array){var d=this.evaluateThing;var a=f.map(function(g){return d(g,e,c)});return flatten(a)}else{return f.evaluate(e,c)}}else{if(b==="function"){return f(e,c)}else{return undefined}}}}};FW.Scraper=function(a){FW._scrapers.push(new FW._Scraper(a))};FW._Scraper=function(a){for(x in a){this[x]=a[x]}this._singleFieldNames=["abstractNote","applicationNumber","archive","archiveLocation","artworkMedium","artworkSize","assignee","audioFileType","audioRecordingType","billNumber","blogTitle","bookTitle","callNumber","caseName","code","codeNumber","codePages","codeVolume","committee","company","conferenceName","country","court","date","dateDecided","dateEnacted","dictionaryTitle","distributor","docketNumber","documentNumber","DOI","edition","encyclopediaTitle","episodeNumber","extra","filingDate","firstPage","forumTitle","genre","history","institution","interviewMedium","ISBN","ISSN","issue","issueDate","issuingAuthority","journalAbbreviation","label","language","legalStatus","legislativeBody","letterType","libraryCatalog","manuscriptType","mapType","medium","meetingName","nameOfAct","network","number","numberOfVolumes","numPages","pages","patentNumber","place","postType","presentationType","priorityNumbers","proceedingsTitle","programTitle","programmingLanguage","publicLawNumber","publicationTitle","publisher","references","reportNumber","reportType","reporter","reporterVolume","rights","runningTime","scale","section","series","seriesNumber","seriesText","seriesTitle","session","shortTitle","studio","subject","system","thesisType","title","type","university","url","version","videoRecordingType","volume","websiteTitle","websiteType"];this._makeAttachments=function(q,b,f,s){if(f instanceof Array){f.forEach(function(k){this._makeAttachments(q,b,k,s)},this)}else{if(typeof f==="object"){var p=f.urls||f.url;var m=f.types||f.type;var e=f.titles||f.title;var h=this.evaluateThing(p,q,b);var o=this.evaluateThing(e,q,b);var r=this.evaluateThing(m,q,b);var l=(r instanceof Array);var n=(o instanceof Array);if(!(h instanceof Array)){h=[h]}for(var j in h){var c=h[j];var g;var d;if(l){g=r[j]}else{g=r}if(n){d=o[j]}else{d=o}s.attachments.push({url:c,title:d,type:g})}}}};this.makeItems=function(o,b,m,c,l){var q=new Zotero.Item(this.itemType);q.url=b;for(var h in this._singleFieldNames){var n=this._singleFieldNames[h];if(this[n]){var g=this.evaluateThing(this[n],o,b);if(g instanceof Array){q[n]=g[0]}else{q[n]=g}}}var r=["creators","tags"];for(var f in r){var p=r[f];var d=this.evaluateThing(this[p],o,b);if(d){for(var e in d){q[p].push(d[e])}}}this._makeAttachments(o,b,this["attachments"],q);c(q);l([q])}};FW._Scraper.prototype=new FW._Base;FW.MultiScraper=function(a){FW._scrapers.push(new FW._MultiScraper(a))};FW._MultiScraper=function(a){for(x in a){this[x]=a[x]}this._mkSelectItems=function(e,d){var b=new Object;for(var c in e){b[d[c]]=e[c]}return b};this._selectItems=function(e,d){var b=new Array();for(var c in Zotero.selectItems(this._mkSelectItems(e,d))){b.push(c)}return b};this._mkAttachments=function(g,d,f){var b=this.evaluateThing(this["attachments"],g,d);var c=new Object();if(b){for(var e in f){c[f[e]]=b[e]}}return c};this._makeChoices=function(f,p,c,d,h){if(f instanceof Array){f.forEach(function(k){this._makeTitlesUrls(k,p,c,d,h)},this)}else{if(typeof f==="object"){var m=f.urls||f.url;var e=f.titles||f.title;var n=this.evaluateThing(m,p,c);var j=this.evaluateThing(e,p,c);var l=(j instanceof Array);if(!(n instanceof Array)){n=[n]}for(var g in n){var b=n[g];var o;if(l){o=j[g]}else{o=j}h.push(b);d.push(o)}}}};this.makeItems=function(m,b,k,c,h){Zotero.debug("Entering MultiScraper.makeItems");if(this.beforeFilter){var n=this.beforeFilter(m,b);if(n!=b){this.makeItems(m,n,k,c,h);return}}var g=[];var l=[];this._makeChoices(this["choices"],m,b,g,l);var f=this._selectItems(g,l);var d=this._mkAttachments(m,b,l);if(!f){h([])}else{var j=[];var e=this.itemTrans;Zotero.Utilities.processDocuments(f,function(q){var p=q.documentURI;var o=e;if(o===undefined){o=FW.getScraper(q,p)}if(o===undefined){}else{o.makeItems(q,p,d[p],function(r){j.push(r);c(r)},function(){})}},function(){h(j)})}}};FW._MultiScraper.prototype=new FW._Base;FW.DelegateTranslator=function(a){return new FW._DelegateTranslator(a)};FW._DelegateTranslator=function(a){for(x in a){this[x]=a[x]}this._translator=Zotero.loadTranslator(this.translatorType);this._translator.setTranslator(this.translatorId);this.makeItems=function(g,d,b,f,c){Zotero.debug("Entering DelegateTranslator.makeItems");var e;Zotero.Utilities.HTTP.doGet(d,function(h){this._translator.setHandler("itemDone",function(k,j){e=j;if(b){j.attachments=b}});this._translator.setString(h);this._translator.translate();f(e)},function(){c([e])})}};FW.DelegateTranslator.prototype=new FW._Scraper;FW._StringMagic=function(){this._filters=new Array();this.addFilter=function(a){this._filters.push(a);return this};this.split=function(a){return this.addFilter(function(b){return b.split(a).filter(function(c){return(c!="")})})};this.replace=function(c,b,a){return this.addFilter(function(d){if(d.match(c)){return d.replace(c,b,a)}else{return d}})};this.prepend=function(a){return this.replace(/^/,a)};this.append=function(a){return this.replace(/$/,a)};this.remove=function(b,a){return this.replace(b,"",a)};this.trim=function(){return this.addFilter(function(a){return Zotero.Utilities.trim(a)})};this.trimInternal=function(){return this.addFilter(function(a){return Zotero.Utilities.trimInternal(a)})};this.match=function(a,b){if(!b){b=0}return this.addFilter(function(d){var c=d.match(a);if(c===undefined||c===null){return undefined}else{return c[b]}})};this.cleanAuthor=function(b,a){return this.addFilter(function(c){return Zotero.Utilities.cleanAuthor(c,b,a)})};this.key=function(a){return this.addFilter(function(b){return b[a]})};this.capitalizeTitle=function(){return this.addFilter(function(a){return Zotero.Utilities.capitalizeTitle(a)})};this.unescapeHTML=function(){return this.addFilter(function(a){return Zotero.Utilities.unescapeHTML(a)})};this.unescape=function(){return this.addFilter(function(a){return unescape(a)})};this._applyFilters=function(c,e){for(i in this._filters){c=flatten(c);c=c.filter(function(a){return((a!==undefined)&&(a!==null))});for(var d=0;d0&&a[0]){return f}}}return undefined};FW.getScraper=function(b,a){var c=FW.detectWeb(b,a);return FW._scrapers.filter(function(d){return(d.evaluateThing(d.itemType,b,a)==c)&&(d.evaluateThing(d.detect,b,a))})[0]};FW.doWeb=function(c,a){Zotero.debug("Entering FW.doWeb");var b=FW.getScraper(c,a);b.makeItems(c,a,[],function(d){b.callHook("scraperDone",d,c,a);if(!d.title){d.title=""}d.complete()},function(){Zotero.done()});Zotero.wait();Zotero.debug("Leaving FW.doWeb")}; +/* + Matbugat.ru Translator + Copyright (C) 2011 Avram Lyon, ajlyon@gmail.com + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +function detectWeb(doc, url) { + return FW.detectWeb(doc, url); +} +function doWeb(doc, url) { return FW.doWeb(doc, url); } + + +/** Articles */ +FW.Scraper({ itemType : 'newspaperArticle', + detect : FW.Xpath('//td[@class="table_main_news_right"]/font[@class="news_title"]'), + title : FW.Xpath('//td[@class="table_main_news_right"]/font[@class="news_title"]').text().trim(), + attachments : [ + { + url : FW.Url(), + type : "text/html", + title : "Matbugat.ru Snapshot" + + }], + creators : FW.Xpath('//td[@class="table_news_author"]/text()[1]').text().cleanAuthor("author"), + date : FW.Xpath('//td[@class="table_news_author"]').text().match(/(\d{1,2}\.\d{1,2}\.\d{4})/,1), + edition : FW.Xpath('//td[@class="table_news_author"]').text().match(/(№\s+[^\s|]+)/,1), + section : FW.Xpath('//td[@class="table_news_subject"]').text().match(/(\d{1,2}\.\d{1,2}\.\d{4})\s+(.*)/,2), + publicationTitle : FW.Xpath('//td[@class="table_news_author"]/a[@class="paper_link"]').text(), + hooks : { "scraperDone": function (item,doc, url) { Zotero.debug("hi!"); + for (i in item.creators) { + if (item.creators[i].lastName == item.creators[i].lastName.toUpperCase()) { + item.creators[i].lastName = Zotero.Utilities.capitalizeTitle( + item.creators[i].lastName.toLowerCase(),true); + } + } + }} + }); + + +/** Search results */ +FW.MultiScraper({ itemType : "multiple", + detect : FW.Xpath('//a[@class="news_preview"]'), + choices : { titles : FW.Xpath('//a[@class="news_title"]').text(), + urls : FW.Xpath('//a[@class="news_title"]').key('href').text() } +}); diff --git a/translators/The New York Review of Books.js b/translators/The New York Review of Books.js index 045efb2a83..1cab97fa26 100644 --- a/translators/The New York Review of Books.js +++ b/translators/The New York Review of Books.js @@ -1,106 +1,66 @@ { - "translatorID":"4c164cc8-be7b-4d02-bfbf-37a5622dfd56", - "translatorType":4, - "label":"The New York Review of Books", - "creator":"Simon Kornblith", - "target":"^https?://www\\.nybooks\\.com/", - "minVersion":"1.0.0b3.r1", - "maxVersion":"", - "priority":100, - "inRepository":true, - "lastUpdated":"2011-01-11 04:31:00" + "translatorID": "4c164cc8-be7b-4d02-bfbf-37a5622dfd56", + "label": "The New York Review of Books", + "creator": "Simon Kornblith, Avram Lyon", + "target": "^https?://www\\.nybooks\\.com/", + "minVersion": "1.0.0b3.r1", + "maxVersion": "", + "priority": 100, + "inRepository": true, + "translatorType": 4, + "lastUpdated": "2011-05-24 01:17:10" } -function detectWeb(doc, url) { - var articleRegexp = /^http:\/\/www\.nybooks\.com\/articles\/[0-9]+\/?/ - if(articleRegexp.test(url)) { - return "journalArticle"; - } else { - var aTags = doc.getElementsByTagName("a"); - for(var i=0; i0&&a[0]){return f}}}return undefined};FW.getScraper=function(b,a){var c=FW.detectWeb(b,a);return FW._scrapers.filter(function(d){return(d.evaluateThing(d.itemType,b,a)==c)&&(d.evaluateThing(d.detect,b,a))})[0]};FW.doWeb=function(c,a){Zotero.debug("Entering FW.doWeb");var b=FW.getScraper(c,a);b.makeItems(c,a,[],function(d){b.callHook("scraperDone",d,c,a);if(!d.title){d.title=""}d.complete()},function(){Zotero.done()});Zotero.wait();Zotero.debug("Leaving FW.doWeb")}; +function detectWeb(doc, url) { return FW.detectWeb(doc, url); } +function doWeb(doc, url) { return FW.doWeb(doc, url); } + +/** Articles */ +FW.Scraper({ +itemType : 'newspaperArticle', +detect : FW.Url().match(/\/articles\/archives\//), +title : FW.Xpath('//div[@id="page-title"]/h2').text().trim(), +creators : FW.Xpath('//div[@id="page-title"]/h3').text().cleanAuthor("author"), +url : FW.Url().remove(/\?.*/), +attachments : [ + { url : FW.Url().remove(/\?.*/).append("?pagination=false"), + type : "text/html", + title : "NYRB Snapshot" + }], +date : FW.Xpath('//div[@id="page-title"]/h5').text(), +abstractNote : FW.Xpath('//div[contains(@class, "article-reviewed-items")]').text().trimInternal().prepend("Review of: "), +publicationTitle : "The New York Review of Books", +ISSN : "0028-7504" +}); -function associateMeta(newItem, metaTags, field, zoteroField) { - if(metaTags.namedItem(field)) { - newItem[zoteroField] = Zotero.Utilities.trimInternal(metaTags.namedItem(field).getAttribute("content")); - } -} +/** Blog Posts */ +FW.Scraper({ +itemType : 'blogPost', +detect : FW.Url().match(/\/blogs\//), +title : FW.Xpath('//div[@id="article-body"]/h2').text().trim(), +creators : FW.Xpath('//div[@id="article-body"]/h3').text().cleanAuthor("author"), +url : FW.Url().remove(/\?.*/), +attachments : [ + { url : FW.Url().remove(/\?.*/).append("?pagination=false"), + type : "text/html", + title : "NYRB Snapshot" + }], +date : FW.Xpath('//div[@id="article-body"]//em[last()]').text(), +blogTitle : "NYRblog" +}); + +/** Search results */ +FW.MultiScraper({ +itemType : "multiple", +detect : FW.Url().match(/\/search\/\?(.*)q=./), +choices : { titles : FW.Xpath('//table[@class="result-table"]/tbody/tr/td[2]/h3/a').text(), +urls : FW.Xpath('//table[@class="result-table"]/tbody/tr/td[2]/h3/a').key('href').text() } +}); -function scrape(doc) { - var newItem = new Zotero.Item("journalArticle"); - newItem.publicationTitle = "The New York Review of Books"; - newItem.ISSN = "0028-7504"; - - var namespace = doc.documentElement.namespaceURI; - var nsResolver = namespace ? function(prefix) { - if (prefix == 'x') return namespace; else return null; - } : null; - - newItem.url = doc.location.href; - var metaTags = doc.getElementsByTagName("meta"); - - newItem.attachments.push({document:doc, title:"New York Review of Books Snapshot"}); - - associateMeta(newItem, metaTags, "dc.title", "title"); - - var info = doc.evaluate('//div[@id="center-content"]/h4[@class="date"]', - doc, nsResolver, XPathResult.ANY_TYPE, null).iterateNext(); - - if(info) { - // get date (which is in an a tag) - newItem.date = doc.evaluate("./a", info, nsResolver, XPathResult.ANY_TYPE, - null).iterateNext(); - if(newItem.date) { - newItem.date = newItem.date.textContent; - } - - info = Zotero.Utilities.trimInternal(info.textContent); - - // get volume and issue - var infoRe = /Volume ([0-9]+), Number ([0-9]+)/; - var m = infoRe.exec(info); - if(m) { - newItem.volume = m[1]; - newItem.issue = m[2]; - } - } - - - var authors = doc.evaluate('//div[@id="center-content"]/h4/a[substring(@href, 1, 9) = "/authors/"]', - doc, nsResolver, XPathResult.ANY_TYPE, null); - - - var author; - while(author = authors.iterateNext()) { - newItem.creators.push(Zotero.Utilities.cleanAuthor(author.textContent, "author", false)); - } - - newItem.complete(); -} - -function doWeb(doc, url) { - var articleRegexp = /^http:\/\/www\.nybooks\.com\/articles\/[0-9]+/ - if(articleRegexp.test(url)) { - scrape(doc); - } else { - var items = Zotero.Utilities.getItemArray(doc, doc, "^https?://www\\.nybooks\\.com/articles/[0-9]+/?"); - items = Zotero.selectItems(items); - - if(!items) { - return true; - } - - var urls = new Array(); - for(var i in items) { - urls.push(i); - } - - Zotero.Utilities.processDocuments(urls, scrape, function() { Zotero.done(); }); - Zotero.wait(); - } -} \ No newline at end of file +/** Issue ToC */ +FW.MultiScraper({ +itemType : "multiple", +detect : FW.Url().match(/\/issues\//), +choices : { titles : FW.Xpath('//ul[@class="issue-article-list"]/li/h3/a').text(), +urls : FW.Xpath('//ul[@class="issue-article-list"]/li/h3/a').key('href').text() } +}); diff --git a/translators/The New Yorker.js b/translators/The New Yorker.js new file mode 100644 index 0000000000..90b088a1c1 --- /dev/null +++ b/translators/The New Yorker.js @@ -0,0 +1,54 @@ +{ + "translatorID": "0fba73bf-f113-4d36-810f-2c654fa985fb", + "label": "The New Yorker", + "creator": "Sebastian Karcher", + "target": "^https?://www\\.newyorker\\.com", + "minVersion": "1.0", + "maxVersion": "", + "priority": 100, + "inRepository": true, + "translatorType": 4, + "lastUpdated": "2011-05-24 01:12:40" +} + +/* FW LINE 43:f6588e951d9d */ function flatten(c){var b=new Array();for(var d in c){var e=c[d];if(e instanceof Array){b=b.concat(flatten(e))}else{b.push(e)}}return b}var FW={_scrapers:new Array()};FW._Base=function(){this.callHook=function(b,c,e,a){if(typeof this["hooks"]==="object"){var d=this["hooks"][b];if(typeof d==="function"){d(c,e,a)}}};this.evaluateThing=function(f,e,c){var b=typeof f;if(b==="string"){return f}else{if(b==="object"){if(f instanceof Array){var d=this.evaluateThing;var a=f.map(function(g){return d(g,e,c)});return flatten(a)}else{return f.evaluate(e,c)}}else{if(b==="function"){return f(e,c)}else{return undefined}}}}};FW.Scraper=function(a){FW._scrapers.push(new FW._Scraper(a))};FW._Scraper=function(a){for(x in a){this[x]=a[x]}this._singleFieldNames=["abstractNote","applicationNumber","archive","archiveLocation","artworkMedium","artworkSize","assignee","audioFileType","audioRecordingType","billNumber","blogTitle","bookTitle","callNumber","caseName","code","codeNumber","codePages","codeVolume","committee","company","conferenceName","country","court","date","dateDecided","dateEnacted","dictionaryTitle","distributor","docketNumber","documentNumber","DOI","edition","encyclopediaTitle","episodeNumber","extra","filingDate","firstPage","forumTitle","genre","history","institution","interviewMedium","ISBN","ISSN","issue","issueDate","issuingAuthority","journalAbbreviation","label","language","legalStatus","legislativeBody","letterType","libraryCatalog","manuscriptType","mapType","medium","meetingName","nameOfAct","network","number","numberOfVolumes","numPages","pages","patentNumber","place","postType","presentationType","priorityNumbers","proceedingsTitle","programTitle","programmingLanguage","publicLawNumber","publicationTitle","publisher","references","reportNumber","reportType","reporter","reporterVolume","rights","runningTime","scale","section","series","seriesNumber","seriesText","seriesTitle","session","shortTitle","studio","subject","system","thesisType","title","type","university","url","version","videoRecordingType","volume","websiteTitle","websiteType"];this._makeAttachments=function(q,b,f,s){if(f instanceof Array){f.forEach(function(k){this._makeAttachments(q,b,k,s)},this)}else{if(typeof f==="object"){var p=f.urls||f.url;var m=f.types||f.type;var e=f.titles||f.title;var h=this.evaluateThing(p,q,b);var o=this.evaluateThing(e,q,b);var r=this.evaluateThing(m,q,b);var l=(r instanceof Array);var n=(o instanceof Array);if(!(h instanceof Array)){h=[h]}for(var j in h){var c=h[j];var g;var d;if(l){g=r[j]}else{g=r}if(n){d=o[j]}else{d=o}s.attachments.push({url:c,title:d,type:g})}}}};this.makeItems=function(o,b,m,c,l){var q=new Zotero.Item(this.itemType);q.url=b;for(var h in this._singleFieldNames){var n=this._singleFieldNames[h];if(this[n]){var g=this.evaluateThing(this[n],o,b);if(g instanceof Array){q[n]=g[0]}else{q[n]=g}}}var r=["creators","tags"];for(var f in r){var p=r[f];var d=this.evaluateThing(this[p],o,b);if(d){for(var e in d){q[p].push(d[e])}}}this._makeAttachments(o,b,this["attachments"],q);c(q);l([q])}};FW._Scraper.prototype=new FW._Base;FW.MultiScraper=function(a){FW._scrapers.push(new FW._MultiScraper(a))};FW._MultiScraper=function(a){for(x in a){this[x]=a[x]}this._mkSelectItems=function(e,d){var b=new Object;for(var c in e){b[d[c]]=e[c]}return b};this._selectItems=function(e,d){var b=new Array();for(var c in Zotero.selectItems(this._mkSelectItems(e,d))){b.push(c)}return b};this._mkAttachments=function(g,d,f){var b=this.evaluateThing(this["attachments"],g,d);var c=new Object();if(b){for(var e in f){c[f[e]]=b[e]}}return c};this._makeChoices=function(f,p,c,d,h){if(f instanceof Array){f.forEach(function(k){this._makeTitlesUrls(k,p,c,d,h)},this)}else{if(typeof f==="object"){var m=f.urls||f.url;var e=f.titles||f.title;var n=this.evaluateThing(m,p,c);var j=this.evaluateThing(e,p,c);var l=(j instanceof Array);if(!(n instanceof Array)){n=[n]}for(var g in n){var b=n[g];var o;if(l){o=j[g]}else{o=j}h.push(b);d.push(o)}}}};this.makeItems=function(m,b,k,c,h){Zotero.debug("Entering MultiScraper.makeItems");if(this.beforeFilter){var n=this.beforeFilter(m,b);if(n!=b){this.makeItems(m,n,k,c,h);return}}var g=[];var l=[];this._makeChoices(this["choices"],m,b,g,l);var f=this._selectItems(g,l);var d=this._mkAttachments(m,b,l);if(!f){h([])}else{var j=[];var e=this.itemTrans;Zotero.Utilities.processDocuments(f,function(q){var p=q.documentURI;var o=e;if(o===undefined){o=FW.getScraper(q,p)}if(o===undefined){}else{o.makeItems(q,p,d[p],function(r){j.push(r);c(r)},function(){})}},function(){h(j)})}}};FW._MultiScraper.prototype=new FW._Base;FW.DelegateTranslator=function(a){return new FW._DelegateTranslator(a)};FW._DelegateTranslator=function(a){for(x in a){this[x]=a[x]}this._translator=Zotero.loadTranslator(this.translatorType);this._translator.setTranslator(this.translatorId);this.makeItems=function(g,d,b,f,c){Zotero.debug("Entering DelegateTranslator.makeItems");var e;Zotero.Utilities.HTTP.doGet(d,function(h){this._translator.setHandler("itemDone",function(k,j){e=j;if(b){j.attachments=b}});this._translator.setString(h);this._translator.translate();f(e)},function(){c([e])})}};FW.DelegateTranslator.prototype=new FW._Scraper;FW._StringMagic=function(){this._filters=new Array();this.addFilter=function(a){this._filters.push(a);return this};this.split=function(a){return this.addFilter(function(b){return b.split(a).filter(function(c){return(c!="")})})};this.replace=function(c,b,a){return this.addFilter(function(d){if(d.match(c)){return d.replace(c,b,a)}else{return d}})};this.prepend=function(a){return this.replace(/^/,a)};this.append=function(a){return this.replace(/$/,a)};this.remove=function(b,a){return this.replace(b,"",a)};this.trim=function(){return this.addFilter(function(a){return Zotero.Utilities.trim(a)})};this.trimInternal=function(){return this.addFilter(function(a){return Zotero.Utilities.trimInternal(a)})};this.match=function(a,b){if(!b){b=0}return this.addFilter(function(d){var c=d.match(a);if(c===undefined||c===null){return undefined}else{return c[b]}})};this.cleanAuthor=function(b,a){return this.addFilter(function(c){return Zotero.Utilities.cleanAuthor(c,b,a)})};this.key=function(a){return this.addFilter(function(b){return b[a]})};this.capitalizeTitle=function(){return this.addFilter(function(a){return Zotero.Utilities.capitalizeTitle(a)})};this.unescapeHTML=function(){return this.addFilter(function(a){return Zotero.Utilities.unescapeHTML(a)})};this.unescape=function(){return this.addFilter(function(a){return unescape(a)})};this._applyFilters=function(c,e){for(i in this._filters){c=flatten(c);c=c.filter(function(a){return((a!==undefined)&&(a!==null))});for(var d=0;d0&&a[0]){return f}}}return undefined};FW.getScraper=function(b,a){var c=FW.detectWeb(b,a);return FW._scrapers.filter(function(d){return(d.evaluateThing(d.itemType,b,a)==c)&&(d.evaluateThing(d.detect,b,a))})[0]};FW.doWeb=function(c,a){Zotero.debug("Entering FW.doWeb");var b=FW.getScraper(c,a);b.makeItems(c,a,[],function(d){b.callHook("scraperDone",d,c,a);if(!d.title){d.title=""}d.complete()},function(){Zotero.done()});Zotero.wait();Zotero.debug("Leaving FW.doWeb")}; +function detectWeb(doc, url) { return FW.detectWeb(doc, url); } +function doWeb(doc, url) { return FW.doWeb(doc, url); } + +/** Articles */ +FW.Scraper({ +itemType : 'magazineArticle', +detect : FW.Xpath('//div[@id="articleheads"]'), +title : FW.Xpath('//div[@id="articleheads"]/h1').text().trim(), +attachments: [{ url: FW.Xpath('//li[@class="utility-print"]/a').key('href').text(), + type : "text/html", + title : "The New Yorker"}], + abstractNote: FW.Xpath('//div[@id="articleheads"]/h2').text().trim(), +creators : FW.Xpath('//div[@id="articleheads"]/h4/span[@class="c cs"]/a').text().cleanAuthor("author"), +date : FW.Xpath('//div[@id="articleheads"]/h4/span[@class="dd dds"]').text().trimInternal(), +publicationTitle : "The New Yorker", +ISSN: "0028-792X", +tags: FW.Xpath('//div[@id="keywords"]').text().trimInternal().remove(/Keywords?/).split(';') +}); + + /** Blog Posts */ + FW.Scraper({ +itemType : 'blogPost', +detect : FW.Xpath('//div[@id="blogs"]'), +title : FW.Xpath('//div[@id="pagebody"]/*/h3').text().trim(), +attachments: [{ url: FW.Xpath('//li[@class="utility-print"]/a').key('href').text(), + type : "text/html", + title : "The New Yorker"}], +creators : FW.Xpath('//cite[@class="vcard author"]').text().cleanAuthor("author"), +date : FW.Xpath('//div[@id="pagebody"]/*/div[@class="published"]').text(), +publicationTitle : "The New Yorker Blogs", +tags: FW.Xpath('//div[@class="entry-keywords"]/ul').text().trimInternal().remove(/Keywords?/).split(';') +}); + +/** Search results */ +FW.MultiScraper({ +itemType : "multiple", +detect : FW.Xpath('//div[@class="results"]'), +choices : {titles : FW.Xpath('//div[@class="info"]/h3[@class="header"]/a').text(), +urls : FW.Xpath('//div[@class="info"]/h3[@class="header"]/a').key('href').text() } +}); diff --git a/translators/VoxEU.js b/translators/VoxEU.js new file mode 100644 index 0000000000..3856251dfe --- /dev/null +++ b/translators/VoxEU.js @@ -0,0 +1,48 @@ +{ + "translatorID": "508e8fb9-8a33-4095-844f-133cba7e7b54", + "label": "VoxEU", + "creator": "Sebastian Karcher", + "target": "^https?://www\\.voxeu\\.org", + "minVersion": "1.0", + "maxVersion": "", + "priority": 100, + "inRepository": true, + "translatorType": 4, + "lastUpdated": "2011-05-24 01:09:58" +} + +/*Examples: +Individual item +http://www.voxeu.org/index.php?q=node/6258 +Search results +http://www.voxeu.org/index.php?q=search/node/eichengreen */ + +function detectWeb(doc, url) { return FW.detectWeb(doc, url); } +function doWeb(doc, url) { return FW.doWeb(doc, url); } + +/** Articles */ +FW.Scraper({ +itemType : 'blogPost', +detect : FW.Xpath('//div[@class="terms"]'), +title : FW.Xpath('//div[@id="main"]/div[@id="squeeze"]/h1').text().trim(), +attachments : { + url : FW.Url(), + title : "voxEU snapshot", + type : "text/html" +}, +creators : FW.Xpath('//table[@class="layouttable"]/tbody/*/td/p/a ').text().cleanAuthor("author"), +abstractNote : FW.Xpath('//table[@class="layouttable"]/tbody/tr/td/div/em').text(), +date : FW.Xpath('//table[@class="layouttable"]/tbody/*/td/p/text()[last()] ').text(), +publicationTitle : "VoxEU.org", +tags : FW.Xpath('//div[@class="terms"]//li').text() +}); + +/** Search results */ +FW.MultiScraper({ +itemType : "multiple", +detect : FW.Xpath('//div[@class="content"]/dl[contains(@class, "search-results")]'), +choices : { + titles : FW.Xpath('//div[@class="content"]/dl/dt[@class="title"]/a').text(), + urls : FW.Xpath('//div[@class="content"]/dl/dt[@class="title"]/a').key('href').text() +} +}); \ No newline at end of file diff --git a/translators/Washington Monthly.js b/translators/Washington Monthly.js new file mode 100644 index 0000000000..003ccf9e05 --- /dev/null +++ b/translators/Washington Monthly.js @@ -0,0 +1,102 @@ +{ + "translatorID": "e623eec7-ad54-4201-b709-654bf3fd7f70", + "label": "Washington Monthly", + "creator": "Sebastian Karcher", + "target": "^https?://www\\.washingtonmonthly\\.com", + "minVersion": "1.0", + "maxVersion": "", + "priority": 100, + "inRepository": true, + "translatorType": 4, + "lastUpdated": "2011-05-24 01:26:23" +} + +/* FW LINE 43:f6588e951d9d */ function flatten(c){var b=new Array();for(var d in c){var e=c[d];if(e instanceof Array){b=b.concat(flatten(e))}else{b.push(e)}}return b}var FW={_scrapers:new Array()};FW._Base=function(){this.callHook=function(b,c,e,a){if(typeof this["hooks"]==="object"){var d=this["hooks"][b];if(typeof d==="function"){d(c,e,a)}}};this.evaluateThing=function(f,e,c){var b=typeof f;if(b==="string"){return f}else{if(b==="object"){if(f instanceof Array){var d=this.evaluateThing;var a=f.map(function(g){return d(g,e,c)});return flatten(a)}else{return f.evaluate(e,c)}}else{if(b==="function"){return f(e,c)}else{return undefined}}}}};FW.Scraper=function(a){FW._scrapers.push(new FW._Scraper(a))};FW._Scraper=function(a){for(x in a){this[x]=a[x]}this._singleFieldNames=["abstractNote","applicationNumber","archive","archiveLocation","artworkMedium","artworkSize","assignee","audioFileType","audioRecordingType","billNumber","blogTitle","bookTitle","callNumber","caseName","code","codeNumber","codePages","codeVolume","committee","company","conferenceName","country","court","date","dateDecided","dateEnacted","dictionaryTitle","distributor","docketNumber","documentNumber","DOI","edition","encyclopediaTitle","episodeNumber","extra","filingDate","firstPage","forumTitle","genre","history","institution","interviewMedium","ISBN","ISSN","issue","issueDate","issuingAuthority","journalAbbreviation","label","language","legalStatus","legislativeBody","letterType","libraryCatalog","manuscriptType","mapType","medium","meetingName","nameOfAct","network","number","numberOfVolumes","numPages","pages","patentNumber","place","postType","presentationType","priorityNumbers","proceedingsTitle","programTitle","programmingLanguage","publicLawNumber","publicationTitle","publisher","references","reportNumber","reportType","reporter","reporterVolume","rights","runningTime","scale","section","series","seriesNumber","seriesText","seriesTitle","session","shortTitle","studio","subject","system","thesisType","title","type","university","url","version","videoRecordingType","volume","websiteTitle","websiteType"];this._makeAttachments=function(q,b,f,s){if(f instanceof Array){f.forEach(function(k){this._makeAttachments(q,b,k,s)},this)}else{if(typeof f==="object"){var p=f.urls||f.url;var m=f.types||f.type;var e=f.titles||f.title;var h=this.evaluateThing(p,q,b);var o=this.evaluateThing(e,q,b);var r=this.evaluateThing(m,q,b);var l=(r instanceof Array);var n=(o instanceof Array);if(!(h instanceof Array)){h=[h]}for(var j in h){var c=h[j];var g;var d;if(l){g=r[j]}else{g=r}if(n){d=o[j]}else{d=o}s.attachments.push({url:c,title:d,type:g})}}}};this.makeItems=function(o,b,m,c,l){var q=new Zotero.Item(this.itemType);q.url=b;for(var h in this._singleFieldNames){var n=this._singleFieldNames[h];if(this[n]){var g=this.evaluateThing(this[n],o,b);if(g instanceof Array){q[n]=g[0]}else{q[n]=g}}}var r=["creators","tags"];for(var f in r){var p=r[f];var d=this.evaluateThing(this[p],o,b);if(d){for(var e in d){q[p].push(d[e])}}}this._makeAttachments(o,b,this["attachments"],q);c(q);l([q])}};FW._Scraper.prototype=new FW._Base;FW.MultiScraper=function(a){FW._scrapers.push(new FW._MultiScraper(a))};FW._MultiScraper=function(a){for(x in a){this[x]=a[x]}this._mkSelectItems=function(e,d){var b=new Object;for(var c in e){b[d[c]]=e[c]}return b};this._selectItems=function(e,d){var b=new Array();for(var c in Zotero.selectItems(this._mkSelectItems(e,d))){b.push(c)}return b};this._mkAttachments=function(g,d,f){var b=this.evaluateThing(this["attachments"],g,d);var c=new Object();if(b){for(var e in f){c[f[e]]=b[e]}}return c};this._makeChoices=function(f,p,c,d,h){if(f instanceof Array){f.forEach(function(k){this._makeTitlesUrls(k,p,c,d,h)},this)}else{if(typeof f==="object"){var m=f.urls||f.url;var e=f.titles||f.title;var n=this.evaluateThing(m,p,c);var j=this.evaluateThing(e,p,c);var l=(j instanceof Array);if(!(n instanceof Array)){n=[n]}for(var g in n){var b=n[g];var o;if(l){o=j[g]}else{o=j}h.push(b);d.push(o)}}}};this.makeItems=function(m,b,k,c,h){Zotero.debug("Entering MultiScraper.makeItems");if(this.beforeFilter){var n=this.beforeFilter(m,b);if(n!=b){this.makeItems(m,n,k,c,h);return}}var g=[];var l=[];this._makeChoices(this["choices"],m,b,g,l);var f=this._selectItems(g,l);var d=this._mkAttachments(m,b,l);if(!f){h([])}else{var j=[];var e=this.itemTrans;Zotero.Utilities.processDocuments(f,function(q){var p=q.documentURI;var o=e;if(o===undefined){o=FW.getScraper(q,p)}if(o===undefined){}else{o.makeItems(q,p,d[p],function(r){j.push(r);c(r)},function(){})}},function(){h(j)})}}};FW._MultiScraper.prototype=new FW._Base;FW.DelegateTranslator=function(a){return new FW._DelegateTranslator(a)};FW._DelegateTranslator=function(a){for(x in a){this[x]=a[x]}this._translator=Zotero.loadTranslator(this.translatorType);this._translator.setTranslator(this.translatorId);this.makeItems=function(g,d,b,f,c){Zotero.debug("Entering DelegateTranslator.makeItems");var e;Zotero.Utilities.HTTP.doGet(d,function(h){this._translator.setHandler("itemDone",function(k,j){e=j;if(b){j.attachments=b}});this._translator.setString(h);this._translator.translate();f(e)},function(){c([e])})}};FW.DelegateTranslator.prototype=new FW._Scraper;FW._StringMagic=function(){this._filters=new Array();this.addFilter=function(a){this._filters.push(a);return this};this.split=function(a){return this.addFilter(function(b){return b.split(a).filter(function(c){return(c!="")})})};this.replace=function(c,b,a){return this.addFilter(function(d){if(d.match(c)){return d.replace(c,b,a)}else{return d}})};this.prepend=function(a){return this.replace(/^/,a)};this.append=function(a){return this.replace(/$/,a)};this.remove=function(b,a){return this.replace(b,"",a)};this.trim=function(){return this.addFilter(function(a){return Zotero.Utilities.trim(a)})};this.trimInternal=function(){return this.addFilter(function(a){return Zotero.Utilities.trimInternal(a)})};this.match=function(a,b){if(!b){b=0}return this.addFilter(function(d){var c=d.match(a);if(c===undefined||c===null){return undefined}else{return c[b]}})};this.cleanAuthor=function(b,a){return this.addFilter(function(c){return Zotero.Utilities.cleanAuthor(c,b,a)})};this.key=function(a){return this.addFilter(function(b){return b[a]})};this.capitalizeTitle=function(){return this.addFilter(function(a){return Zotero.Utilities.capitalizeTitle(a)})};this.unescapeHTML=function(){return this.addFilter(function(a){return Zotero.Utilities.unescapeHTML(a)})};this.unescape=function(){return this.addFilter(function(a){return unescape(a)})};this._applyFilters=function(c,e){for(i in this._filters){c=flatten(c);c=c.filter(function(a){return((a!==undefined)&&(a!==null))});for(var d=0;d0&&a[0]){return f}}}return undefined};FW.getScraper=function(b,a){var c=FW.detectWeb(b,a);return FW._scrapers.filter(function(d){return(d.evaluateThing(d.itemType,b,a)==c)&&(d.evaluateThing(d.detect,b,a))})[0]};FW.doWeb=function(c,a){Zotero.debug("Entering FW.doWeb");var b=FW.getScraper(c,a);b.makeItems(c,a,[],function(d){b.callHook("scraperDone",d,c,a);if(!d.title){d.title=""}d.complete()},function(){Zotero.done()});Zotero.wait();Zotero.debug("Leaving FW.doWeb")}; +function detectWeb(doc, url) { return FW.detectWeb(doc, url); } +function doWeb(doc, url) { return FW.doWeb(doc, url); } + +/** Articles */ +FW.Scraper({ + itemType : 'magazineArticle', + detect : FW.Xpath('//body[@class="article"]//div[@class="article"]'), + title : FW.Xpath('//div[@class="article"]/a[@class="headline-article"]').text(). + trim(), + abstractNote : FW.Xpath('//div[@class="article"]/p[@class="subhead"]').text(). + trim(), + attachments : [ + { url : FW.Url(), + title : FW.Url().match(/[0-9]+$/).prepend("Washington Monthly Snapshot pg. "), + type : "text/html" }, + { url : FW.Xpath('//div[@class="pagination"]/a[not(@class)]').key('href').text(), + title : FW.Xpath('//div[@class="pagination"]/a'). + key('href').text(). + match(/[0-9]+$/). + prepend("Washington Monthly Snapshot pg. "), + type : "text/html" }], + creators : FW.Xpath('//div[@class="article"]/p[@class="author"]').text(). + remove(/By/). + cleanAuthor("author"), + date : FW.Xpath('//div[@class="article"]/span[@class="date"]').text(), + publicationTitle : "The Washington Monthly" +}); + + + /** Blog Posts */ +FW.Scraper({ +itemType : 'blogPost', +detect : FW.Xpath('//body[@class="blog"]'), +title : FW.Xpath('//div[@class="article"]/a[@class="headline"]').text(). + trim(), +abstractNote : FW.Xpath('//div[@class="article"]/p[@class="subhead"]').text(). + trim(), +attachments : [{ + url : FW.Url(), + title : "Washington Monthly Snapshot", + type : "text/html" }], +creators : FW.Xpath('//div[@class="article"]/p[@class="author"]').text(). + remove(/By/). + cleanAuthor("author"), +date : FW.Xpath('//div[@class="article"]/span[@class="date"]').text(), +publicationTitle : FW.Xpath('//div[@id="content"]/h5').text(). + prepend('The Washington Monthly - ') +}); + + /** Articles Old */ +FW.Scraper({ +itemType : 'magazineArticle', +detect : FW.Xpath('//span[@class="HED"]'), +title : FW.Xpath('//span[@class="HED"]').text().trim(), +abstractNote : FW.Xpath('//span[@class="SubHed"]').text().trim(), +attachments : [{ + url: FW.Url(), + title: "Washington Monthly Snapshot", + type: "text/html" +}], +creators : FW.Xpath('//span[@class="Author"]/a').text().cleanAuthor("author"), +date : FW.Xpath('//td[@align="right"]/p[@class="TXT9"]').text().remove(/Washington Monthly,/).trim(), +publicationTitle : "The Washington Monthly" +}); + + + /** Blog Posts - old*/ +FW.Scraper({ +itemType : 'blogPost', +detect : FW.Xpath('//div[@class="blog"]'), +title : FW.Xpath('//div[@class="blogbody"]/*/p/child::*').text().remove(/\.\.\.\./).capitalizeTitle().trim(), +attachments : [{ + url: FW.Url(), + title: "Washington Monthly Snapshot", + type: "text/html" +}], +creators : FW.Xpath('//div[@class="blogbody"]/*/div[@class="header"]/span').text().cleanAuthor("author"), +date : FW.Xpath('//div[@class="blog"]/div[@class="date"]').text(), +publicationTitle : FW.Xpath('//td/div[@align="left"]/img').key('alt').text().prepend('The Washington Monthly - ') +}); + +/** Search results */ +FW.MultiScraper({ +itemType : "multiple", +detect : FW.Xpath('//div[@id="content"]/h4[@class="search-results"]'), +choices : { titles : FW.Xpath('//div[@class="gs-title"]/a').text(), +urls : FW.Xpath('//div[@class="gs-title"]/a').key('href').text() } +}); \ No newline at end of file