Using Excel and VBA with APIsto Wow Your Colleagues andPatronsHao Zeng, Yeshiva UniversityAnnamarie Klose Hrubes, William Paterson University

What are APIs?In computer programming, an application programming interface (API) is a set of subroutine definitions, protocols, and tools forbuilding application software. In general terms, it is a set of clearly defined methods of communication between varioussoftware components.Web APIs are the defined interfaces through which interactions happen between an enterprise and applications that use itsassets. An API approach is an architectural approach that revolves around providing programmable interfaces to a set of servicesto different applications serving different types of consumers. When used in the context of web development, an API is typicallydefined as a set of Hypertext Transfer Protocol (HTTP) request messages, along with a definition of the structure of responsemessages, which is usually in an Extensible Markup Language (XML) or JavaScript Object Notation (JSON) format.-Application programming interface, programming interface

How can you use APIs?Here’s a sample of how using JSON and/or XML records via an API can help: Batch download records related to a resource that conform to a specific criteria, e.g. downloadrecords of faculty publicationsDownload and match information related to records you have, e.g. VIAF entriesUpload records to a system/platform, e.g. ArchivesSpaceYou may already be using a resource that has an API. If they do, look for the documentation and digin!

Scenario 1 - Need BibliographicInformation for Journal HoldingsThe Periodical Department needs to know which electronic journals in ourholdings to cut. The holding management system does not provide detailedinformation regarding individual titles, e.g. subject. However, Ulrich’s Web canprovide that information and we have a subscription.

Ulrich’s Web APIThe Ulrich’s Web API allows you to export basic metadata, e.g. title,country, subject, about a journal as JSON or roduct Documentation/Configuring/Ulrichsweb API/Ulrichsweb%3A Fields Included in the API OutputHowever, you need an Ulrich’s Web subscription to get an API /Product Documentation/Configuring/Ulrichsweb API/Ulrichsweb%3A Administration Console -- Ulrich%27s API

