MyanmarSwe commited on
Commit
87ec624
·
verified ·
1 Parent(s): 39e7a96

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +30 -30
main.py CHANGED
@@ -1,20 +1,16 @@
1
- from fastapi import FastAPI, HTTPException, Query, Request
2
- from fastapi.responses import StreamingResponse
3
- import requests
4
- from bs4 import BeautifulSoup
5
  import re
6
  import base64
7
- import os
8
- from fastapi import FastAPI, HTTPException, Query, Request
 
 
 
9
 
10
  app = FastAPI()
11
 
12
- @app.get("/")
13
- def index():
14
- return {"message": "Proxy is Online!", "usage": "/download?url=[LINK]&key=[YOUR_KEY]"}
15
-
16
  # --- Configurations ---
17
- ACCESS_KEY = os.getenv("ACCESS_KEY", "786969") # တကယ်လို့ Secret မရှိင် default သုံးမ
18
  GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY", "")
19
 
20
  @app.get("/")
@@ -26,7 +22,7 @@ def get_direct_url(url):
26
  fid = re.search(r'/(?:d|file/d|open\?id=)/([a-zA-Z0-9_-]+)', url)
27
  if fid:
28
  file_id = fid.group(1)
29
- # API Key ထည့်သွင်းထားပါက API ကို အသုံးပြုမည် (Virus warning ကို အလိုလိုကျော်ဖြတ်ပြီးသားဖြစ်မည်)
30
  if GOOGLE_API_KEY and GOOGLE_API_KEY != "YOUR_GOOGLE_API_KEY_HERE":
31
  return f"https://www.googleapis.com/drive/v3/files/{file_id}?alt=media&key={GOOGLE_API_KEY}"
32
  else:
@@ -40,7 +36,8 @@ def get_direct_url(url):
40
  soup = BeautifulSoup(r.text, 'html.parser')
41
  btn = soup.find('a', {'id': 'downloadButton'})
42
  return btn.get('href') if btn else None
43
- except: return None
 
44
 
45
  elif "dropbox.com" in url:
46
  return url.replace("?dl=0", "").split("?")[0] + "?dl=1"
@@ -60,7 +57,7 @@ async def download_proxy(request: Request, url: str, key: str = None):
60
  if not target_link:
61
  raise HTTPException(status_code=400, detail="Invalid Link")
62
 
63
- # Client ဆီကလာတဲ့ Range Header ကို ရယူခြင်း (Video ကျော်ကြည့်ရန်အတွက်)
64
  range_header = request.headers.get('range')
65
  headers = {}
66
  if range_header:
@@ -74,21 +71,24 @@ async def download_proxy(request: Request, url: str, key: str = None):
74
 
75
  # ---------------------------------------------------------
76
  # GDrive 100MB အထက် ဖိုင်များအတွက် Virus Scan Warning ကို ကျော်ဖြတ်ခြင်း
77
- # (API Key မသုံးထားသော ရိုးရိုး Link များအတွက် အထူးလိုအပ်ပါသည်)
78
  # ---------------------------------------------------------
79
  if "drive.google.com" in url and (not GOOGLE_API_KEY or GOOGLE_API_KEY == "YOUR_GOOGLE_API_KEY_HERE"):
80
- if "Google Drive - Virus scan warning" in r.text or "confirm=" not in target_link:
81
- confirm_token = None
82
- # Cookie မှတစ်ဆင့် Virus Scan Token ကို ရှာဖွေခြင်း
83
- for cookie_key, cookie_value in session.cookies.items():
84
- if cookie_key.startswith("download_warning"):
85
- confirm_token = cookie_value
86
- break
87
-
88
- if confirm_token:
89
- # Token ရပါက Link အသစ်ဖြင့် ဒေါင်းလုဒ် ပြန်စပါမည်
90
- new_target_link = f"{target_link}&confirm={confirm_token}"
91
- r = session.get(new_target_link, headers=headers, stream=True, allow_redirects=True)
 
 
 
 
92
 
93
  # Header များကို ပြန်လည်ပေးပို့ရန် ပြင်ဆင်ခြင်း
94
  excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
@@ -104,8 +104,9 @@ async def download_proxy(request: Request, url: str, key: str = None):
104
  response_headers['Content-Range'] = r.headers['Content-Range']
105
 
106
  def iterfile():
107
- for chunk in r.iter_content(chunk_size=1024*1024):
108
- if chunk: yield chunk
 
