| 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; |