Ulrich’s Web API - Sample query & outputGET[API KEY]/search?query issn:15551296GET[API KEY]/search?query title:International Journal of :1,"results":[{"title":"International Journal of Business se,"publisher":["International Academy of Business nAccess":false,"reviewed":false,"price":"Contact Publisher","contentTypes":["Academic ountry":"UnitedStates","description":"Contains original research papers in business, international business, economics and relatedtopics.","subject":["BUSINESS AND ECONOMICS - ACCOUNTING","BUSINESS AND ECONOMICS - MARKETING ANDPURCHASING","BUSINESS AND ECONOMICS SV":"Journal","contentTypesCSV":"Academic tatusMessage":null}

Excel with VBA and MacrosMacros are subroutines that help you automate tasks.Excel allows you to create and use macros with a computer language calledVisual Basic for Applications (VBA).The macros can be something as simple as changing the font style in aspreadsheet or as complex as interfacing with an API through the internet. Inthe latter case, we can have the VBA code send a column of data (ISSN) to anAPI, pull records related to that data, and populate the other columns with therelated metadata.

Define your referencesIf you don’t have the Developer’s tab in Excel, youneed to use it so you can work with VBA.When you open VBA, you need to set yourreferences. On a PC, the references are: Visual Basic for ApplicationsMicrosoft Excel 16.01 Object LibraryOLE AutomationMicrosoft Office 16.0 Object LibraryMicrosoft Forms 2.0 Object LibraryMicrosoft WinHTTP Services, version 5.1Microsoft XML, v. 6.0 (or version 3.0)

Macros with VBAWhile VBA is an event-drivenprogramming language, anyone withexperience in object-orientedprogramming will feel comfortable withit.You’ll just be using it with a GUI in Excel.If last 1 Then Exit SubDim ISSN As StringDim i As IntegerFor i 2 To last

Populating the spreadsheetBy providing access to the macro through a button, end users can use themacro-enabled spreadsheet more easily on their own.

Scenario 2 - Need statistics andbibliographic information for journalsIn 2017, WPU began using Activity Insight, a database by Digital Measures, totrack faculty activities. As part of this work, the university wanted to trackstatistics related to journals that our faculty publish in. Bibliographicinformation and statistics related to those journals was to be stored in theJournal Instrument.

Elsevier Developer PortalElsevier has multiple APIs and provides detailed specifications in itsdeveloper portal ( They have APIsfor:- Scopus- Engineering Village- ScienceDirect- Embase- SciVYou can register for a free API key with some limitations. (Subscriptionmembers get full access.)

Testing the Elsevier APIs with SwaggerThere are 11 APIs for Scopus, alone. We used the Serial Title itleAPI.wadlElsevier provides interactive documentation to help you try out queries withits APIs. It’s a great way to “get your feet wet” with APIs. They even include anAPI key for testing rial Title/SerialTitleSearch

Scopus’ Serial Title APISome bibliographic information Metrics-CiteScoreSCImago Journal Rank (SJR)Source-Normalized Impact per Paper

Serial Title API - Sample query & outputGET /1555-1296?apiKey [API Key]{"serial-metadata-response":{"link": [{"@ fa": "true", "@ref": "self", itle/issn/1555-1296", "@type": "application/json"}],"entry": [{"@ fa":"true", "dc:title":"International Journal of Business Research","dc:publisher":"International Academy of ,"subject-area": [{"@ fa": "true", "@code": "1400", "@abbrev": "BUSI", " " :"Business, Management andAccounting (all)"},{"@ fa": "true", "@code": "2000", "@abbrev": "ECON", " " :"Economics, Econometrics and Finance(all)"}],"SNIPList":{"SNIP": [{"@ fa": "true", "@year": "2016", " " :"0.06"}]},"SJRList":{"SJR": [{"@ fa": "true","@year": "2016", " r":null},"link": [{"@ fa": "true", "@ref": "scopus-source", url?sourceId 21100322426"},{"@ fa": "true", "@ref": "homepage", .aspx?Journalid 12"},{"@ fa": "true", "@ref": "coverimage", itle/issn/1555-1296?view m/content/serial/title/issn/1555-1296"}]}}

Hacking Hao’s Code - Part 1Change URLDim URL As String: URL n/" ISSN "?apiKey [API Key]&httpAccept text%2Fxml"

Hacking Hao’s code - Part 2Dim LC As IXMLDOMNodeDim Subject As IXMLDOMNodeFor Each LC In "K" & i).Value LC.TextOn Error Resume NextNext LCFor Each Subject In L" & i).Value Subject.TextOn Error Resume NextDebug.Print "test"Next SubjectChange:VariablesNodesColumns

Changing the code for AttributesFor Each snipYear In butesW.Range("I" & i).Value snipYear.NodeValueChange:On Error Resume NextNext snipYearVariablesAttributesColumns

Troubleshooting Scopus - Timeout ErrorScopus is slow and can get bogged down.For Each EISSN In Resp.SelectNodes("//prism:eIssn")W.Range("R" & i).Value EISSN.TextOn Error Resume NextNext EISSNApplication.Wait (Now TimeValue("0:00:02"))Next iEnd Sub

Clean-up after populating data Sample data to verify that it outputted correctly. Depending on the error,I had to adjust the code (User Error) or fix things manually (API Error).Clean-up the data as befits its use. Since WPU faculty would beinteracting with this data, I did the following: Changed “TRUE” values to “Yes” and “FALSE” values to “No.” Sorted journal titles in alphabetical order. Used Excel formulas to pull relevant data, ABDC Ratings, fromanother spreadsheet, match it to the ISSNs, and populate anothercolumn.

Tips-Test API and coding with small examples first.Sample API data in spreadsheet and output to ensure the results arecorrect.If necessary, normalize data in your spreadsheet, e.g. hyphens in ISSN andleading zeros as start of ISSN.Save macros to your personal workbook so you can use them with otherExcel spreadsheets.Pulling data from an API with Excel can be very slow. Be patient.

Live Demo

Limitations of Ulrich’s Web API--API data is pulled from brief records which are sometimes incorrect.FALSE results, in particular, were unreliable. In the brief records, imageicons indicate whether a journal is refereed, open access, etc. If the iconis present, you’ll get a TRUE value. If the icon is not, you’ll get a FALSEvalue. However, many journals only show that information correctly inthe full record. This means you often get a FALSE result. In error. Thisrequired manual correction to fix.Some journals only have brief records.

Limitations of Scopus’ Serial Title API-If Scopus discontinues a journal, there will be data gaps. Including themetric’s year in data set can help identify older scores.The journal metrics, e.g. CiteScore, are controversial.Journal-level metrics do not reflect the weight of a specific article.In some cases, we found that our faculty had journal articles that wereindexed but the journal itself was not.In a rare case, the wrong ISSN was assigned to a journal article.Query structure is problematic for searching by title.

Alternatives to Excel with VBAYou can use a wide variety of coding standards with APIs, e.g. Python, PHP,Perl. Use what you are most comfortable work.Look in GitHub! You may find existing code in your preferred scriptinglanguage that works with the API.For example, GitHub has a wide variety of coding options that work with theScopus API. Don’t reinvent the wheel! Hack it. %E2%9C%93&q scopus&type

Resources Hao’s Code on GitHub, API Workshop on ipts/MARAC API WorkshopPostman, - It’s a free application to usewith APIs

Thank you!Hao Zeng, [email protected] Klose Hrubes, [email protected]