Skip to content

Commit 20505e2

Browse files
committed
Adding User Likes, get Videos by Hashtags, Music
1 parent 555f95b commit 20505e2

File tree

6 files changed

+213
-13
lines changed

6 files changed

+213
-13
lines changed

TikTokAPI/tiktokapi.py

Lines changed: 113 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,18 @@ def __init__(self, language='en', region='IN', cookie=None):
2626
self.signature_key = "_signature"
2727
self.tiktok_browser = TikTokBrowser(self.user_agent)
2828

29-
def send_get_request(self, url, params):
29+
def send_get_request(self, url, params, extra_headers=None):
3030
url = build_get_url(url, params)
3131
signature = self.tiktok_browser.fetch_auth_params(url, language=self.language)
3232
url = build_get_url(url, {self.signature_key: signature}, append=True)
33+
if extra_headers is None:
34+
headers = self.headers
35+
else:
36+
headers = {}
37+
for key, val in extra_headers.items():
38+
headers[key] = val
39+
for key, val in self.headers.items():
40+
headers[key] = val
3341
data = get_req_json(url, params=None, headers=self.headers)
3442
return data
3543

@@ -63,7 +71,12 @@ def getUserByName(self, user_name):
6371
params[key] = val
6472
return self.send_get_request(url, params)
6573

