Skip to content

Commit d30a82e

Browse files
committed
Adding Apis for video download and video download without watermark
1 parent 01e7336 commit d30a82e

File tree

3 files changed

+64
-5
lines changed

3 files changed

+64
-5
lines changed

TikTokAPI/tiktokapi.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import os
2-
from .utils import random_key, build_get_url, get_req_json
2+
from .utils import random_key, build_get_url, get_req_json, get_req_content, get_req_text
33
from .tiktok_browser import TikTokBrowser
44

55

@@ -194,3 +194,25 @@ def getVideoById(self, video_id):
194194
for key, val in self.default_params.items():
195195
params[key] = val
196196
return self.send_get_request(url, params)
197+
198+
def downloadVideoById(self, video_id, save_path):
199+
video_info = self.getVideoById(video_id)
200+
video_url = video_info["itemInfo"]["itemStruct"]["video"]["downloadAddr"]
201+
headers = {"User-Agent": "okhttp"}
202+
video_data = get_req_content(video_url, params=None, headers=headers)
203+
with open(save_path, 'wb') as f:
204+
f.write(video_data)
205+
206+
def downloadVideoByIdNoWatermark(self, video_id, save_path):
207+
video_info = self.getVideoById(video_id)
208+
video_url = video_info["itemInfo"]["itemStruct"]["video"]["downloadAddr"]
209+
headers = {"User-Agent": "okhttp"}
210+
video_data = get_req_text(video_url, params=None, headers=headers)
211+
pos = video_data.find("vid:")
212+
video_url_no_wm = "https://api2-16-h2.musical.ly/aweme/v1/play/?video_id={" \
213+
"}&vr_type=0&is_play_url=1&source=PackSourceEnum_PUBLISH&media_type=4" \
214+
.format(video_data[pos+4:pos+36])
215+
headers = {"User-Agent": "okhttp"}
216+
video_data_no_wm = get_req_content(video_url_no_wm, params=None, headers=headers)
217+
with open(save_path, 'wb') as f:
218+
f.write(video_data_no_wm)

TikTokAPI/utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,16 @@ def get_req_json(url, params=None, headers=None):
2828
return json.loads(r.text)
2929

3030

31+
def get_req_content(url, params=None, headers=None):
32+
r = requests.get(url, params=params, headers=headers)
33+
return r.content
34+
35+
36+
def get_req_text(url, params=None, headers=None):
37+
r = requests.get(url, params=params, headers=headers)
38+
return r.text
39+
40+
3141
def python_list2_web_list(data):
3242
web_list = "[\""
3343
web_list += '", "'.join(data)

tests/test_video.py

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,34 @@
1+
import argparse
12
from TikTokAPI import TikTokAPI
23

34

4-
video_id = "6843481669886954757"
5-
api = TikTokAPI()
6-
video_obj = api.getVideoById(video_id)
7-
print(video_obj)
5+
def getVideoById(video_id):
6+
api = TikTokAPI()
7+
return api.getVideoById(video_id)
8+
9+
10+
def downloadVideoById(video_id):
11+
api = TikTokAPI()
12+
api.downloadVideoById(video_id, video_id+".mp4")
13+
14+
15+
def downloadVideoByIdNoWatermark(video_id):
16+
api = TikTokAPI()
17+
api.downloadVideoByIdNoWatermark(video_id, video_id+"_no_wm.mp4")
18+
19+
20+
if __name__ == "__main__":
21+
parser = argparse.ArgumentParser(description='')
22+
parser.add_argument('--data', dest='data', type=str, help='data/video/video_no_wm')
23+
args = parser.parse_args()
24+
25+
var = "6843481669886954757"
26+
if args.data == 'data':
27+
retval = getVideoById(var)
28+
print(retval)
29+
elif args.data == 'video':
30+
downloadVideoById(var)
31+
elif args.data == 'video_no_wm':
32+
downloadVideoByIdNoWatermark(var)
33+
else:
34+
print("Invalid Argument")

0 commit comments

Comments
 (0)