Skip to content
This repository was archived by the owner on Dec 1, 2024. It is now read-only.

Commit a631f90

Browse files
Add files via upload
1 parent 9096b22 commit a631f90

File tree

2 files changed

+346
-0
lines changed

2 files changed

+346
-0
lines changed

NumbusterAPI.py

Lines changed: 211 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,211 @@
1+
import requests
2+
import signatures
3+
4+
5+
class Numbuster:
6+
def __init__(self,access_token):
7+
self.access_token = access_token
8+
self.api_url = 'https://api.numbuster.com/api/'
9+
self.headers = {'Host': 'api.numbuster.com',
10+
'User-Agent': 'okhttp/3.9.1',
11+
'Accept-Encoding': 'gzip',
12+
'Connection': 'keep-alive'}
13+
14+
def v6_comment_list_my(self,offset:int,limit:int):
15+
timestamp = signatures.get_timestamp()
16+
cnonce = signatures.get_cnonce()
17+
signature = signatures.signature_v6_comment_list_my(self.access_token,cnonce,limit,offset,timestamp)
18+
url = self.api_url+f'v6/comment/list/my?offset={offset}&limit={limit}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}&access_token={self.access_token}'
19+
data = requests.get(url,headers=self.headers)
20+
return data.json()
21+
22+
def v6_comment_list(self,phone:str,offset:int,limit:int):
23+
timestamp = signatures.get_timestamp()
24+
cnonce = signatures.get_cnonce()
25+
signature = signatures.signature_v6_comment_list(self.access_token,cnonce,limit,offset,phone,timestamp)
26+
url = self.api_url+f'v6/comment/list?phone={phone}&offset={offset}&limit={limit}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}&access_token={self.access_token}'
27+
data = requests.get(url,headers=self.headers)
28+
return data.json()
29+
30+
def v6_comment_delete(self,phone:str):
31+
timestamp = signatures.get_timestamp()
32+
cnonce = signatures.get_cnonce()
33+
signature = signatures.signature_v6_comment_delete(self.access_token,cnonce,phone,timestamp)
34+
url = self.api_url+f'v6/comment/delete?phone={phone}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}&access_token={self.access_token}'
35+
data = requests.get(url,headers=self.headers)
36+
return data.json()
37+
38+
def v6_old_phone(self,phone,locale='RU'):
39+
timestamp = signatures.get_timestamp()
40+
cnonce = signatures.get_cnonce()
41+
signature = signatures.signature_v6_old_phone(phone,self.access_token,cnonce,timestamp,locale)
42+
url = self.api_url+f'v6/old/phone/{phone}?access_token={self.access_token}&locale={locale}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}'
43+
data = requests.get(url,headers=self.headers)
44+
return data.json()
45+
46+
def v6_notice_delete(self,phone):
47+
timestamp = signatures.get_timestamp()
48+
cnonce = signatures.get_cnonce()
49+
signature = signatures.signature_v6_notice_delete(self.access_token,cnonce,phone,timestamp)
50+
url = self.api_url+f'v6/notice/delete?phone={phone}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}&access_token={self.access_token}'
51+
data = requests.post(url,headers=self.headers)
52+
return data.json()
53+
54+
def v6_old_sms(self,phone,locale='RU'):
55+
timestamp = signatures.get_timestamp()
56+
cnonce = signatures.get_cnonce()
57+
signature = signatures.signature_v6_old_sms(phone,self.access_token,cnonce,timestamp,locale)
58+
url = self.api_url+f'v6/old/sms/{phone}?access_token={self.access_token}&locale={locale}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}'
59+
data = requests.get(url,headers=self.headers)
60+
return data.json()
61+
62+
def v6_report_comment(self,comment_id:int,report_text:str):
63+
url = self.api_url+f'v6/report/comment?comment_id={comment_id}&report_text={report_text}&access_token={self.access_token}'
64+
data = requests.post(url,headers=self.headers)
65+
return data.json()
66+
67+
def v6_numcy_subscription_comment_renewal(self,comment_id:int):
68+
timestamp = signatures.get_timestamp()
69+
cnonce = signatures.get_cnonce()
70+
signature = signatures.signature_v6_numcy_subscription_comment_renewal(self.access_token,cnonce,comment_id,timestamp)
71+
url = self.api_url+f'v6/numcy/subscription/comment/renewal?comment_id={comment_id}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}&access_token={self.access_token}'
72+
data = requests.post(url,headers=self.headers)
73+
return data.json()
74+
75+
def v6_auth_get(self,platform='Android',lang='RU'):
76+
timestamp = signatures.get_timestamp()
77+
cnonce = signatures.get_cnonce()
78+
signature = signatures.signature_v6_auth_get(cnonce,timestamp,lang,platform)
79+
url = self.api_url+f'v6/auth/get?platform={platform}&lang={lang}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}'
80+
data = requests.get(url,headers=self.headers)
81+
return data.json()
82+
83+
def v6_old_search(self,phone:str,locale='RU'):
84+
timestamp = signatures.get_timestamp()
85+
cnonce = signatures.get_cnonce()
86+
signature = signatures.signature_v6_old_search(phone,self.access_token,cnonce,timestamp,locale)
87+
url = self.api_url+f'v6/old/search/{phone}?access_token={self.access_token}&locale={locale}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}'
88+
data = requests.get(url,headers=self.headers)
89+
return data.json()
90+
91+
def v6_numcy_subscription_coment_cancel(self,comment_id:int):
92+
timestamp = signatures.get_timestamp()
93+
cnonce = signatures.get_cnonce()
94+
signature = signatures.signature_v6_numcy_subscription_comment_cancel(self.access_token,cnonce,comment_id,timestamp)
95+
url = self.api_url+f'v6/numcy/subscription/comment/cancel?comment_id={comment_id}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}&access_token={self.access_token}'
96+
data = requests.post(url,headers=self.headers)
97+
return data.json()
98+
99+
def v6_dailyquest_get(self):
100+
timestamp = signatures.get_timestamp()
101+
cnonce = signatures.get_cnonce()
102+
signature = signatures.signature_v6_dailyquest_get(self.access_token,cnonce,timestamp)
103+
url = self.api_url+f'v6/dailyquest/get?timestamp={timestamp}&signature={signature}&cnonce={cnonce}&access_token={self.access_token}'
104+
data = requests.get(url,headers=self.headers)
105+
return data.json()
106+
107+
def v6_auth_facebook(self,facebook_token,code):
108+
timestamp = signatures.get_timestamp()
109+
cnonce = signatures.get_cnonce()
110+
signature = signatures.signature_v6_auth_facebook(cnonce,code,facebook_token,timestamp)
111+
url = self.api_url+f'v6/auth/facebook?facebook_token={facebook_token}&code={code}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}'
112+
data = requests.post(url,headers=self.headers)
113+
return data.json()
114+
115+
def v6_old_profiles_by_phone(self,phone:str,locale='RU'):
116+
timestamp = signatures.get_timestamp()
117+
cnonce = signatures.get_cnonce()
118+
signature = signatures.signature_v6_old_profiles_by_phone(phone,self.access_token,cnonce,timestamp,locale)
119+
url = self.api_url+f'v6/old/profiles/by_phone/{phone}?access_token={self.access_token}&locale={locale}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}'
120+
data = requests.get(url,headers=self.headers)
121+
return data.json()
122+
123+
def v6_numcy_balance(self):
124+
timestamp = signatures.get_timestamp()
125+
cnonce = signatures.get_cnonce()
126+
signature = signatures.signature_v6_numcy_balance(self.access_token,cnonce,timestamp)
127+
url = self.api_url+f'v6/numcy/balance?timestamp={timestamp}&signature={signature}&cnonce={cnonce}&access_token={self.access_token}'
128+
data = requests.get(url,headers=self.headers)
129+
return data.json()
130+
131+
def v6_numcy_subcription_comment_settings(self):
132+
timestamp = signatures.get_timestamp()
133+
cnonce = signatures.get_cnonce()
134+
signature = signatures.signature_v6_numcy_subscription_comment_settings(self.access_token,cnonce,timestamp)
135+
url = self.api_url+f'v6/numcy/subscription/comment/settings?timestamp={timestamp}&signature={signature}&cnonce={cnonce}&access_token={self.access_token}'
136+
data = requests.get(url,headers=self.headers)
137+
return data.json()
138+
139+
def v6_comment_add(self,phone:str,text:str):
140+
text_u = signatures.to_url(text)
141+
timestamp = signatures.get_timestamp()
142+
cnonce = signatures.get_cnonce()
143+
signature = signatures.signature_v6_comment_add(self.access_token,cnonce,phone,text_u,timestimp)
144+
url = self.api_url+f'v6/comment/add?phone={phone}&text={text}&timestime={timestamp}&signature={signature}&cnonce={cnonce}&access_token={self.access_token}'
145+
data = requests.post(url,headers=self.headers)
146+
return data.json()
147+
148+
def v6_auth_agreement(self,phone:str):
149+
timestamp = signatures.get_timestamp()
150+
cnonce = signatures.get_cnonce()
151+
signature = signatures.signature_v6_auth_agreement(cnonce,phone,timestamp)
152+
url = self.api_url+f'v6/auth/agreement?phone={phone}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}'
153+
data = requests.post(url,headers=self.headers)
154+
return data.json()
155+
156+
def v6_comment_edit(self,phone:str,text:str):
157+
text_u = signatures.to_url(text)
158+
timestamp = signatures.get_timestamp()
159+
cnonce = signatures.get_cnonce()
160+
signature = signatures.signature_v6_comment_edit(self.access_token,cnonce,phone,text_u,timestamp)
161+
url = self.api_url+f'v6/comment/edit?phone={phone}&text={text}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}&access_token={self.access_token}'
162+
data = requests.post(url,headers=self.headers)
163+
return data.json()
164+
165+
def v6_dailyquest_calendar(self):
166+
timestamp = signatures.get_timestamp()
167+
cnonce = signatures.get_cnonce()
168+
signature = signatures.signature_v6_dailyquest_calendar(self.access_token,cnonce,timestamp)
169+
url = self.api_url+f'v6/dailyquest/calendar?timestamp={timestamp}&signature={signature}&cnonce={cnonce}&access_token={self.access_token}'
170+
data = requests.get(url,headers=self.headers)
171+
return data.json()
172+
173+
def v6_notice_add(self,phone,text:str):
174+
text_u = signatures.to_url(text)
175+
timestamp = signatures.get_timestamp()
176+
cnonce = signatures.get_cnonce()
177+
signature = signatures.signature_v6_notice_add(self.access_token,cnonce,phone,text_u,timestamp)
178+
url = self.api_url+f'v6/notice/add?phone={phone}&text={text}&timestime={timestamp}&signature={signature}&cnonce={cnonce}&access_token={self.access_token}'
179+
data = requests.post(url,headers=self.headers)
180+
return data.json()
181+
182+
def v6_auth_agreement_code(self,code:str):
183+
timestamp = signatures.get_timestamp()
184+
cnonce = signatures.get_cnonce()
185+
signature = signatures.signature_v6_auth_agreement_code(cnonce,code,timestamp)
186+
url = self.api_url+f'v6/auth/agreement_code?code={code}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}'
187+
data = requests.post(url,headers=self.headers)
188+
return data.json()
189+
190+
def v6_notice_edit(self,phone:str,text:str):
191+
text_u = signatures.to_url(text)
192+
timestamp = signatures.get_timestamp()
193+
cnonce = signatures.get_cnonce()
194+
signature = signatures.signature_v6_notice_edit(self.access_token,cnonce,phone,text_u,timestamp)
195+
url = self.api_url+f'v6/notice/edit?phone={phone}&text={text}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}&access_token={self.access_token}'
196+
data = requests.post(url,headers=self.headers)
197+
return data.json()
198+
199+
def v6_auth_check(self,code:str):
200+
timestamp = signatures.get_timestamp()
201+
cnonce = signatures.get_cnonce()
202+
signature = signatures.signature_v6_auth_check(cnonce,code,timestamp)
203+
url = self.api_url+f'v6/auth/check?code={code}&timestamp={timestamp}&signature={signature}&cnonce={cnonce}'
204+
data = requests.get(url,headers=self.headers)
205+
return data.json()
206+
207+
208+
209+
if __name__ == '__main__':
210+
api = Numbuster('access_token')
211+

