|
6 | 6 | from .tiktok_browser import TikTokBrowser |
7 | 7 |
|
8 | 8 |
|
| 9 | +class VideoException(Exception): |
| 10 | + pass |
| 11 | + |
9 | 12 | class TikTokAPI(object): |
10 | 13 |
|
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'): |
12 | 15 | self.base_url = "https://t.tiktok.com/api" |
13 | 16 | self.user_agent = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0" |
14 | 17 |
|
| 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 | + |
15 | 22 | self.headers = { |
16 | 23 | 'Host': 't.tiktok.com', |
17 | 24 | '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) |
19 | 27 | } |
20 | 28 | self.language = language |
21 | 29 | self.browser_lang = browser_lang |
22 | 30 | self.timezone = timezone |
23 | 31 | self.region = region |
24 | 32 |
|
25 | | - if cookie is None: |
26 | | - self.verifyFp = "verify_kjfaff24_sOZVAInw_G0Sm_4BtI_BStb_SB6moxzLxFrr" |
27 | | - else: |
28 | | - self.verifyFp = cookie |
29 | 33 | self.default_params = { |
30 | 34 | "aid": "1988", |
31 | 35 | "app_name": "tiktok_web", |
@@ -231,22 +235,22 @@ def getVideoById(self, video_id): |
231 | 235 |
|
232 | 236 | def downloadVideoById(self, video_id, save_path): |
233 | 237 | 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) |
237 | 240 | with open(save_path, 'wb') as f: |
238 | 241 | f.write(video_data) |
239 | 242 |
|
240 | 243 | def downloadVideoByIdNoWatermark(self, video_id, save_path): |
241 | 244 | video_info = self.getVideoById(video_id) |
242 | 245 | 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) |
245 | 247 | pos = video_data.find("vid:") |
| 248 | + if pos == -1: |
| 249 | + raise VideoException("Video without watermark not available in new videos") |
246 | 250 | video_url_no_wm = "https://api2-16-h2.musical.ly/aweme/v1/play/?video_id={" \ |
247 | 251 | "}&vr_type=0&is_play_url=1&source=PackSourceEnum_PUBLISH&media_type=4" \ |
248 | 252 | .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) |
251 | 255 | with open(save_path, 'wb') as f: |
252 | 256 | f.write(video_data_no_wm) |
0 commit comments