Spaces:
Sleeping
Sleeping
Add proxy & update fetchSubtitleUrls.
Browse files- fetchYoutubeSubtitle.py +13 -11
- main.py +4 -4
fetchYoutubeSubtitle.py
CHANGED
|
@@ -36,10 +36,10 @@ def getUrlFromSubtitles(item, lang='en', subType="vtt"):
|
|
| 36 |
return subtitle.get("url")
|
| 37 |
return None
|
| 38 |
|
| 39 |
-
async def fetchSubtitle(url: str, lang: Optional[str] = 'en', subType: Optional[str] = "vtt") -> dict:
|
| 40 |
-
return await fetchSubtitlebyType(url, lang, subType)
|
| 41 |
|
| 42 |
-
async def fetchSubtitlebyType(url: str, lang: Optional[str] = 'en', subType="vtt") -> dict:
|
| 43 |
ydl_opts = {
|
| 44 |
"noplaylist": True,
|
| 45 |
"writesubtitles": False,
|
|
@@ -49,6 +49,9 @@ async def fetchSubtitlebyType(url: str, lang: Optional[str] = 'en', subType="vtt
|
|
| 49 |
"socket_timeout": 20
|
| 50 |
}
|
| 51 |
|
|
|
|
|
|
|
|
|
|
| 52 |
title = "unknow"
|
| 53 |
duration = ""
|
| 54 |
try:
|
|
@@ -113,13 +116,16 @@ def xml_caption_to_srt( xml_captions: str) -> str:
|
|
| 113 |
segments.append(line)
|
| 114 |
return "\n".join(segments).strip()
|
| 115 |
|
| 116 |
-
async def fetchSubtitleUrls(url: str) -> json:
|
| 117 |
ydl_opts = {
|
| 118 |
"noplaylist": True,
|
| 119 |
"writesubtitles": False,
|
| 120 |
"allsubtitles": True,
|
| 121 |
"skip_download": True,
|
| 122 |
}
|
|
|
|
|
|
|
|
|
|
| 123 |
title = "unknow"
|
| 124 |
duration = ""
|
| 125 |
try:
|
|
@@ -128,12 +134,8 @@ async def fetchSubtitleUrls(url: str) -> json:
|
|
| 128 |
title = info_dict.get("title", "unknow")
|
| 129 |
seconds = info_dict.get("duration")
|
| 130 |
duration = str(seconds) if seconds else ""
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
return {"title": title, "duration": duration, "subtitles": info_dict.get("subtitles")}
|
| 135 |
-
if info_dict.get("automatic_captions"):
|
| 136 |
-
return {"title": title, "duration": duration, "subtitles": info_dict.get("automatic_captions")}
|
| 137 |
except Exception as e:
|
| 138 |
return {"error": str(e)}
|
| 139 |
-
return {"title": title, "duration": duration, "error": "No subtitles"}
|
|
|
|
| 36 |
return subtitle.get("url")
|
| 37 |
return None
|
| 38 |
|
| 39 |
+
async def fetchSubtitle(url: str, lang: Optional[str] = 'en', subType: Optional[str] = "vtt", proxy: Optional[str] = None) -> dict:
|
| 40 |
+
return await fetchSubtitlebyType(url, lang, subType, proxy)
|
| 41 |
|
| 42 |
+
async def fetchSubtitlebyType(url: str, lang: Optional[str] = 'en', subType: Optional[str] = "vtt", proxy: Optional[str] = None) -> dict:
|
| 43 |
ydl_opts = {
|
| 44 |
"noplaylist": True,
|
| 45 |
"writesubtitles": False,
|
|
|
|
| 49 |
"socket_timeout": 20
|
| 50 |
}
|
| 51 |
|
| 52 |
+
if proxy:
|
| 53 |
+
ydl_opts.update({"proxy": proxy})
|
| 54 |
+
|
| 55 |
title = "unknow"
|
| 56 |
duration = ""
|
| 57 |
try:
|
|
|
|
| 116 |
segments.append(line)
|
| 117 |
return "\n".join(segments).strip()
|
| 118 |
|
| 119 |
+
async def fetchSubtitleUrls(url: str, proxy: Optional[str] = None) -> json:
|
| 120 |
ydl_opts = {
|
| 121 |
"noplaylist": True,
|
| 122 |
"writesubtitles": False,
|
| 123 |
"allsubtitles": True,
|
| 124 |
"skip_download": True,
|
| 125 |
}
|
| 126 |
+
if proxy:
|
| 127 |
+
ydl_opts.update({"proxy": proxy})
|
| 128 |
+
|
| 129 |
title = "unknow"
|
| 130 |
duration = ""
|
| 131 |
try:
|
|
|
|
| 134 |
title = info_dict.get("title", "unknow")
|
| 135 |
seconds = info_dict.get("duration")
|
| 136 |
duration = str(seconds) if seconds else ""
|
| 137 |
+
|
| 138 |
+
return {"title": title, "duration": duration, "subtitles": info_dict.get("subtitles"),"automatic_captions": info_dict.get("automatic_captions")}
|
| 139 |
+
|
|
|
|
|
|
|
|
|
|
| 140 |
except Exception as e:
|
| 141 |
return {"error": str(e)}
|
|
|
main.py
CHANGED
|
@@ -21,16 +21,16 @@ def read_json():
|
|
| 21 |
|
| 22 |
|
| 23 |
@app.get("/subtitle/")
|
| 24 |
-
async def get_subtitle(url: str, subtype: str="srt", x_token: Annotated[str | None, Header()] = None):
|
| 25 |
if token != x_token:
|
| 26 |
return JSONResponse({"error": "Invalid token"})
|
| 27 |
-
subtitle = await fetchSubtitle(url,subType=subtype)
|
| 28 |
return JSONResponse(content=subtitle)
|
| 29 |
|
| 30 |
|
| 31 |
@app.get("/subtitle-urls/")
|
| 32 |
-
async def get_subtitleUrls(url: str, x_token: Annotated[str | None, Header()] = None):
|
| 33 |
if token != x_token:
|
| 34 |
return JSONResponse({"error": "Invalid token"})
|
| 35 |
-
subtitles = await fetchSubtitleUrls(url)
|
| 36 |
return JSONResponse(content=subtitles)
|
|
|
|
| 21 |
|
| 22 |
|
| 23 |
@app.get("/subtitle/")
|
| 24 |
+
async def get_subtitle(url: str, subtype: str="srt", lang:str='en', proxy: str=None, x_token: Annotated[str | None, Header()] = None):
|
| 25 |
if token != x_token:
|
| 26 |
return JSONResponse({"error": "Invalid token"})
|
| 27 |
+
subtitle = await fetchSubtitle(url, lang=lang, subType=subtype, proxy=proxy)
|
| 28 |
return JSONResponse(content=subtitle)
|
| 29 |
|
| 30 |
|
| 31 |
@app.get("/subtitle-urls/")
|
| 32 |
+
async def get_subtitleUrls(url: str, proxy: str=None, x_token: Annotated[str | None, Header()] = None):
|
| 33 |
if token != x_token:
|
| 34 |
return JSONResponse({"error": "Invalid token"})
|
| 35 |
+
subtitles = await fetchSubtitleUrls(url, proxy=proxy)
|
| 36 |
return JSONResponse(content=subtitles)
|