109
 
110
  return StreamingResponse(
111
  iterfile(),
@@ -115,5 +116,4 @@ async def download_proxy(request: Request, url: str, key: str = None):
115
  )
116
 
117
  if __name__ == "__main__":
118
- import uvicorn
119
  uvicorn.run(app, host="0.0.0.0", port=7860)
 
1
+ import os
 
 
 
2
  import re
3
  import base64
4
+ import requests
5
+ from bs4 import BeautifulSoup
6
+ from fastapi import FastAPI, HTTPException, Request
7
+ from fastapi.responses import StreamingResponse
8
+ import uvicorn
9
 
10
  app = FastAPI()
11
 
 
 
 
 
12
  # --- Configurations ---
13
+ ACCESS_KEY = os.getenv("ACCESS_KEY", "786969") # Secret မရှိလျှင် default အဖြစ် "786969" ကို သုံးမ
14
  GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY", "")
15
 
16
  @app.get("/")
 
22
  fid = re.search(r'/(?:d|file/d|open\?id=)/([a-zA-Z0-9_-]+)', url)
23
  if fid:
24
  file_id = fid.group(1)
25
+ # API Key ထည့်သွင်းထားပါက API ကို အသုံးပြုမည်
26
  if GOOGLE_API_KEY and GOOGLE_API_KEY != "YOUR_GOOGLE_API_KEY_HERE":
27
  return f"https://www.googleapis.com/drive/v3/files/{file_id}?alt=media&key={GOOGLE_API_KEY}"
28
  else:
 
36
  soup = BeautifulSoup(r.text, 'html.parser')
37
  btn = soup.find('a', {'id': 'downloadButton'})
38
  return btn.get('href') if btn else None
39
+ except:
40
+ return None
41
 
42
  elif "dropbox.com" in url:
43
  return url.replace("?dl=0", "").split("?")[0] + "?dl=1"
 
57
  if not target_link:
58
  raise HTTPException(status_code=400, detail="Invalid Link")
59
 
60
+ # Client ဆီကလာတဲ့ Range Header ကို ရယူခြင်း (Video ကျော်ကြည့်ရန်)
61
  range_header = request.headers.get('range')
62
  headers = {}
63
  if range_header:
 
71
 
72
  # ---------------------------------------------------------
73
  # GDrive 100MB အထက် ဖိုင်များအတွက် Virus Scan Warning ကို ကျော်ဖြတ်ခြင်း
 
74
  # ---------------------------------------------------------
75
  if "drive.google.com" in url and (not GOOGLE_API_KEY or GOOGLE_API_KEY == "YOUR_GOOGLE_API_KEY_HERE"):
76
+ # Content-Type သည် HTML ဖြစ်နေမှသာ (Virus Warning Page ဖြစ်နိုင်ခြေရှိမှသာ) r.text ကို ဖတ်မည်
77
+ content_type = r.headers.get('Content-Type', '').lower()
78
+ if 'text/html' in content_type:
79
+ text_content = r.text
80
+ if "Google Drive - Virus scan warning" in text_content or "confirm=" not in target_link:
81
+ confirm_token = None
82
+ # Cookie မှတစ်ဆင့် Virus Scan Token ကို ရှာဖွေခြင်း
83
+ for cookie_key, cookie_value in session.cookies.items():
84
+ if cookie_key.startswith("download_warning"):
85
+ confirm_token = cookie_value
86
+ break
87
+
88
+ if confirm_token:
89
+ # Token ရပါက Link အသစ်ဖြင့် ဒေါင်းလုဒ် ပြန်စပါမည်
90
+ new_target_link = f"{target_link}&confirm={confirm_token}"
91
+ r = session.get(new_target_link, headers=headers, stream=True, allow_redirects=True)
92
 
93
  # Header များကို ပြန်လည်ပေးပို့ရန် ပြင်ဆင်ခြင်း
94
  excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
 
104
  response_headers['Content-Range'] = r.headers['Content-Range']
105
 
106
  def iterfile():
107
+ for chunk in r.iter_content(chunk_size=1024*1024): # 1MB chunks
108
+ if chunk:
109
+ yield chunk
110
 
111
  return StreamingResponse(
112
  iterfile(),
 
116
  )
117
 
118
  if __name__ == "__main__":
 
119
  uvicorn.run(app, host="0.0.0.0", port=7860)