let collection = ZoteroPane.getSelectedCollection(); | |
let itemIDs = collection.getChildItems(true); | |
const fieldName = 'extra' | |
const fieldID = Zotero.ItemFields.getID(fieldName); | |
function extractCodeURL(data) { | |
if (!data || data.length == 0) return ""; | |
if (data[0].repository && data[0].repository.url) return data[0].repository.url; | |
return ""; | |
} | |
async function getCodeURL(title) { | |
const url = 'https://paperswithcode.com/api/v1/search/?q=' + title | |
return fetch(url) | |
.then(res => res.json()) | |
.then(data => data.results) | |
.then(results => results.filter( | |
item => item.paper.title === title | |
)) | |
.then(filterdResults => extractCodeURL(filterdResults)) | |
} | |
let results = [] | |
await Zotero.DB.executeTransaction(async function () { | |
for (let id of itemIDs) { | |
let item = await Zotero.Items.getAsync(id); | |
let codeURL = await getCodeURL(item.getField('title')) | |
if (codeURL) { | |
results.push(codeURL); | |
// Add `Code/YES` tag | |
item.addTag('Code/YES', 0); | |
} | |
let mappedFieldID = Zotero.ItemFields.getFieldIDFromTypeAndBase(item.itemTypeID, fieldName); | |
item.setField(mappedFieldID ? mappedFieldID : fieldID, codeURL); | |
await item.save({ | |
skipDateModifiedUpdate: true | |
}); | |
} | |
}); | |
return results; |