from fastapi import FastAPI, HTTPException,Response from io import BytesIO from pydantic import BaseModel from EatEasy_EveryThing_From_url import EatEasy_EveryThing_From_url from EatEasy_excel_only import EatEasy_excel_extract from EatEasy_Json_only import EatEasy_Json_extract from location_fetch_function import location_all from Mongo_Data_add import EatEasy_Mongo_Data_add from Talabat_files.Talabat_Everything_From_url import Talabat_EveryThing_From_url from Talabat_files.Talabat_excel_final import Talabat_excel_extract from Talabat_files.Talabat_json_final import Talabat_Json_extract from Talabat_files.location_link_fetch import Talabat_location_links from Talabat_files.Talabat_Mongo_Data_add import Talabat_mongo_data_add from Talabat_files.Multi_urls import multi_url from Talabat_files.Talabat_multy_location import Talabat_multy_LOCATION from Eateasy_Multi_Urls import multi_urls from starlette.responses import RedirectResponse app = FastAPI() class EatEasyUrlInput0(BaseModel): url: list class EatEasyUrlInput(BaseModel): url: str class EatEasyUrlInput1(BaseModel): url: str class EatEasyUrlInput2(BaseModel): url: str class Location_input(BaseModel): location: str inside_location: str class EatEasyUrlInput3(BaseModel): url: str class UrlInputTalabat1(BaseModel): url: str class UrlInputTalabat2(BaseModel): url: str class UrlInputTalabat3(BaseModel): url: str class UrlInputTalabat4(BaseModel): location: list class UrlInputTalabat5(BaseModel): url: str class UrlInputTalabat6(BaseModel): url: list @app.get("/") def Docsmain(): return RedirectResponse(url="/docs") # @app.post("/EatEasy_Excel_Json_MongoData_From_URL",tags=["EatEasy"]) # def extract_eat_easy_data(url_input: EatEasyUrlInput): # try: # data = EatEasy_EveryThing_From_url(url_input.url) # return {"message": "Extraction process completed successfully", "data": data} # except HTTPException as e: # raise e # except Exception as e: # raise HTTPException(status_code=500, detail=str(e)) @app.post("/EatEasy_Mongo_from_Multi_urls",tags=["EatEasy"]) def EatEasy_Mongo_from_Multi_Urls(url_input: EatEasyUrlInput0): try: data = multi_urls(url_input.url) return {"message": "Extraction process completed successfully", "data": data} except HTTPException as e: raise e except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @app.post("/EatEasy_Extract_Excel_only",tags=["EatEasy"]) def extract_EatEasy_Excel_only(url_input: EatEasyUrlInput1): try: output, filename = EatEasy_excel_extract(url_input.url) headers = { 'Content-Disposition': f'attachment; filename="{filename}"' } return Response(content=output.getvalue(), media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', headers=headers) except HTTPException as e: raise e except Exception as e: raise HTTPException(status_code=500, detail=str(e)) # @app.post("/EatEasy_Extract_Json_only",tags=["EatEasy"]) # def extract_EatEasy_Json_only(url_input: EatEasyUrlInput2): # try: # json_data, restaurant_code = EatEasy_Json_extract(url_input.url) # # Create an in-memory binary stream # json_file = BytesIO() # json_file.write(json_data.encode('utf-8')) # json_file.seek(0) # file_name = f"{restaurant_code}.json" # headers = { # 'Content-Disposition': f'attachment; filename="{file_name}"' # } # return Response(content=json_file.getvalue(), media_type='application/json', headers=headers) # except HTTPException as e: # raise e # except Exception as e: # raise HTTPException(status_code=500, detail=str(e)) @app.post("/EatEasy_Excel_Json_MongoData_From_Location",tags=["EatEasy"]) def extract_data(url_input: Location_input): try: data = location_all(url_input.location , url_input.inside_location) return {"message": "Extraction process completed successfully", "data": data} except HTTPException as e: raise e except Exception as e: raise HTTPException(status_code=500, detail=str(e)) # @app.post("/EatEasy_Mongo_Data_Add_from_url",tags=["EatEasy"]) # def EatEasy_Mongo_Data_add_fun(url_input: EatEasyUrlInput3): # try: # data = EatEasy_Mongo_Data_add(url_input.url) # return {"message": "Extraction process completed successfully", "data": data} # except HTTPException as e: # raise e # except Exception as e: # raise HTTPException(status_code=500, detail=str(e)) # @app.post("/Talabat_MongoData_From_URL", tags=["Talabat"]) # def extract_Talabat_data_all(url_input: UrlInputTalabat1): # try: # data = Talabat_EveryThing_From_url(url_input.url) # return {"message": "Extraction process completed successfully", "data": data} # except HTTPException as e: # raise e # except Exception as e: # raise HTTPException(status_code=500, detail=str(e)) @app.post("/Talabat_Extract_excel_only", tags=["Talabat"]) def extract_Talabat_Excel_only(url_input: UrlInputTalabat2): try: excel_file, filename = Talabat_excel_extract(url_input.url) response = Response(content=excel_file.getvalue()) response.headers["Content-Disposition"] = f"attachment; filename={filename}" response.headers["Content-Type"] = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" return response except HTTPException as e: raise e except Exception as e: raise HTTPException(status_code=500, detail=str(e)) # @app.post("/Talabat_Extract_Json_only",tags=["Talabat"]) # def extract_Talabat_Json_only(url_input: UrlInputTalabat3): # try: # restaurant_name, output = Talabat_Json_extract(url_input.url) # # Prepare response to return the JSON file as downloadable content # response = Response(content=output.getvalue()) # response.headers["Content-Disposition"] = f"attachment; filename={restaurant_name}.json" # response.headers["Content-Type"] = "application/json" # return response # except HTTPException as e: # raise e # except Exception as e: # raise HTTPException(status_code=500, detail=str(e)) @app.post("/Talabat_MongoData_From_Location",tags=["Talabat"]) def extract_data_Talabat(url_input: UrlInputTalabat4): try: data = Talabat_multy_LOCATION(url_input.location) return {"message": "Extraction process completed successfully", "data": data} except HTTPException as e: raise e except Exception as e: raise HTTPException(status_code=500, detail=str(e)) # @app.post("/Talabat_Mongo_Data_Add_from_url",tags=["Talabat"]) # def Talabat_Mongo_Data_add_fun(url_input: UrlInputTalabat5): # try: # data = Talabat_mongo_data_add(url_input.url) # return {"message": "Extraction process completed successfully", "data": data} # except HTTPException as e: # raise e # except Exception as e: # raise HTTPException(status_code=500, detail=str(e)) @app.post("/Talabat_MongoData_From_Multy_URLs", tags=["Talabat"]) def Talabat_MongoData_From_URLs(url_input: UrlInputTalabat6): try: data = multi_url(url_input.url) return {"message": "Extraction process completed successfully", "data": data} except HTTPException as e: raise e except Exception as e: raise HTTPException(status_code=500, detail=str(e)) if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)