Skip to content

Commit d9323a2

Browse files
committed
Video download fix
1 parent cbbc05b commit d9323a2

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

TikTokAPI/tiktokapi.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,30 @@
66
from .tiktok_browser import TikTokBrowser
77

88

9+
class VideoException(Exception):
10+
pass
11+
912
class TikTokAPI(object):
1013

11-
def __init__(self, language='en', browser_lang="en-US", timezone="Asia/Kolkata", region='IN', cookie=None):
14+
def __init__(self, cookie={}, language='en', browser_lang="en-US", timezone="Asia/Kolkata", region='IN'):
1215
self.base_url = "https://t.tiktok.com/api"
1316
self.user_agent = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0"
1417

18+
self.verifyFp = cookie.get("s_v_web_id", "verify_kjf974fd_y7bupmR0_3uRm_43kF_Awde_8K95qt0GcpBk")
19+
self.tt_webid = cookie.get("tt_webid", "6913027209393473025")
20+
21+
1522
self.headers = {
1623
'Host': 't.tiktok.com',
1724
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0',
18-
# 'Cookie': 'tt_webid_v2=6913043173028431361; tt_webid=6913043173028431361; tt_csrf_token=taRJpJNwpA9NmrpdiwSwaysu'
25+
'Referer': 'https://www.tiktok.com/',
26+
'Cookie': 'tt_webid_v2={}; tt_webid={}'.format(self.tt_webid, self.tt_webid)
1927
}
2028
self.language = language
2129
self.browser_lang = browser_lang
2230
self.timezone = timezone
2331
self.region = region
2432

25-
if cookie is None:
26-
self.verifyFp = "verify_kjfaff24_sOZVAInw_G0Sm_4BtI_BStb_SB6moxzLxFrr"
27-
else:
28-
self.verifyFp = cookie
2933
self.default_params = {
3034
"aid": "1988",
3135
"app_name": "tiktok_web",
@@ -231,22 +235,22 @@ def getVideoById(self, video_id):
231235

232236
def downloadVideoById(self, video_id, save_path):
233237
video_info = self.getVideoById(video_id)
234-
video_url = video_info["itemInfo"]["itemStruct"]["video"]["downloadAddr"]
235-
headers = {"User-Agent": "okhttp"}
236-
video_data = get_req_content(video_url, params=None, headers=headers)
238+
video_url = video_info["itemInfo"]["itemStruct"]["video"]["playAddr"]
239+
video_data = get_req_content(video_url, params=None, headers=self.headers)
237240
with open(save_path, 'wb') as f:
238241
f.write(video_data)
239242

240243
def downloadVideoByIdNoWatermark(self, video_id, save_path):
241244
video_info = self.getVideoById(video_id)
242245
video_url = video_info["itemInfo"]["itemStruct"]["video"]["downloadAddr"]
243-
headers = {"User-Agent": "okhttp"}
244-
video_data = get_req_text(video_url, params=None, headers=headers)
246+
video_data = get_req_text(video_url, params=None, headers=self.headers)
245247
pos = video_data.find("vid:")
248+
if pos == -1:
249+
raise VideoException("Video without watermark not available in new videos")
246250
video_url_no_wm = "https://api2-16-h2.musical.ly/aweme/v1/play/?video_id={" \
247251
"}&vr_type=0&is_play_url=1&source=PackSourceEnum_PUBLISH&media_type=4" \
248252
.format(video_data[pos+4:pos+36])
249-
headers = {"User-Agent": "okhttp"}
250-
video_data_no_wm = get_req_content(video_url_no_wm, params=None, headers=headers)
253+
254+
video_data_no_wm = get_req_content(video_url_no_wm, params=None, headers=self.headers)
251255
with open(save_path, 'wb') as f:
252256
f.write(video_data_no_wm)

TikTokAPI/utils.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,19 @@ def build_get_url(base_url, params, append=False):
2424

2525

2626
def get_req_json(url, params=None, headers=None):
27+
headers["Host"] = url.split("/")[2]
2728
r = requests.get(url, params=params, headers=headers)
2829
return json.loads(r.text)
2930

3031

3132
def get_req_content(url, params=None, headers=None):
33+
headers["Host"] = url.split("/")[2]
3234
r = requests.get(url, params=params, headers=headers)
3335
return r.content
3436

3537

3638
def get_req_text(url, params=None, headers=None):
39+
headers["Host"] = url.split("/")[2]
3740
r = requests.get(url, params=params, headers=headers)
3841
return r.text
3942

0 commit comments

Comments
 (0)