1
1
import os
2
+ import random
3
+ import urllib .parse
2
4
from .utils import random_key , build_get_url , get_req_json , get_req_content , get_req_text
3
5
from .tiktok_browser import TikTokBrowser
4
6
5
7
6
8
class TikTokAPI (object ):
7
9
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 ):
9
11
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"
12
13
13
14
self .headers = {
14
- "User-Agent" : self .user_agent
15
+ "User-Agent" : self .user_agent ,
15
16
}
16
17
self .language = language
18
+ self .browser_lang = browser_lang
19
+ self .timezone = timezone
17
20
self .region = region
21
+
18
22
if cookie is None :
19
23
self .verifyFp = random_key (16 )
20
24
else :
21
25
self .verifyFp = cookie
22
26
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
+
23
54
"language" : self .language ,
24
55
"verifyFp" : self .verifyFp
25
56
}
26
57
self .signature_key = "_signature"
58
+ self .did_key = "did"
27
59
self .tiktok_browser = TikTokBrowser (self .user_agent )
28
60
29
61
def send_get_request (self , url , params , extra_headers = None ):
30
62
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 )
31
65
signature = self .tiktok_browser .fetch_auth_params (url , language = self .language )
32
66
url = build_get_url (url , {self .signature_key : signature }, append = True )
33
67
if extra_headers is None :
@@ -45,13 +79,11 @@ def getTrending(self, count=30):
45
79
url = self .base_url + "/item_list/"
46
80
req_default_params = {
47
81
"id" : "1" ,
48
- "type" : "1 " ,
82
+ "type" : "5 " ,
49
83
"secUid" : "" ,
50
84
"maxCursor" : "0" ,
51
85
"minCursor" : "0" ,
52
86
"sourceType" : "12" ,
53
- "appId" : "1180" ,
54
- "region" : self .region
55
87
}
56
88
params = {
57
89
"count" : str (count )
@@ -83,8 +115,6 @@ def getVideosByUserName(self, user_name, count=30):
83
115
"maxCursor" : "0" ,
84
116
"minCursor" : "0" ,
85
117
"sourceType" : "8" ,
86
- "appId" : "1180" ,
87
- "region" : self .region
88
118
}
89
119
params = {
90
120
"id" : user_id ,
@@ -109,8 +139,6 @@ def getLikesByUserName(self, user_name, count=30):
109
139
"maxCursor" : "0" ,
110
140
"minCursor" : "0" ,
111
141
"sourceType" : "9" ,
112
- "appId" : "1180" ,
113
- "region" : self .region
114
142
}
115
143
params = {
116
144
"id" : user_id ,
0 commit comments