update

swadhinbiswas committed 2 years ago
541ae7a
1 parent 8cf3335
commit 541ae7a
2 files changed
+177 -17
▼app/doodfunction/doodstream.py
+162-0
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
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
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