from fastapi import FastAPI, HTTPException import urllib.request from urllib.error import HTTPError app = FastAPI() BASE_URL = 'https://doi.org/' @app.get("/get_bibtex/") async def get_bibtex(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=80)