aboutsummaryrefslogtreecommitdiff
path: root/doi2bib
diff options
context:
space:
mode:
authorSilvio Rhatto <rhatto@riseup.net>2019-06-02 14:43:34 -0300
committerSilvio Rhatto <rhatto@riseup.net>2019-06-02 14:43:34 -0300
commitd9b125e1593eeda59c2877e03f9b32d26e97aefa (patch)
treede76ec0828d658e9571a393bd6358b0cf8ff7ced /doi2bib
parentc3bb7c52671a4725721bff628f982b228806fc90 (diff)
downloadscripts-d9b125e1593eeda59c2877e03f9b32d26e97aefa.tar.gz
scripts-d9b125e1593eeda59c2877e03f9b32d26e97aefa.tar.bz2
Adds doi2bib
Diffstat (limited to 'doi2bib')
-rwxr-xr-xdoi2bib53
1 files changed, 53 insertions, 0 deletions
diff --git a/doi2bib b/doi2bib
new file mode 100755
index 0000000..1c26d21
--- /dev/null
+++ b/doi2bib
@@ -0,0 +1,53 @@
+#!/usr/bin/python3
+# Adapted from https://scipython.com/blog/doi-to-bibtex/
+
+import sys
+import pycurl
+from io import BytesIO
+#import urllib.request
+#from urllib.error import HTTPError
+
+BASE_URL = 'http://dx.doi.org/'
+
+try:
+ doi = sys.argv[1]
+except IndexError:
+ print('Usage:\n{} <doi>'.format(sys.argv[0]))
+ sys.exit(1)
+
+url = BASE_URL + doi
+
+# Urllib version
+#req = urllib.request.Request(url)
+#req.set_proxy('socks5://localhost:9050', 'socks')
+#req.add_header('Accept', 'application/x-bibtex')
+
+# PyCurl version with Tor support
+# See http://pycurl.io/docs/latest/quickstart.html
+buffer = BytesIO()
+req = pycurl.Curl()
+req.setopt(req.URL, url)
+req.setopt(req.HTTPHEADER, ('Accept: application/x-bibtex',))
+req.setopt(req.FOLLOWLOCATION, True)
+req.setopt(req.WRITEDATA, buffer)
+req.setopt(req.PROXY, 'socks5://localhost:9050')
+
+try:
+ #with urllib.request.urlopen(req) as f:
+ # bibtex = f.read().decode()
+ #print(bibtex)
+
+ req.perform()
+ req.close()
+ body = buffer.getvalue()
+
+ # Body is a byte string.
+ # We have to know the encoding in order to print it to a text file
+ # such as standard output.
+ print(body.decode('iso-8859-1'))
+except HTTPError as e:
+ if e.code == 404:
+ print('DOI not found.')
+ else:
+ print('Service unavailable.')
+ sys.exit(1)