This is probably not 100% on-topic here, but this site is closer to appropriate than others. Let me give it a try: I have collected about 50 publications relevant for a project of mine. For these publications, I have all the important information like author, title, journal, etc, but most importantly, I have the DOI for each paper.

I was asking myself, is it possible to retrieve the DOI of the references given in each publication through a web-service, an open database or any other service?

Background is that I would like to create a graph showing the connections between the selected publications. One semi-automatic approach which comes to my mind is to use Web of Science, go through the stack of my publications and copy the DOI of the listed references.

Any better ideas?

  • 1
    I believe the approach you suggest (using WoS) is the one used by the CiteSpace project – Fuhrmanator Jan 23 '14 at 14:18
  • @Fuhrmanator This is indeed what I had in mind. It took me a while to find out how the tool works, but it seems it's more or less exactly what I was looking for, except that I don't have to write a single line of code by myself. – halirutan Jan 24 '14 at 6:28

Both Scopus and Web of Knowledge contain all the information that you need and have APIs that can be used to automate access:

I have never used them personally, but I hope this kind of information can be accessed using them. Each site indexes articles with their own unique key, so you can use those instead of DOIs if you only need them as unique keys.

Neither of them is free; you can probably access them through your university's subscription though. Be sure to check the usage limits.

| improve this answer | |

It's backwards from your proposed approach, but you could also use Google Scholar. It (apparently) has no API yet. Thus, someone created a python module to parse its output. http://www.icir.org/christian/scholar.html

Google Scholar only gives you the articles that cite the given article. So you can build the links that are to the article, rather than from it.

Edit Google Scholar Citation Visualisation Tool seems to be based on this approach. However, the bookmarklet doesn't seem to work (for me in Chrome) when I browse Google Scholar as shown in the video on that page.

| improve this answer | |
  • Especially the Google Visualization Tool looks promising. Unfortunately, I'm not able to get it working under Chrome, OSX Mavericks. The toolbar appears, but clicking the buttons has no effect :-( – halirutan Jan 24 '14 at 6:29
  • @halirutan I think the Google Scholar page changed and it broke the bookmarklet code. If you enable the console in the developer tools of Chrome, you'll see the error. Such are the risks of hacking JavaScript that decodes web pages coming from a Google service... – Fuhrmanator Jan 26 '14 at 2:06
  • 2
    google scholar blocks you after some point. basically its not a free api. – Amir Jul 29 '15 at 19:33

Slightly adapting my answer to this earlier, very similar question:

It seems that crossref.org is beginning to roll out providing a list of citations (the works that a given work cites):


[See the aptly named section "OMG! OMG! OMG! Does this mean I can get references from api.crossref.org?"]

Using the example doi from the above link (doi:10.7554/eLife.10288), you could obtain the list of citations in that work at: https://api.crossref.org/v1/works/10.7554/eLife.10288.xml

Alternatively, with content negotiation, you could just use:

curl -L -H "Accept: application/vnd.crossref.unixsd+xml" \
 https://doi.org/10.7554/eLife.10288 > data.xml

The citations are listed in the <citation_list> element. The list of 'doi's can be extracted with the following XPath query:


Warning: The citation data is, according to the link above, only available in the XML, not the JSON, representation. Also, the service is not available for all works, yet.

Toy python implementation

import requests
from lxml import html

def list_references(doi):
    """List an article's references, as raw DOIs. 

The input also has to be just the DOI (without doi: etc.)
    headers = {'Accept' : 'application/vnd.crossref.unixsd+xml' }
    r = requests.get("https://data.crossref.org/" + doi,
    tree = html.fromstring(r.content)
    return tree.xpath('//citation_list/citation/doi/text()')
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.