update
swadhinbiswas committed 2 years ago
541ae7a
1 parent 8cf3335
commit 541ae7a
2 files changed
+177 -17
Showing 2 changed files+177-17
▼app/doodfunction/doodstream.py
+162-0
| @@ -0,0 +1,162 @@ | ||
1 | +import requests | |
2 | +import re | |
3 | +import sys | |
4 | +import asyncio | |
5 | + | |
6 | +from typing import Optional | |
7 | + | |
8 | +class DoodStream: | |
9 | + def __init__(self,api_key:str): | |
10 | + self.api_key=api_key | |
11 | + self.base_url="https://doodapi.com/api" | |
12 | + self.headers={"Content-Type":"application/json"} | |
13 | + | |
14 | + def _req(self,url:str)->dict: | |
15 | + try: | |
16 | + r=requests.get(url) | |
17 | + response=r.json() | |
18 | + if response["msg"]=="Wrong API Key": | |
19 | + Exception("Invalid API Key") | |
20 | + else: | |
21 | + return response | |
22 | + except Exception as e: | |
23 | + Exception(e) | |
24 | + | |
25 | + def userinfo(self)->dict: | |
26 | + url=f"{self.base_url}/account/info?key={self.api_key}" | |
27 | + return self._req(url) | |
28 | + | |
29 | + def account_reports(self, | |
30 | + last:Optional[str]=None, | |
31 | + from_date:Optional[str]=None, | |
32 | + to_date:Optional[str]=None,)->dict: | |
33 | + url=f"{self.base_url}/account/stats?key={self.api_key}" | |
34 | + if last != None: | |
35 | + url += f"&last={last}" | |
36 | + if from_date != None: | |
37 | + url = f"&from_date={from_date}" | |
38 | + if to_date != None: | |
39 | + url = f"&to_date={to_date}" | |
40 | + url = f"{self.base_url}account/stats?key={self.api_key}" | |
41 | + return self._req(url) | |
42 | + | |
43 | + def dmca_list( | |
44 | + self,per_page:Optional[int]=None, | |
45 | + page:Optional[int]=None)->dict: | |
46 | + url=f"{self.base_url}/dmca/list?key={self.api_key}" | |
47 | + if per_page != None: | |
48 | + url += f"&per_page={per_page}" | |
49 | + if page != None: | |
50 | + url += f"&page={page}" | |
51 | + return self._req(url) | |
52 | + | |
53 | + async def upload_video(self,path)->dict: | |
54 | + url = f"{self.base_url}upload/server?key={self.api_key}" | |
55 | + url_for_upload = self._req(url)["result"] | |
56 | + post_data = {"api_key": self.api_key} | |
57 | + filename = path.split("/")[-1] | |
58 | + post_files = {"file": (filename, open(path, "rb"))} | |
59 | + res = requests.post(url_for_upload, data=post_data, files=post_files).json() | |
60 | + if res["msg"] == "OK": | |
61 | + return res | |
62 | + else: | |
63 | + raise TypeError( | |
64 | + f"unsupported video format {filename}, please upload video with mkv, mp4, wmv, avi, mpeg4, mpegps, flv, 3gp, webm, mov, mpg & m4v format" | |
65 | + ) | |
66 | + | |
67 | + def copy_video(self,file_code:str,file_id:Optional[str]=None)->dict: | |
68 | + url=f"{self.base_url}/video/copy?key={self.api_key}&file_code={file_code}" | |
69 | + if file_id != None: | |
70 | + url += f"&file_id={file_id}" | |
71 | + return self._req(url) | |
72 | + | |
73 | + def remote_upload( | |
74 | + self, | |
75 | + direct_link: str, | |
76 | + fild_id: Optional[str] = None, | |
77 | + file_name: Optional[str] = None,)->dict: | |
78 | + url = f"{self.base_url}/upload/remote?key={self.api_key}" | |
79 | + return self._req(url) | |
80 | + | |
81 | + def remote_upload_status(self,file_code:str)->dict: | |
82 | + url=f"{self.base_url}/upload/status?key={self.api_key}&file_code={file_code}" | |
83 | + return self._req(url) | |
84 | + | |
85 | + def remote_upload_slots(self)->dict: | |
86 | + url=f"{self.base_url}/upload/slots?key={self.api_key}" | |
87 | + return self._req(url) | |
88 | + | |
89 | + def remote_upload_action( | |
90 | + self, | |
91 | + restart_error:bool, | |
92 | + clear_error:Optional[bool]=None, | |
93 | + clear_completed:Optional[bool]=None, | |
94 | + clear_all:Optional[bool]=None,)->dict: | |
95 | + url = f"{self.base_url}urlupload/actions?key={self.api_key}&restart_errors={restart_error}" | |
96 | + if clear_error != None: | |
97 | + url += f"&clear_errors={clear_error}" | |
98 | + if clear_completed != None: | |
99 | + url += f"&clear_completed={clear_completed}" | |
100 | + if clear_all != None: | |
101 | + url += f"&clear_all={clear_all}" | |
102 | + return self._req(url) | |
103 | + | |
104 | + def create_folder(self,name:str,parent_id:Optional[str]=None)->dict: | |
105 | + url=f"{self.base_url}/folder/create?key={self.api_key}&name={name}" | |
106 | + if parent_id != None: | |
107 | + url += f"&parent_id={parent_id}" | |
108 | + return self._req(url) | |
109 | + | |
110 | + def list_files(self, | |
111 | + page:Optional[int]=None, | |
112 | + per_page:Optional[int]=None, | |
113 | + parent_id:Optional[str]=None)->dict: | |
114 | + url=f"{self.base_url}/files/list?key={self.api_key}" | |
115 | + if page != None: | |
116 | + url += f"&page={page}" | |
117 | + if per_page != None: | |
118 | + url += f"&per_page={per_page}" | |
119 | + if parent_id != None: | |
120 | + url += f"&parent_id={parent_id}" | |
121 | + return self._req(url) | |
122 | + | |
123 | + def delete_file(self,file_id:str)->dict: | |
124 | + url=f"{self.base_url}/file/delete?key={self.api_key}&file_id={file_id}" | |
125 | + return self._req(url) | |
126 | + | |
127 | + def get_file_info(self,file_id:str)->dict: | |
128 | + url=f"{self.base_url}/file/info?key={self.api_key}&file_id={file_id}" | |
129 | + return self._req(url) | |
130 | + | |
131 | + def rename_file(self,file_id:str,name:str)->dict: | |
132 | + url=f"{self.base_url}/file/rename?key={self.api_key}&file_id={file_id}&name={name}" | |
133 | + return self._req(url) | |
134 | + | |
135 | + def move_file(self,file_id:str,parent_id:str)->dict: | |
136 | + url=f"{self.base_url}/file/move?key={self.api_key}&file_id={file_id}&parent_id={parent_id}" | |
137 | + | |
138 | + return self._req(url) | |
139 | + | |
140 | + def delete_folder(self,folder_id:str)->dict: | |
141 | + url=f"{self.base_url}/folder/delete?key={self.api_key}&folder_id={folder_id}" | |
142 | + return self._req(url) | |
143 | + | |
144 | + | |
145 | + def copy_file(self,file_id:str,parent_id:str)->dict: | |
146 | + url=f"{self.base_url}/file/copy?key={self.api_key}&file_id={file_id}&parent_id={parent_id}" | |
147 | + return self._req(url) | |
148 | + | |
149 | + | |
150 | + def file_info(self,file_id:str)->dict: | |
151 | + url=f"{self.base_url}/file/info?key={self.api_key}&file_id={file_id}" | |
152 | + return self._req(url) | |
153 | + | |
154 | + | |
155 | + def file_serach(self,query:str)->dict: | |
156 | + url=f"{self.base_url}/files/search?key={self.api_key}&query={query}" | |
157 | + return self._req(url) | |
158 | + | |
159 | + | |
160 | + | |
161 | + | |
162 | + | |
0 | 163 | |
▼app/doodfunction/upload.py
+15-17
| @@ -1,4 +1,5 @@ | ||
1 | 1 | from app.setting.config import DOODAPIKEY |
2 | +from app.doodfunction.doodstream import DoodStream | |
2 | 3 | # ,STREAMTAPEAPIKEY,STREAMTAPEUSERAGENT |
3 | 4 | import requests |
4 | 5 | from fastapi import APIRouter, File, UploadFile, Form,FastAPI |
| @@ -6,34 +7,31 @@ from fastapi.responses import JSONResponse | ||
6 | 7 | from fastapi.encoders import jsonable_encoder |
7 | 8 | |
8 | 9 | router = APIRouter() |
9 | - | |
10 | +apicall=DoodStream(DOODAPIKEY) | |
10 | 11 | @router.get("/userinfo") |
11 | -async def userinfo(): | |
12 | - url=f"https://doodapi.com/api/account/info?key={DOODAPIKEY}" | |
13 | - response = requests.get(url) | |
14 | - return response.json() | |
12 | +async def user(): | |
13 | + x=apicall.userinfo() | |
14 | + return x | |
15 | 15 | |
16 | 16 | @router.get("/accountinfo") |
17 | 17 | async def accountinfo(): |
18 | - url=f"https://doodapi.com/api/account/stats?key={DOODAPIKEY}" | |
19 | - response = requests.get(url) | |
20 | - return response.json() | |
18 | + x= await apicall.account_reports() | |
19 | + return x | |
20 | + | |
21 | 21 | |
22 | 22 | |
23 | 23 | @router.get("/dmcainfo") |
24 | 24 | async def dmcainfo(): |
25 | - url=f"https://doodapi.com/api/dmca/list?key={DOODAPIKEY}" | |
26 | - response = requests.get(url) | |
27 | - return response.json() | |
28 | - | |
25 | + x= await apicall.dmca_list() | |
26 | + return x | |
29 | 27 | @router.post('/remoteupload') |
30 | -async def remoteupload(url: str = Form(...), folder_id: str = Form(...)): | |
31 | - url=f"https://doodapi.com/api/remote/upload?key={DOODAPIKEY}&url={url}&folder_id={folder_id}" | |
32 | - response = requests.post(url) | |
33 | - return response.json() | |
28 | +async def remoteupload(url: str = Form(...)): | |
29 | + x= apicall.remote_upload(url) | |
30 | + return x | |
31 | + | |
34 | 32 | |
35 | 33 | @router.post('/upload') |
36 | -async def upload(file: UploadFile = File(...), folder_id: str = Form(...)): | |
34 | +async def upload(file: UploadFile = File(...)): | |
37 | 35 | url=f"https://doodapi.com/api/upload?key={DOODAPIKEY}&folder_id={folder_id}" |
38 | 36 | files = {'file': file.file} |
39 | 37 | response = requests.post(url, files=files) |
40 | 38 | |