11import os
2+ import random
3+ import urllib .parse
24from .utils import random_key , build_get_url , get_req_json , get_req_content , get_req_text
35from .tiktok_browser import TikTokBrowser
46
57
68class TikTokAPI (object ):
79
8- def __init__ (self , language = 'en' , region = 'IN' , cookie = None ):
10+ def __init__ (self , language = 'en' , browser_lang = "en-US" , timezone = "Asia/Kolkata" , region = 'IN' , cookie = None ):
911 self .base_url = "https://t.tiktok.com/api"
10- self .user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) " \
11- "Chrome/83.0.4103.106 Safari/537.36"
12+ self .user_agent = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0"
1213
1314 self .headers = {
14- "User-Agent" : self .user_agent
15+ "User-Agent" : self .user_agent ,
1516 }
1617 self .language = language
18+ self .browser_lang = browser_lang
19+ self .timezone = timezone
1720 self .region = region
21+
1822 if cookie is None :
1923 self .verifyFp = random_key (16 )
2024 else :
2125 self .verifyFp = cookie
2226 self .default_params = {
27+ "aid" : "1988" ,
28+ "app_name" : "tiktok_web" ,
29+ "device_platform" : "web" ,
30+ "referer" : "" ,
31+ "user_agent" : urllib .parse .quote_plus (self .user_agent ),
32+ "cookie_enabled" : "true" ,
33+ "screen_width" : "1920" ,
34+ "screen_height" : "1080" ,
35+ "browser_language" : self .browser_lang ,
36+ "browser_platform" : "Linux+x86_64" ,
37+ "browser_name" : "Mozilla" ,
38+ "browser_version" : "5.0+(X11)" ,
39+ "browser_online" : "true" ,
40+ "timezone_name" : self .timezone ,
41+ # "page_referer": "https://www.tiktok.com/foryou?lang=en",
42+ "priority_region" : self .region ,
43+
44+ "appId" : "1180" ,
45+ "region" : self .region ,
46+ "appType" : "t" ,
47+
48+ "isAndroid" : "false" ,
49+ "isMobile" : "false" ,
50+ "isIOS" : "false" ,
51+ "OS" : "linux" ,
52+ "tt-web-region" : self .region ,
53+
2354 "language" : self .language ,
2455 "verifyFp" : self .verifyFp
2556 }
2657 self .signature_key = "_signature"
58+ self .did_key = "did"
2759 self .tiktok_browser = TikTokBrowser (self .user_agent )
2860
2961 def send_get_request (self , url , params , extra_headers = None ):
3062 url = build_get_url (url , params )
63+ did = str (random .randint (10000 , 999999999 ))
64+ url = build_get_url (url , {self .did_key : did }, append = True )
3165 signature = self .tiktok_browser .fetch_auth_params (url , language = self .language )
3266 url = build_get_url (url , {self .signature_key : signature }, append = True )
3367 if extra_headers is None :
@@ -45,13 +79,11 @@ def getTrending(self, count=30):
4579 url = self .base_url + "/item_list/"
4680 req_default_params = {
4781 "id" : "1" ,
48- "type" : "1 " ,
82+ "type" : "5 " ,
4983 "secUid" : "" ,
5084 "maxCursor" : "0" ,
5185 "minCursor" : "0" ,
5286 "sourceType" : "12" ,
53- "appId" : "1180" ,
54- "region" : self .region
5587 }
5688 params = {
5789 "count" : str (count )
@@ -83,8 +115,6 @@ def getVideosByUserName(self, user_name, count=30):
83115 "maxCursor" : "0" ,
84116 "minCursor" : "0" ,
85117 "sourceType" : "8" ,
86- "appId" : "1180" ,
87- "region" : self .region
88118 }
89119 params = {
90120 "id" : user_id ,
@@ -109,8 +139,6 @@ def getLikesByUserName(self, user_name, count=30):
109139 "maxCursor" : "0" ,
110140 "minCursor" : "0" ,
111141 "sourceType" : "9" ,
112- "appId" : "1180" ,
113- "region" : self .region
114142 }
115143 params = {
116144 "id" : user_id ,
0 commit comments