File size: 1,601 Bytes
9e35bf3 9e61002 9e35bf3 9e61002 695cdfe 9e61002 695cdfe 9e61002 9e35bf3 a5370d2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
from fastapi import FastAPI, HTTPException
import urllib.request
from urllib.error import HTTPError
from habanero import Crossref
app = FastAPI()
BASE_URL = 'https://doi.org/'
@app.get("/title2ref/")
async def title2doi(title:str):
cr = Crossref()
result = cr.works(query = title)
for i, item in enumerate(result['message']['items']):
if 'group-title' in item and item['group-title'] != 'Preprints':
doi = result['message']['items'][i-1]['DOI']
break
url = BASE_URL + doi
req = urllib.request.Request(url)
req.add_header('Accept', 'application/x-bibtex')
try:
with urllib.request.urlopen(req) as f:
bibtex = f.read().decode()
return {"bibtex": bibtex}
except HTTPError as e:
if e.code == 404:
raise HTTPException(status_code=404, detail="DOI not found")
else:
raise HTTPException(status_code=503, detail="Service unavailable")
@app.get("/doi2ref/")
async def doi2ref(doi: str):
url = BASE_URL + doi
req = urllib.request.Request(url)
req.add_header('Accept', 'application/x-bibtex')
try:
with urllib.request.urlopen(req) as f:
bibtex = f.read().decode()
return {"bibtex": bibtex}
except HTTPError as e:
if e.code == 404:
raise HTTPException(status_code=404, detail="DOI not found")
else:
raise HTTPException(status_code=503, detail="Service unavailable")
if __name__ == "__main__":
import uvicorn
uvicorn.run("main:app", host="0.0.0.0", port=7860) |