diff --git a/TikTokApi/browser.py b/TikTokApi/browser.py
index e6892c38..14752df9 100644
--- a/TikTokApi/browser.py
+++ b/TikTokApi/browser.py
@@ -7,11 +7,13 @@
import time
import datetime
import random
+import json
+from urllib.parse import splitquery, parse_qs, parse_qsl
# Import Detection From Stealth
from .stealth import stealth
-from .get_acrawler import get_acrawler
+from .get_acrawler import get_acrawler, get_tt_params_script
from playwright.sync_api import sync_playwright
playwright = None
@@ -116,6 +118,8 @@ def create_context(self, set_useragent=False):
iphone["is_mobile"] = random.randint(1, 2) == 1
iphone["has_touch"] = random.randint(1, 2) == 1
+ iphone['bypass_csp'] = True
+
context = self.browser.new_context(**iphone)
if set_useragent:
self.userAgent = iphone["user_agent"]
@@ -165,6 +169,9 @@ def sign_url(self, **kwargs):
raise Exception("sign_url required a url parameter")
context = self.create_context()
page = context.new_page()
+
+ page.goto(kwargs.get('default_url', 'https://www.tiktok.com/@redbull'), wait_until='load')
+
verifyFp = "".join(
random.choice(
string.ascii_lowercase + string.ascii_uppercase + string.digits
@@ -186,25 +193,36 @@ def sign_url(self, **kwargs):
else:
device_id = self.device_id
- page.set_content("")
+ url = '{}&verifyFp={}&device_id={}'.format(url, verifyFp, device_id)
+
+ page.add_script_tag(content=get_acrawler())
evaluatedPage = page.evaluate(
'''() => {
var url = "'''
+ url
- + "&verifyFp="
- + verifyFp
- + """&device_id="""
- + device_id
+ """"
var token = window.byted_acrawler.sign({url: url});
+
return token;
}"""
)
+
+ url = '{}&_signature={}'.format(url, evaluatedPage)
+ page.add_script_tag(content=get_tt_params_script())
+
+ tt_params = page.evaluate(
+ '''() => {
+ return window.genXTTParams(''' + json.dumps(dict(parse_qsl(splitquery(url)[1]))) + ''');
+
+ }'''
+ )
+
context.close()
return (
verifyFp,
device_id,
evaluatedPage,
+ tt_params
)
def clean_up(self):
diff --git a/TikTokApi/get_acrawler.py b/TikTokApi/get_acrawler.py
index 64a24588..f1a51f16 100644
--- a/TikTokApi/get_acrawler.py
+++ b/TikTokApi/get_acrawler.py
@@ -1,2 +1,6 @@
+def get_tt_params_script():
+ return """var CryptoJS=CryptoJS||function(e,t){var r={},n=r.lib={},i=n.Base=function(){function e(){}return{extend:function(t){e.prototype=this;var r=new e;return t&&r.mixIn(t),r.hasOwnProperty("init")&&this.init!==r.init||(r.init=function(){r.$super.init.apply(this,arguments)}),r.init.prototype=r,r.$super=this,r},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),c=n.WordArray=i.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||f).stringify(this)},concat:function(e){var t=this.words,r=e.words,n=this.sigBytes,i=e.sigBytes;if(this.clamp(),n%4)for(var c=0;c>>2]>>>24-c%4*8&255;t[n+c>>>2]|=o<<24-(n+c)%4*8}else if(r.length>65535)for(c=0;c>>2]=r[c>>>2];else t.push.apply(t,r);return this.sigBytes+=i,this},clamp:function(){var t=this.words,r=this.sigBytes;t[r>>>2]&=4294967295<<32-r%4*8,t.length=e.ceil(r/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var r,n=[],i=function(t){t=t;var r=987654321,n=4294967295;return function(){var i=((r=36969*(65535&r)+(r>>16)&n)<<16)+(t=18e3*(65535&t)+(t>>16)&n)&n;return i/=4294967296,(i+=.5)*(e.random()>.5?1:-1)}},o=0;o>>2]>>>24-i%4*8&255;n.push((c>>>4).toString(16)),n.push((15&c).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,r=[],n=0;n>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new c.init(r,t/2)}},a=o.Latin1={stringify:function(e){for(var t=e.words,r=e.sigBytes,n=[],i=0;i>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(c))}return n.join("")},parse:function(e){for(var t=e.length,r=[],n=0;n>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new c.init(r,t)}},s=o.Utf8={stringify:function(e){try{return decodeURIComponent(escape(a.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return a.parse(unescape(encodeURIComponent(e)))}},u=n.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=s.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var r=this._data,n=r.words,i=r.sigBytes,o=this.blockSize,f=i/(4*o),a=(f=t?e.ceil(f):e.max((0|f)-this._minBufferSize,0))*o,s=e.min(4*a,i);if(a){for(var u=0;u>>2]>>>24-c%4*8&255)<<16|(t[c+1>>>2]>>>24-(c+1)%4*8&255)<<8|t[c+2>>>2]>>>24-(c+2)%4*8&255,f=0;f<4&&c+.75*f>>6*(3-f)&63));var a=n.charAt(64);if(a)for(;i.length%4;)i.push(a);return i.join("")},parse:function(e){var r=e.length,n=this._map,i=this._reverseMap;if(!i){i=this._reverseMap=[];for(var c=0;c>>6-o%4*2;i[c>>>2]|=(f|a)<<24-c%4*8,c++}return t.create(i,c)}(e,r,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),CryptoJS.lib.Cipher||function(e){var t=CryptoJS,r=t.lib,n=r.Base,i=r.WordArray,c=r.BufferedBlockAlgorithm,o=t.enc,f=(o.Utf8,o.Base64),a=t.algo.EvpKDF,s=r.Cipher=c.extend({cfg:n.extend(),createEncryptor:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)},createDecryptor:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)},init:function(e,t,r){this.cfg=this.cfg.extend(r),this._xformMode=e,this._key=t,this.reset()},reset:function(){c.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){return e&&this._append(e),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function e(e){return"string"==typeof e?_:v}return function(t){return{encrypt:function(r,n,i){return e(n).encrypt(t,r,n,i)},decrypt:function(r,n,i){return e(n).decrypt(t,r,n,i)}}}}()}),u=(r.StreamCipher=s.extend({_doFinalize:function(){return this._process(!0)},blockSize:1}),t.mode={}),d=r.BlockCipherMode=n.extend({createEncryptor:function(e,t){return this.Encryptor.create(e,t)},createDecryptor:function(e,t){return this.Decryptor.create(e,t)},init:function(e,t){this._cipher=e,this._iv=t}}),l=u.CBC=function(){var t=d.extend();function r(t,r,n){var i=this._iv;if(i){var c=i;this._iv=e}else c=this._prevBlock;for(var o=0;o>>2];e.sigBytes-=t}},h=(r.BlockCipher=s.extend({cfg:s.cfg.extend({mode:l,padding:p}),reset:function(){s.reset.call(this);var e=this.cfg,t=e.iv,r=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=r.createEncryptor;else{n=r.createDecryptor;this._minBufferSize=1}this._mode&&this._mode.__creator==n?this._mode.init(this,t&&t.words):(this._mode=n.call(r,this,t&&t.words),this._mode.__creator=n)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else{t=this._process(!0);e.unpad(t)}return t},blockSize:4}),r.CipherParams=n.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}})),y=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext,r=e.salt;if(r)var n=i.create([1398893684,1701076831]).concat(r).concat(t);else n=t;return n.toString(f)},parse:function(e){var t=f.parse(e),r=t.words;if(1398893684==r[0]&&1701076831==r[1]){var n=i.create(r.slice(2,4));r.splice(0,4),t.sigBytes-=16}return h.create({ciphertext:t,salt:n})}},v=r.SerializableCipher=n.extend({cfg:n.extend({format:y}),encrypt:function(e,t,r,n){n=this.cfg.extend(n);var i=e.createEncryptor(r,n),c=i.finalize(t),o=i.cfg;return h.create({ciphertext:c,key:r,iv:o.iv,algorithm:e,mode:o.mode,padding:o.padding,blockSize:e.blockSize,formatter:n.format})},decrypt:function(e,t,r,n){return n=this.cfg.extend(n),t=this._parse(t,n.format),e.createDecryptor(r,n).finalize(t.ciphertext)},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}}),b=(t.kdf={}).OpenSSL={execute:function(e,t,r,n){n||(n=i.random(8));var c=a.create({keySize:t+r}).compute(e,n),o=i.create(c.words.slice(t),4*r);return c.sigBytes=4*t,h.create({key:c,iv:o,salt:n})}},_=r.PasswordBasedCipher=v.extend({cfg:v.cfg.extend({kdf:b}),encrypt:function(e,t,r,n){var i=(n=this.cfg.extend(n)).kdf.execute(r,e.keySize,e.ivSize);n.iv=i.iv;var c=v.encrypt.call(this,e,t,i.key,n);return c.mixIn(i),c},decrypt:function(e,t,r,n){n=this.cfg.extend(n),t=this._parse(t,n.format);var i=n.kdf.execute(r,e.keySize,e.ivSize,t.salt);return n.iv=i.iv,v.decrypt.call(this,e,t,i.key,n)}})}(),CryptoJS.mode.ECB=function(){var e=CryptoJS.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),function(){var e=CryptoJS,t=e.lib.BlockCipher,r=e.algo,n=[],i=[],c=[],o=[],f=[],a=[],s=[],u=[],d=[],l=[];!function(){for(var e=[],t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;var r=0,p=0;for(t=0;t<256;t++){var h=p^p<<1^p<<2^p<<3^p<<4;h=h>>>8^255&h^99,n[r]=h,i[h]=r;var y=e[r],v=e[y],b=e[v],_=257*e[h]^16843008*h;c[r]=_<<24|_>>>8,o[r]=_<<16|_>>>16,f[r]=_<<8|_>>>24,a[r]=_;_=16843009*b^65537*v^257*y^16843008*r;s[h]=_<<24|_>>>8,u[h]=_<<16|_>>>16,d[h]=_<<8|_>>>24,l[h]=_,r?(r=y^e[e[e[b^y]]],p^=e[e[p]]):r=p=1}}();var p=[0,1,2,4,8,16,32,64,128,27,54],h=r.AES=t.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,t=e.words,r=e.sigBytes/4,i=4*((this._nRounds=r+6)+1),c=this._keySchedule=[],o=0;o6&&o%r==4&&(f=n[f>>>24]<<24|n[f>>>16&255]<<16|n[f>>>8&255]<<8|n[255&f]):(f=n[(f=f<<8|f>>>24)>>>24]<<24|n[f>>>16&255]<<16|n[f>>>8&255]<<8|n[255&f],f^=p[o/r|0]<<24),c[o]=c[o-r]^f}for(var a=this._invKeySchedule=[],h=0;h>>24]]^u[n[f>>>16&255]]^d[n[f>>>8&255]]^l[n[255&f]]}}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,c,o,f,a,n)},decryptBlock:function(e,t){var r=e[t+1];e[t+1]=e[t+3],e[t+3]=r,this._doCryptBlock(e,t,this._invKeySchedule,s,u,d,l,i);r=e[t+1];e[t+1]=e[t+3],e[t+3]=r},_doCryptBlock:function(e,t,r,n,i,c,o,f){for(var a=this._nRounds,s=e[t]^r[0],u=e[t+1]^r[1],d=e[t+2]^r[2],l=e[t+3]^r[3],p=4,h=1;h>>24]^i[u>>>16&255]^c[d>>>8&255]^o[255&l]^r[p++],v=n[u>>>24]^i[d>>>16&255]^c[l>>>8&255]^o[255&s]^r[p++],b=n[d>>>24]^i[l>>>16&255]^c[s>>>8&255]^o[255&u]^r[p++],_=n[l>>>24]^i[s>>>16&255]^c[u>>>8&255]^o[255&d]^r[p++];s=y,u=v,d=b,l=_}y=(f[s>>>24]<<24|f[u>>>16&255]<<16|f[d>>>8&255]<<8|f[255&l])^r[p++],v=(f[u>>>24]<<24|f[d>>>16&255]<<16|f[l>>>8&255]<<8|f[255&s])^r[p++],b=(f[d>>>24]<<24|f[l>>>16&255]<<16|f[s>>>8&255]<<8|f[255&u])^r[p++],_=(f[l>>>24]<<24|f[s>>>16&255]<<16|f[u>>>8&255]<<8|f[255&d])^r[p++];e[t]=y,e[t+1]=v,e[t+2]=b,e[t+3]=_},keySize:8});e.AES=t._createHelper(h)}();var a,i={};i.CryptoJS=CryptoJS,window._$jsvmprt=function(e,t,r){function n(e,t,r){return(n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}()?Reflect.construct:function(e,t,r){var n=[null];n.push.apply(n,t);var i=new(Function.bind.apply(e,n));return r&&function(e,t){(Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}(i,r.prototype),i}).apply(null,arguments)}function i(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t>7==0)return[1,i];if(i>>6==2){var c=parseInt(""+e[++t]+e[++t],16);return i&=63,[2,c=(i<<=8)+c]}if(i>>6==3){var o=parseInt(""+e[++t]+e[++t],16),f=parseInt(""+e[++t]+e[++t],16);return i&=63,[3,f=(i<<=16)+(o<<=8)+f]}},u=function(e,t){var r=parseInt(""+e[t]+e[t+1],16);return r>127?-256+r:r},d=function(e,t){var r=parseInt(""+e[t]+e[t+1]+e[t+2]+e[t+3],16);return r>32767?-65536+r:r},l=function(e,t){var r=parseInt(""+e[t]+e[t+1]+e[t+2]+e[t+3]+e[t+4]+e[t+5]+e[t+6]+e[t+7],16);return r>2147483647?0+r:r},p=function(e,t){return parseInt(""+e[t]+e[t+1],16)},h=function(e,t){return parseInt(""+e[t]+e[t+1]+e[t+2]+e[t+3],16)},y=y||this||window,v=(Object.keys,e.length,0),b="",_=v;_>=2,O>2)O=3&B,B>>=2,O<1?(O=B)<4?(g=k[C--],k[C]=k[C]-g):O<6?(g=k[C--],k[C]=k[C]===g):O<15&&(g=k[C],k[C]=k[C-1],k[C-1]=g):O<2?(O=B)<5&&(x=p(e,w),w+=2,g=l[x],k[++C]=g):O<3?(O=B)<6||(O<8?g=k[C--]:O<12&&(x=d(e,w),f[++a]=[[w+4,x-3],0,0],w+=2*x-2)):(O=B)<2?(g=k[C--],k[C]=k[C]1)if(O=3&B,B>>=2,O>2)(O=B)>5?(x=p(e,w),w+=2,k[++C]=l["$"+x]):O>3&&(x=d(e,w),f[a][0]&&!f[a][2]?f[a][1]=[w+4,x-3]:f[a++]=[0,[w+4,x-3],0],w+=2*x-2);else if(O>1){if((O=B)>2)if(k[C--])w+=4;else{if((x=d(e,w))<0){_=1,X(e,t,2*r),w+=2*x-2;break}w+=2*x-2}else if(O>0){for(x=h(e,w),g="",A=c.q[x][0];A0?(O=B)>1?(g=k[C--],k[C]=k[C]+g):O>-1&&(k[++C]=y):(O=B)>9?(x=p(e,w),w+=2,g=k[C--],l[x]=g):O>7?(x=h(e,w),w+=4,m=C+1,k[C-=x-1]=x?k.slice(C,m):[]):O>0&&(g=k[C--],k[C]=k[C]>g);else if(O>0){if(O=3&B,B>>=2,O<1){if((O=B)>9);else if(O>5)x=p(e,w),w+=2,k[C-=x]=0===x?new k[C]:n(k[C],i(k.slice(C+1,C+x+1)));else if(O>3){x=d(e,w);try{if(f[a][2]=1,1==(g=N(e,w+4,x-3,[],l,v,null,0))[0])return g}catch(b){if(f[a]&&f[a][1]&&1==(g=N(e,f[a][1][0],f[a][1][1],[],l,v,b,0))[0])return g}finally{if(f[a]&&f[a][0]&&1==(g=N(e,f[a][0][0],f[a][0][1],[],l,v,null,0))[0])return g;f[a]=0,a--}w+=2*x-2}}else if(O<2){if((O=B)>12)k[++C]=u(e,w),w+=2;else if(O>8){for(x=h(e,w),O="",A=c.q[x][0];A11?(g=k[C],k[++C]=g):O>0&&(k[++C]=g);else if((O=B)<1)k[C]=!k[C];else if(O<3){if((x=d(e,w))<0){_=1,X(e,t,2*r),w+=2*x-2;break}w+=2*x-2}}else if(O=3&B,B>>=2,O>2)(O=B)<1&&(k[++C]=null);else if(O>1){if((O=B)<9){for(g=k[C--],x=h(e,w),O="",A=c.q[x][0];A0)(O=B)<4?(m=k[C--],(O=k[C]).x===N?O.y>=1?k[C]=U(e,O.c,O.l,[m],O.z,S,null,1):(k[C]=U(e,O.c,O.l,[m],O.z,S,null,0),O.y++):k[C]=O(m)):O<6&&(k[C-=1]=k[C][k[C+1]]);else{if((O=B)<1)return[1,k[C--]];O<14?(m=k[C--],S=k[C--],(O=k[C--]).x===N?O.y>=1?k[++C]=U(e,O.c,O.l,m,O.z,S,null,1):(k[++C]=U(e,O.c,O.l,m,O.z,S,null,0),O.y++):k[++C]=O.apply(S,m)):O<16&&(x=d(e,w),(I=function t(){var r=arguments;return t.y>0||t.y++,U(e,t.c,t.l,r,t.z,this,null,0)}).c=w+4,I.l=x-2,I.x=N,I.y=0,I.z=l,k[C]=I,w+=2*x-2)}}if(_)for(;w>=2,O<1)if(O=3&B,B>>=2,O>2)(O=B)<1&&(k[++C]=null);else if(O>1){if((O=B)<9){for(g=k[C--],x=$[w],O="",A=c.q[x][0];A0)(O=B)<4?(m=k[C--],(O=k[C]).x===N?O.y>=1?k[C]=U(e,O.c,O.l,[m],O.z,S,null,1):(k[C]=U(e,O.c,O.l,[m],O.z,S,null,0),O.y++):k[C]=O(m)):O<6&&(k[C-=1]=k[C][k[C+1]]);else{var I;if((O=B)>14)x=$[w],(I=function t(){var r=arguments;return t.y>0||t.y++,U(e,t.c,t.l,r,t.z,this,null,0)}).c=w+4,I.l=x-2,I.x=N,I.y=0,I.z=l,k[C]=I,w+=2*x-2;else if(O>12)m=k[C--],S=k[C--],(O=k[C--]).x===N?O.y>=1?k[++C]=U(e,O.c,O.l,m,O.z,S,null,1):(k[++C]=U(e,O.c,O.l,m,O.z,S,null,0),O.y++):k[++C]=O.apply(S,m);else if(O>-1)return[1,k[C--]]}else if(O<2)if(O=3&B,B>>=2,O>2)(O=B)<1?k[C]=!k[C]:O<3&&(w+=2*(x=$[w])-2);else if(O>1)(O=B)<2?k[++C]=g:O<13&&(g=k[C],k[++C]=g);else if(O>0)if((O=B)<10){for(x=$[w],O="",A=c.q[x][0];A>=2,O<1)(O=B)>9?(x=$[w],w+=2,g=k[C--],l[x]=g):O>7?(x=$[w],w+=4,m=C+1,k[C-=x-1]=x?k.slice(C,m):[]):O>0&&(g=k[C--],k[C]=k[C]>g);else if(O<2)(O=B)>1?(g=k[C--],k[C]=k[C]+g):O>-1&&(k[++C]=y);else if(O<3)if((O=B)<2){for(x=$[w],g="",A=c.q[x][0];A5?(x=$[w],w+=2,k[++C]=l["$"+x]):O>3&&(x=$[w],f[a][0]&&!f[a][2]?f[a][1]=[w+4,x-3]:f[a++]=[0,[w+4,x-3],0],w+=2*x-2);else O=3&B,B>>=2,O<1?(O=B)<4?(g=k[C--],k[C]=k[C]-g):O<6?(g=k[C--],k[C]=k[C]===g):O<15&&(g=k[C],k[C]=k[C-1],k[C-1]=g):O<2?(O=B)<5&&(x=$[w],w+=2,g=l[x],k[++C]=g):O<3?(O=B)>10?(x=$[w],f[++a]=[[w+4,x-3],0,0],w+=2*x-2):O>6&&(g=k[C--]):(O=B)<2?(g=k[C--],k[C]=k[C]>=1,0==z.position&&(z.position=a,z.val=y(z.index,o|=(T>0?1:0)*r,r<<=1;switch(o){case 0:for(o=0,l=Math.pow(2,8),r=1;r!=l;)T=z.val&z.position,z.position>>=1,0==z.position&&(z.position=a,z.val=y(z.index,o|=(T>0?1:0)*r,r<<=1;k=K(o)1:for(o=0,l=Math.pow(2,16),r=1;r!=l;)T=z.val&z.position,z.position>>=1,0==z.position&&(z.position=a,z.val=y(z.index,o|=(T>0?1:0)*r,r<<=1;k=K(o)2:""}for(i[3]=k,m=k,b.push(k);;){if(z.index>S)"";for(o=0,l=Math.pow(2,j),r=1;r!=l;)T=z.val&z.position,z.position>>=1,0==z.position&&(z.position=a,z.val=y(z.index,o|=(T>0?1:0)*r,r<<=1;switch(k=o){case 0:for(o=0,l=Math.pow(2,8),r=1;r!=l;)T=z.val&z.position,z.position>>=1,0==z.position&&(z.position=a,z.val=y(z.index,o|=(T>0?1:0)*r,r<<=1;i[q]=K(o),k=q-1,J--1:for(o=0,l=Math.pow(2,16),r=1;r!=l;)T=z.val&z.position,z.position>>=1,0==z.position&&(z.position=a,z.val=y(z.index,o|=(T>0?1:0)*r,r<<=1;i[q]=K(o),k=q-1,J--2:b.join("")}if(0==J&&(J=Math.pow(2,j),j),i[k])I=i[k]if(k!==q)null;I=m+m.charAt(0)}b.push(I),i[q]=m+I.charAt(0),m=I,0==--J&&(J=Math.pow(2,j),j)}}};y};""==typeof define&&define.amd?define({w}):"undefined"!=typeof module&&null!=module?module.exports=w:"undefined"!=typeof angular&&null!=angular&&angular.module("w",[]).factory("w",{w}),eval(w.x("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";'.replace(/[-]/g,function(m){return t[m.charCodeAt(0)&15]})}("var function ().length++return ));break;case ;else{".split("")))();"""
diff --git a/TikTokApi/tiktok.py b/TikTokApi/tiktok.py
index 8369803a..8a134456 100644
--- a/TikTokApi/tiktok.py
+++ b/TikTokApi/tiktok.py
@@ -230,9 +230,10 @@ def get_data(self, **kwargs) -> dict:
else:
verifyFp = kwargs.get("custom_verifyFp")
+ tt_params = None
if self.signer_url is None:
kwargs["custom_verifyFp"] = verifyFp
- verify_fp, device_id, signature = self.browser.sign_url(**kwargs)
+ verify_fp, device_id, signature, tt_params = self.browser.sign_url(**kwargs)
userAgent = self.browser.userAgent
referrer = self.browser.referrer
else:
@@ -242,6 +243,10 @@ def get_data(self, **kwargs) -> dict:
verifyFp=kwargs.get("custom_verifyFp", verifyFp),
)
+ if not kwargs.get("send_tt_params", False):
+ tt_params = None
+
+
query = {"verifyFp": verify_fp, "device_id": device_id, "_signature": signature}
url = "{}&{}".format(kwargs["url"], urlencode(query))
@@ -273,6 +278,7 @@ def get_data(self, **kwargs) -> dict:
"sec-gpc": "1",
"user-agent": userAgent,
"x-secsdk-csrf-token": csrf_token,
+ "x-tt-params": tt_params
},
cookies=self.get_cookies(**kwargs),
proxies=self.__format_proxy(proxy),
@@ -663,7 +669,7 @@ def user_page(self, userID, secUID, page_size=30, cursor=0, **kwargs) -> dict:
)
)
- return self.get_data(url=api_url, **kwargs)
+ return self.get_data(url=api_url, send_tt_params=True, **kwargs)
def get_user_pager(self, username, page_size=30, cursor=0, **kwargs):
"""Returns a generator to page through a user's feed
@@ -846,7 +852,7 @@ def by_sound(self, id, count=30, offset=0, **kwargs) -> dict:
BASE_URL, self.__add_url_params__(), urlencode(query)
)
- res = self.get_data(url=api_url, **kwargs)
+ res = self.get_data(url=api_url, send_tt_params=True, **kwargs)
try:
for t in res["items"]:
@@ -1696,4 +1702,4 @@ def __process_kwargs__(self, kwargs):
device_id = self.custom_device_id
else:
device_id = "".join(random.choice(string.digits) for num in range(19))
- return region, language, proxy, maxCount, device_id
\ No newline at end of file
+ return region, language, proxy, maxCount, device_id
diff --git a/examples/demo_user_pager.py b/examples/demo_user_pager.py
index 997e5095..940eaa08 100644
--- a/examples/demo_user_pager.py
+++ b/examples/demo_user_pager.py
@@ -31,8 +31,8 @@ def printPage(page):
user = api.get_user_object(username)
page = api.user_page(user["id"], user["secUid"], page_size=30, after=APR_24)
-printPage(page["items"])
-new_posts = len(page["items"])
+printPage(page['itemList'])
+new_posts = len(page['itemList'])
print("{} has {} posts after {}".format(username, new_posts, APR_24))