Skip to main content

Convert doi:10.xxxxx/xxxx to nice bibliographic metadata

Project description

Type journal article DOIs, and have them automagically converted into a beautiful bibliography.

travis PyPI version

A Markdown extension that looks through your text for things like doi:10.1234/j.banana.5678, looks up the metadata on the crossref API and outputs text according to your requirements

Add 'markdown_doi' to your Markdown call and watch the magic unfold:

>>> from markdown import Markdown

>>> markdown = Markdown(extensions=['markdown_doi']
>>> markdown.convert('doi:10.1016/j.applanim.2010.02.004')

outputs

<p><span class="doi"><a href="http://dx.doi.org/10.1016/j.applanim.2010.02.004">Are cows more likely to lie down the longer they stand?</a> <span class="doi-year">(2010)</span></span></p>

You can enable the caching if for example you are using Pelican and constantly regenerating the same files

>>> markdown = Markdown(extensions=['markdown_doi(cache_file=.doi_cache)']

The templating function takes the metadata Dict from the message key of the JSON API response and returns a markdown.util.etree.ElementTree. See the default template_title_link_year function.

from markdown_doi import makeExtension as makeDoiExtension

def templater(metadata, doi_pattern):
    el = markdown.util.etree.Element("span")
    el.text = '%(given)s %(family)s' % metadata['author'][0]
    return el

ext = makeDoiExtension(templater=templater)
md = markdown.Markdown(extensions=[ext])
html = md.convert('hello 10.1016/j.applanim.2010.02.004')
assert html == 'hello <p><span>Bert J. Tolkamp</span></p>'

Options

Option

Type

Default

Description

templater

(Dict, LinkPattern) -> etree.ElementTree

None

Function which renders the metadata as an element tree

cache_file

str

‘’

File name that can store a cache of the DOIs looked up

cache

dict

None

Instead, you can pass a map from DOI to metadata dict as the cache rather than a file name

Installation

From Github:

git clone https://github.com/bcaller/markdown_doi.git
pip install -e ./markdown_doi

From Pypi:

pip install markdown_doi

Project details


Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page