-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.py
108 lines (86 loc) · 3.5 KB
/
server.py
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import os
from fastapi import FastAPI, HTTPException
from fastapi.staticfiles import StaticFiles
from fastapi import FastAPI, Request, Depends
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import StreamingResponse
from fastapi.responses import JSONResponse
from fastapi.responses import FileResponse
import io
from pydantic import BaseModel
import uvicorn
from modules.get_yt_info import get_yt_channel_data, get_tag_info
from modules.save_channel_links import save_channel_links
from modules.utils import generate_audio, get_summarization
app = FastAPI()
app.mount("/images", StaticFiles(directory="images"), name="images")
app.mount("/video", StaticFiles(directory="video"), name="video")
# middleware
app.add_middleware(
CORSMiddleware,
allow_credentials=True,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"]
)
class search_channel_respond(BaseModel):
search_query : str
page :int
class save_channel_videos(BaseModel):
username : str
class tag_respond(BaseModel):
tag_num : int
page : int
class Summarization(BaseModel):
content:str
@app.post("/search_channel_respond/")
async def search_channel_respond(item: search_channel_respond):
try:
yt_meta_data = get_yt_channel_data(item.search_query, item.page)
yt_meta_data_json = yt_meta_data.to_json(orient="records")
return JSONResponse(content={"code": 0, "data": yt_meta_data_json}, status_code=200)
except Exception as e:
return JSONResponse(content={"code": 1, "error": str(e)}, status_code=500)
@app.post("/save_channel_videos/")
async def save_channel_videos(item: save_channel_videos):
save_channel_links(item.username)
#os.remove(save_place)
@app.post("/tag_respond/")
async def tag_respond(item: tag_respond):
try:
yt_meta_data = get_tag_info(item.tag_num, item.page)
yt_meta_data_json = yt_meta_data.to_json(orient="records")
print(yt_meta_data_json)
return JSONResponse(content={"code": 0, "data": yt_meta_data_json}, status_code=200)
except Exception as e:
return JSONResponse(content={"code": 1, "error": str(e)}, status_code=500)
@app.get("/get_audio/")
async def get_audio(content : str, gender : int):
audio = generate_audio(content, gender)
#audio_path = f"audio/audio_{audio_number}.mp3"
return StreamingResponse(io.BytesIO(audio), media_type="audio/mp3")
#return FileResponse(audio_path, media_type="audio/mp3")
@app.get("/get_image/")
async def get_image(image_number: int):
if image_number not in {1, 2, 3}:
raise HTTPException(status_code=404, detail="Image not found")
image_path = f"images/Avatar_{image_number}.png"
return FileResponse(image_path, media_type="image/png")
@app.get("/get_mp4/")
async def get_mp4():
mp4_file_path = "./video/demo_1.mp4"
if os.path.exists(mp4_file_path):
with open(mp4_file_path, "rb") as mp4_file:
mp4_content = mp4_file.read()
return StreamingResponse(io.BytesIO(mp4_content), media_type="video/mp4")
else:
return {"error": "Generate failed"}
@app.post("/Summarization/")
async def Summarization(item: Summarization):
try:
summarization_text = get_summarization(item.content)
return JSONResponse(content={"code": 0, "data": summarization_text}, status_code=200)
except Exception as e:
return JSONResponse(content={"code": 1, "error": str(e)}, status_code=500)
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)