|
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 ttile2doi(title:str): |
|
cr = Crossref() |
|
|
|
result = cr.works(query = "title") |
|
doi = result['message']['items'][0]['DOI'] |
|
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) |