Permalink
Join GitHub today
GitHub is home to over 36 million developers working together to host and review code, manage projects, and build software together.
Sign up
Fetching contributors…
Cannot retrieve contributors at this time
{ | |
"translatorID": "eb876bd2-644c-458e-8d05-bf54b10176f3", | |
"label": "Wanfang Data", | |
"creator": "Ace Strong <acestrong@gmail.com>", | |
"target": "^https?://[ds]\\.(g\\.)?wanfangdata\\.com\\.cn", | |
"minVersion": "2.0rc1", | |
"maxVersion": "", | |
"priority": 100, | |
"inRepository": true, | |
"translatorType": 4, | |
"browserSupport": "gcs", | |
"lastUpdated": "2014-07-24 01:37:16" | |
} | |
/* | |
Wanfang Data Translator | |
Copyright (C) 2010 TAO Cheng, acestrong@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 <http://www.gnu.org/licenses/>. | |
*/ | |
// ####################### | |
// ##### Sample URLs ##### | |
// ####################### | |
/* | |
* The starting point for an search is the URL below. | |
* In testing, I tried the following: | |
* | |
* - A search listing of journals | |
* - A search listing of thesis | |
* - A search listing of conference papers | |
* - A search listing of foreign literatures(for chinese) | |
* - A journal paper page | |
* - A thesis page | |
* - A conference paper page | |
* - A foreign literature page | |
*/ | |
// http://g.wanfangdata.com.cn/Default.aspx | |
// ################################# | |
// #### Local utility functions #### | |
// ################################# | |
//sets the rs cookie value to the provided ID and returns the old value | |
function setCookie(doc, rsId) { | |
if (!rsId) return null; | |
var matches = doc.cookie.match(/(?:$|; )rs=([^;]*)/); | |
var oldCookie = matches ? unescape(matches[1]) : null; | |
var domain = escape('wanfangdata.com.cn'); | |
var id = escape( rsId ); | |
doc.cookie = 'rs=' + id + ';domain=' + domain; | |
return oldCookie; | |
} | |
function detectCode(url) { | |
var pattern = /[ds]\.(?:g\.)?wanfangdata\.com\.cn\/([A-Za-z]*?)_/; | |
if (pattern.test(url)) { | |
var code = pattern.exec(url)[1]; | |
return code; | |
} | |
return null; | |
} | |
function detectType(code) { | |
if (code == "Periodical" || | |
code == "OAPaper") { | |
return "journalArticle"; | |
} else if (code == "Thesis") { | |
return "thesis"; | |
} else if (code == "Conference") { | |
return "conferencePaper"; | |
} else if (code == "NSTLHY") { | |
return "conferencePaper"; | |
} else if (code == "NSTLQK") { | |
return "journalArticle"; | |
} else { | |
return false; | |
} | |
} | |
function getSearchResults(doc, checkOnly) { | |
var items = [], found = false | |
lis = ZU.xpath(doc, '//li[contains(@class,"title_li")]'); | |
for (var i=0, n=lis.length; i<n; i++) { | |
var a = lis[i].getElementsByTagName("a")[1]; | |
var title = ZU.trimInternal( ZU.cleanTags(a.textContent) ); | |
var link = a.getAttribute("href").match(/\/([^\/]+)\.aspx/)[1]; | |
if (!link) continue; | |
if (checkOnly) return true; | |
items[link] = title; | |
found = true; | |
} | |
return found ? items : false; | |
} | |
function getItemId(doc) { | |
var action = ZU.xpathText(doc, '//form[@id="aspnetForm"]/@action'); | |
if (!action) return; | |
var id = action.match(/(?:\?|&)ID=([^&]+)/); | |
if (!id) return; | |
return id[1]; | |
} | |
// ############################# | |
// ##### Scraper functions ##### | |
// ############################# | |
function scrape(doc, id) { | |
id = '|' + id + '|'; | |
var oldCookie = setCookie(doc, id); | |
var exportUrl = 'http://s.wanfangdata.com.cn/Export/Export.aspx?scheme=EndNote'; | |
ZU.doGet(exportUrl, function(text) { | |
var matches = text.match(/<div\s+id=["']export_container["']>((?:.|[\r\n])+?)<\/div>/i); | |
if (!matches) return false; | |
text = ZU.cleanTags( matches[1].replace(/[\r\n]/g,'') ); | |
var translator = Zotero.loadTranslator('import'); | |
translator.setTranslator('881f60f2-0802-411a-9228-ce5f47b64c7d'); | |
translator.setString(text); | |
translator.setHandler('itemDone', function(obj, item) { | |
//author first and last names are mixed up | |
for (var i=0, n=item.creators.length; i<n; i++) { | |
if (!item.creators[i].firstName) continue; | |
var first = item.creators[i].lastName; | |
item.creators[i].lastName = item.creators[i].firstName; | |
item.creators[i].firstName = first; | |
} | |
//type is actually DOI | |
if (item.type) { | |
item.DOI = item.type; | |
delete item.type; | |
} | |
//tags are messed up | |
item.tags = []; | |
item.complete(); | |
}); | |
translator.setHandler('done', function(obj, item) { | |
setCookie(doc, oldCookie); | |
}); | |
translator.translate(); | |
}); | |
} | |
// ######################### | |
// ##### API functions ##### | |
// ######################### | |
function detectWeb(doc, url) { | |
if (url.toLowerCase().indexOf('paper.aspx') != -1 | |
&& getSearchResults(doc, true) | |
) { | |
return "multiple"; | |
} | |
pattern = /[ds]\.(?:g\.)?wanfangdata\.com\.cn/; | |
if (pattern.test(url) && getItemId(doc)) { | |
var code = detectCode(url); | |
return detectType(code); | |
} | |
return false; | |
} | |
function doWeb(doc, url) { | |
if (detectWeb(doc, url) == "multiple") { | |
// search page | |
var items = getSearchResults(doc); | |
Zotero.selectItems(items, function(selectedItems) { | |
if (!selectedItems) return true; | |
var urls = new Array(); | |
for (var i in selectedItems) { | |
urls.push(i); | |
} | |
var ids = '|' + urls.join('|') + '|'; | |
scrape(doc, ids); | |
}); | |
} else { | |
var id = getItemId(doc); | |
scrape(doc, id); | |
} | |
} | |
/** BEGIN TEST CASES **/ | |
var testCases = [ | |
{ | |
"type": "web", | |
"url": "http://d.wanfangdata.com.cn/Periodical_xdqb200902027.aspx", | |
"items": [ | |
{ | |
"itemType": "journalArticle", | |
"title": "参考文献管理工具研究", | |
"creators": [ | |
{ | |
"firstName": "", | |
"lastName": "余敏", | |
"creatorType": "author" | |
}, | |
{ | |
"firstName": "", | |
"lastName": "朱江", | |
"creatorType": "author" | |
}, | |
{ | |
"firstName": "", | |
"lastName": "丁照蕾", | |
"creatorType": "author" | |
} | |
], | |
"date": "2009", | |
"DOI": "10.3969/j.issn.1008-0821.2009.02.027", | |
"abstractNote": "介绍了参考文献管理的基本方法,对参考文献管理工具的主要功能进行了对比,最后分析了参考文献管理的趋势.", | |
"archiveLocation": "北京万方数据股份有限公司", | |
"extra": "Yu Min\nZhu Jiang\nDing Zhaolei", | |
"issue": "2", | |
"libraryCatalog": "Wanfang Data", | |
"pages": "94-98,93", | |
"publicationTitle": "JOURNAL OF MODERN INFORMATION", | |
"url": "http://d.wanfangdata.com.cn/Periodical_xdqb200902027.aspx", | |
"volume": "29", | |
"attachments": [], | |
"tags": [], | |
"notes": [], | |
"seeAlso": [] | |
} | |
] | |
}, | |
{ | |
"type": "web", | |
"url": "http://d.wanfangdata.com.cn/NSTLQK_NSTL_QKJJ0216348353.aspx", | |
"items": [ | |
{ | |
"itemType": "journalArticle", | |
"title": "Zotero: harnessing the power of a personal bibliographic manager.", | |
"creators": [ | |
{ | |
"firstName": "JT", | |
"lastName": "Coar", | |
"creatorType": "author" | |
}, | |
{ | |
"firstName": "JP", | |
"lastName": "Sewell", | |
"creatorType": "author" | |
} | |
], | |
"date": "2010", | |
"ISBN": "0363-3624", | |
"abstractNote": "Zotero is a powerful free personal bibliographic manager (PBM) for writers. Use of a PBM allows the writer to focus on content, rather than the tedious details of formatting citations and references. Zotero 2.0 (http://www.zotero.org) has new features including the ability to synchronize citations with the off-site Zotero server and the ability to collaborate and share with others. An overview on how to use the software and discussion about the strengths and limitations are included.", | |
"accessDate": "CURRENT_TIMESTAMP", | |
"archiveLocation": "北京万方数据股份有限公司", | |
"issue": "5", | |
"libraryCatalog": "Wanfang Data", | |
"pages": "205-207", | |
"publicationTitle": "Nurse educator", | |
"shortTitle": "Zotero", | |
"url": "http://d.wanfangdata.com.cn/NSTLQK_NSTL_QKJJ0216348353.aspx", | |
"volume": "35", | |
"attachments": [], | |
"tags": [], | |
"notes": [], | |
"seeAlso": [] | |
} | |
] | |
}, | |
{ | |
"type": "web", | |
"url": "http://s.wanfangdata.com.cn/Paper.aspx?q=zotero+DBID%3A%28NSTL_QK+OR+NSTL_HY%29&f=d.top", | |
"items": "multiple" | |
} | |
] | |
/** END TEST CASES **/ |