66-
def getUserVideos(self, user_id, secUid, count=30):
74+
def getVideosByUserName(self, user_name, count=30):
75+
user_data = self.getUserByName(user_name)
76+
user_obj = user_data["userInfo"]["user"]
77+
user_id = user_obj["id"]
78+
secUid = user_obj["secUid"]
79+
6780
url = self.base_url + "/item_list/"
6881
req_default_params = {
6982
"type": "1",
@@ -83,3 +96,101 @@ def getUserVideos(self, user_id, secUid, count=30):
8396
for key, val in self.default_params.items():
8497
params[key] = val
8598
return self.send_get_request(url, params)
99+
100+
def getLikesByUserName(self, user_name, count=30):
101+
user_data = self.getUserByName(user_name)
102+
user_obj = user_data["userInfo"]["user"]
103+
user_id = user_obj["id"]
104+
secUid = user_obj["secUid"]
105+
106+
url = self.base_url + "/item_list/"
107+
req_default_params = {
108+
"type": "2",
109+
"maxCursor": "0",
110+
"minCursor": "0",
111+
"sourceType": "9",
112+
"appId": "1180",
113+
"region": self.region
114+
}
115+
params = {
116+
"id": user_id,
117+
"secUid": secUid,
118+
"count": str(count)
119+
}
120+
for key, val in req_default_params.items():
121+
params[key] = val
122+
for key, val in self.default_params.items():
123+
params[key] = val
124+
return self.send_get_request(url, params)
125+
126+
def getHashTag(self, hashTag):
127+
url = self.base_url + "/challenge/detail/"
128+
params = {
129+
"challengeName": hashTag.replace("#", "")
130+
}
131+
for key, val in self.default_params.items():
132+
params[key] = val
133+
return self.send_get_request(url, params)
134+
135+
def getVideosByHashTag(self, hashTag, count=30):
136+
hashTag = hashTag.replace("#", "")
137+
hashTag_obj = self.getHashTag(hashTag)
138+
hashTag_id = hashTag_obj["challengeInfo"]["challenge"]["id"]
139+
url = "https://m.tiktok.com/share/item/list"
140+
req_default_params = {
141+
"secUid": "",
142+
"type": "3",
143+
"minCursor": "0",
144+
"maxCursor": "0",
145+
"shareUid": "",
146+
"recType": ""
147+
}
148+
params = {
149+
"id": str(hashTag_id),
150+
"count": str(count),
151+
}
152+
for key, val in req_default_params.items():
153+
params[key] = val
154+
for key, val in self.default_params.items():
155+
params[key] = val
156+
extra_headers = {"Referer": "https://www.tiktok.com/tag/" + str(hashTag)}
157+
return self.send_get_request(url, params, extra_headers=extra_headers)
158+
159+
def getMusic(self, music_id):
160+
url = self.base_url + "/music/detail/"
161+
params = {
162+
"musicId": music_id
163+
}
164+
for key, val in self.default_params.items():
165+
params[key] = val
166+
return self.send_get_request(url, params)
167+
168+
def getVideosByMusic(self, music_id, count=30):
169+
url = "https://m.tiktok.com/share/item/list"
170+
req_default_params = {
171+
"secUid": "",
172+
"type": "4",
173+
"minCursor": "0",
174+
"maxCursor": "0",
175+
"shareUid": "",
176+
"recType": ""
177+
}
178+
params = {
179+
"id": str(music_id),
180+
"count": str(count),
181+
}
182+
for key, val in req_default_params.items():
183+
params[key] = val
184+
for key, val in self.default_params.items():
185+
params[key] = val
186+
extra_headers = {"Referer": "https://www.tiktok.com/music/original-sound-" + str(music_id)}
187+
return self.send_get_request(url, params, extra_headers=extra_headers)
188+
189+
def getVideoById(self, video_id):
190+
url = self.base_url + "/item/detail/"
191+
params = {
192+
"itemId": str(video_id)
193+
}
194+
for key, val in self.default_params.items():
195+
params[key] = val
196+
return self.send_get_request(url, params)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
long_description = fh.read()
55

66
setuptools.setup(
7-
name="TikTokAPI",
7+
name="TikTokAPI-Python",
88
version="0.0.1",
99
license='MIT',
1010
author="Avilash Kumar",

tests/test_hashtag.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import argparse
2+
from TikTokAPI import TikTokAPI
3+
4+
5+
def getHashTag(hashTag):
6+
api = TikTokAPI()
7+
return api.getHashTag(hashTag)
8+
9+
10+
def getVideosByHashTag(hashTag):
11+
api = TikTokAPI()
12+
return api.getVideosByHashTag(hashTag, count=10)
13+
14+
15+
if __name__ == "__main__":
16+
parser = argparse.ArgumentParser(description='')
17+
parser.add_argument('--data', dest='data', type=str, help='hashtag/videos')
18+
args = parser.parse_args()
19+
20+
var = "#fcbarcelona"
21+
if args.data == 'hashtag':
22+
retval = getHashTag(var)
23+
print(retval)
24+
elif args.data == 'videos':
25+
retval = getVideosByHashTag(var)
26+
print(retval)
27+
else:
28+
print("Invalid Argument")
29+

tests/test_music.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import argparse
2+
from TikTokAPI import TikTokAPI
3+
4+
5+
def getMusic(music_id):
6+
api = TikTokAPI()
7+
return api.getMusic(music_id)
8+
9+
10+
def getVideosByMusic(music_id):
11+
api = TikTokAPI()
12+
return api.getVideosByMusic(music_id, count=10)
13+
14+
15+
if __name__ == "__main__":
16+
parser = argparse.ArgumentParser(description='')
17+
parser.add_argument('--data', dest='data', type=str, help='music/videos')
18+
args = parser.parse_args()
19+
20+
var = "6704854531001289474"
21+
if args.data == 'music':
22+
retval = getMusic(var)
23+
print(retval)
24+
elif args.data == 'videos':
25+
retval = getVideosByMusic(var)
26+
print(retval)
27+
else:
28+
print("Invalid Argument")
29+

tests/test_user.py

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

3-
user = "fcbarcelona"
4-
print("Testing For User - {}".format(user))
5-
api = TikTokAPI()
6-
retval = api.getUserByName(user)
7-
print("User Details")
8-
print(retval)
9-
user_obj = retval["userInfo"]["user"]
10-
retval = api.getUserVideos(user_obj["id"], user_obj["secUid"], count=1)
11-
print("User Videos")
12-
print(retval)
4+
5+
def getUser(user_name):
6+
api = TikTokAPI()
7+
return api.getUserByName(user_name)
8+
9+
10+
def getVideosByUserName(user_name):
11+
api = TikTokAPI()
12+
return api.getVideosByUserName(user_name, count=1)
13+
14+
15+
def getLikesByUserName(user_name):
16+
api = TikTokAPI()
17+
return api.getLikesByUserName(user_name, count=1)
18+
19+
20+
if __name__ == "__main__":
21+
parser = argparse.ArgumentParser(description='')
22+
parser.add_argument('--data', dest='data', type=str, help='user/videos/likes')
23+
args = parser.parse_args()
24+
25+
var = "fcbarcelona"
26+
if args.data == 'user':
27+
retval = getUser(var)
28+
print(retval)
29+
elif args.data == 'videos':
30+
retval = getVideosByUserName(var)
31+
print(retval)
32+
elif args.data == 'likes':
33+
retval = getLikesByUserName(var)
34+
print(retval)
35+
else:
36+
print("Invalid Argument")

tests/test_video.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from TikTokAPI import TikTokAPI
2+
3+
4+
video_id = "6843481669886954757"
5+
api = TikTokAPI()
6+
video_obj = api.getVideoById(video_id)
7+
print(video_obj)

0 commit comments

Comments
 (0)