signatures.py

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
import hashlib
2+
import random
3+
import time
4+
import urllib
5+
6+
RANDOMISE_CNONCE = True
7+
8+
def get_cnonce() -> str:
9+
if RANDOMISE_CNONCE:
10+
buf = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
11+
cnonce = ''
12+
length = random.randint(0,19) + 30
13+
for i in range(50):
14+
cnonce += random.choice(buf)
15+
else:
16+
cnonce = 'o5oorrrlBlbWKHRVuH7lBQdVCQEVKeXeTkAyA9H6FY8DT904sq'
17+
18+
return cnonce
19+
20+
def crypt(inp:str):
21+
#sha256 alg + sol
22+
sol = '0woz2wTimes9izs0vFQjLmwqqSzAPNFtmWNcbOL6xJva5Molyb'#Fucking sol
23+
return hashlib.sha256(bytes(inp+sol,'utf-8')).hexdigest()
24+
25+
def get_timestamp()->str:
26+
return str(int(time.time()))
27+
28+
def to_url(input:str):
29+
30+
return urllib.quote(input.encode('utf-8')).replace('\\+','%20')
31+
32+
def signature_v6_numcy_subscription_comment_add(access_token:str,cnonce:str,comment_id:int,timestamp:str):
33+
source = 'POSTapi.numbuster.com/api/v6/numcy/subscription/comment/addaccess_token='+access_token+'&cnonce='+cnonce+'&comment_id='+str(comment_id)+'&timestamp='+timestamp
34+
return crypt(source)
35+
36+
def signature_v6_dailyquest_get(access_token:str,cnonce:str,timestamp:str):
37+
source = 'GETapi.numbuster.com/api/v6/dailyquest/getaccess_token='+access_token+'&cnonce='+cnonce+'&timestamp='+timestamp
38+
return crypt(source)
39+
40+
def signature_v6_comment_list_my(access_token:str,cnonce:str,limit:int,offset:int,timestamp:str):
41+
source = 'GETapi.numbuster.com/api/v6/comment/list/myaccess_token='+access_token+'&cnonce='+cnonce+'&limit='+str(limit)+'&offset='+str(offset)+'&timestamp='+timestamp
42+
return crypt(source)
43+
44+
def signature_v6_comment_list(access_token:str,cnonce:str,limit:int,offset:int,phone:str,timestamp:str):
45+
source = 'GETapi.numbuster.com/api/v6/comment/listaccess_token='+access_token+'&cnonce='+cnonce+'&limit='+str(limit)+'&offset='+str(offset)+'&phone='+phone+'&timestamp='+timestamp
46+
return crypt(source)
47+
48+
def signature_v6_dailyquest_result_final(access_token:str,cnonce:str,daily_quest_id:int,timestamp:str):
49+
source = 'GETapi.numbuster.com/api/v6/dailyquest/result/finalaccess_token='+access_token+'&cnonce='+cnonce+'&daily_quest_id='+str(daily_quest_id)+'&timestamp='+timestamp
50+
return crypt(source)
51+
52+
def signature_v6_dailyquest_result(access_token:str,cnonce:str,daily_quest_id:int,opened_item:int,result_number:int,timestamp:str):
53+
source = 'POSTapi.numbuster.com/api/v6/dailyquest/resultaccess_token='+access_token+'&cnonce='+cnonce+'&daily_quest_id='+str(daily_quest_id)+'&opened_item='+str(opened_item)+'&result_number='+str(result_number)+'&timestamp='+timestamp
54+
return crypt(source)
55+
56+
def signature_v6_comment_delete(access_token:str,cnonce:str,phone:str,timestamp:str):
57+
source = 'POSTapi.numbuster.com/api/v6/comment/deleteaccess_token='+access_token+'&cnonce='+cnonce+'&phone='+phone+'&timestamp='+timestamp
58+
return crypt(source)
59+
60+
def signature_v6_comment_add(access_token:str,cnonce:str,phone:str,text:str,timestamp:str):
61+
source = 'POSTapi.numbuster.com/api/v6/comment/addaccess_token='+access_token+'&cnonce='+cnonce+'&phone='+phone+'&text='+text+'&timestamp='+timestamp
62+
return crypt(source)
63+
64+
def signature_v6_numcy_subscription_comment_renewal(access_token:str,cnonce:str,comment_id:int,timestamp:str):
65+
source = 'POSTapi.numbuster.com/api/v6/numcy/subscription/comment/renewalaccess_token='+access_token+'&cnonce='+cnonce+'&comment_id='+str(comment_id)+'&timestamp='+timestamp
66+
return crypt(source)
67+
68+
def signature_v6_numcy_balance(access_token:str,cnonce:str,timestamp:str):
69+
source = 'GETapi.numbuster.com/api/v6/numcy/balanceaccess_token='+access_token+'&cnonce='+cnonce+'&timestamp='+timestamp
70+
return crypt(source)
71+
72+
def signature_v6_notice_delete(access_token:str,cnonce:str,phone:str,timestamp:str):
73+
source = 'POSTapi.numbuster.com/api/v6/notice/deleteaccess_token='+access_token+'&cnonce='+cnonce+'&phone='+phone+'&timestamp='+timestamp
74+
return crypt(source)
75+
76+
def signature_v6_comment_edit(access_token:str,cnonce:str,phone:str,text:str,timestamp:str):
77+
source = 'POSTapi.numbuster.com/api/v6/comment/editaccess_token='+access_token+'&cnonce='+cnonce+'&phone='+phone+'&text='+text+'&timestamp='+timestamp
78+
return crypt(source)
79+
80+
def signature_v6_auth_get(cnonce:str,timestamp:str,lang='RU',platform='Android'):
81+
source = 'GETapi.numbuster.com/api/v6/auth/getcnonce='+cnonce+'&lang='+lang+'&platform='+platform+'&timestamp='+timestamp
82+
return crypt(source)
83+
84+
def signature_v6_old_phone(phone:str,access_token:str,cnonce:str,timestamp:str,locale='RU'):
85+
source = 'GETapi.numbuster.com/api/v6/old/phone/'+phone+'access_token='+access_token+'&cnonce='+cnonce+'&locale='+locale+'&timestamp='+timestamp
86+
return crypt(source)
87+
88+
def signature_v6_auth_agreement(cnonce:str,phone:str,timestamp:str):
89+
source = 'POSTapi.numbuster.com/api/v6/auth/agreementcnonce='+cnonce+'&phone='+phone+'&timestamp='+timestamp
90+
return crypt(source)
91+
92+
def signature_v6_auth_facebook(cnonce:str,code:str,facebook_token:str,timestamp:str):
93+
source = 'POSTapi.numbuster.com/api/v6/auth/facebookcnonce='+cnonce+'&code='+code+'&facebook_token='+facebook_token+'&timestamp'+timestamp
94+
return crypt(source)
95+
96+
def signature_v6_old_sms(phone:str,access_token:str,cnonce:str,timestamp:str,locale:'RU'):
97+
source = 'GETapi.numbuster.com/api/v6/old/sms/'+phone+'access_token='+access_token+'&cnonce='+cnonce+'&locale='+locale+'&timestamp='+timestamp
98+
return crypt(source)
99+
100+
def signature_v6_dailyquest_calendar(access_token:str,cnonce:str,timestamp:str):
101+
source = 'GETapi.numbuster.com/api/v6/dailyquest/calendaraccess_token='+access_token+'&cnonce='+cnonce+'&timestamp='+timestamp
102+
return crypt(source)
103+
104+
def signature_v6_old_search(phone:str,access_token:str,cnonce:str,timestamp:str,locale='RU'):
105+
source = 'GETapi.numbuster.com/api/v6/old/search/'+phone+'access_token='+access_token+'&cnonce='+cnonce+'&locale='+locale+'&timestamp='+timestamp
106+
return crypt(source)
107+
108+
def signature_v6_auth_agreement_code(cnonce:str,code:str,timestamp:str):
109+
source = 'POSTapi.numbuster.com/api/v6/auth/agreement_codecnonce='+cnonce+'&code='+code+'&timestamp='+timestamp
110+
return crypt(source)
111+
112+
def signature_v6_old_profiles_by_phone(phone:str,access_token:str,cnonce:str,timestamp:str,locale='RU'):
113+
source = 'GETapi.numbuster.com/api/v6/old/profiles/by_phone/'+phone+'access_token='+access_token+'&cnonce='+cnonce+'&locale='+locale+'&timestamp='+timestamp
114+
return crypt(source)
115+
116+
def signature_v6_auth_check(cnonce:str,code:str,timestamp:str):
117+
source = 'GETapi.numbuster.com/api/v6/auth/checkcnonce='+cnonce+'&code='+code+'&timestamp='+timestamp
118+
return crypt(source)
119+
120+
def signature_v6_notice_add(access_token:str,cnonce:str,phone:str,text:str,timestamp:str):
121+
source = 'POSTapi.numbuster.com/api/v6/notice/addaccess_token='+access_token+'&cnonce='+cnonce+'&phone='+phone+'&text='+text+'&timestamp='+timestamp
122+
return crypt(source)
123+
124+
def signature_v6_notice_edit(access_token:str,cnonce:str,phone:str,text,timestamp:str):
125+
source = 'POSTapi.numbuster.com/api/v6/notice/editaccess_token='+access_token+'&cnonce='+cnonce+'&phone='+phone+'&text='+text+'&timestamp='+timestamp
126+
return crypt(source)
127+
128+
def signature_v6_numcy_subscription_comment_cancel(access_token:str,cnonce:str,comment_id:int,timestamp:str):
129+
source = 'POSTapi.numbuster.com/api/v6/numcy/subscription/comment/cancelaccess_token='+access_token+'&cnonce='+cnonce+'&comment_id='+str(comment_id)+'&timestamp='+timestamp
130+
return crypt(source)
131+
132+
def signature_v6_numcy_subscription_comment_settings(access_token:str,cnonce:str,timestamp:str):
133+
source = 'GETapi.numbuster.com/api/v6/numcy/subscription/comment/settingsaccess_token='+access_token+'&cnonce='+cnonce+'&timestamp='+timestamp
134+
return crypt(source)
135+

0 commit comments

Comments
 (0)