Repository: davidteather/TikTok-Api (language: python)

Issue:
Api Update: New endpoints using x-tt-params
Tiktok changed various endpoints (see #695), this fix applies x-tt-params to by_sound / user_page list requests.

note: i integrated the encrypter into signer to keep it faster, set different landingpage by passing `default_url` kwarg to sign_url
[Help Wanted] - Fixing the Package
Hey, I've been trying to fix the API, one of the things I'm running into is generating the `x-tt-params` header. I currently have code semi-working for getting user posts except for this header. I'll be pushing my current code to the [nightly](https://github.com/davidteather/TikTok-Api/tree/nightly) branch, but it'll likely only be focused on user_posts breaking the other functions temporarily (but they're already broken so 🤷 ) it's just meant as a way to collaborate.

## Important Information
@MuffinFox pointed out on #690
> * for initialisation of parameter encryption there is a call to window._$jsvmprt(a, b, c) with some hardcoded string (key?)
>  * window._fetch is a patched fetch which adds some additional functionality
>  * crypthojs lib is used for obfuscation

@asportnoy on #685 about ttwid (which isn't my current main focus)
> * The cookie is generated from a post request to https://www.tiktok.com/ttwid/check/ (set-cookie header). That request requires a fid parameter but I can't tell what generates that.
> * I also noticed this new script which seems relevant to the changes: https://www.tiktok.com/acrawler/webmssdk.js I was able to partially de-obfuscate that with http://jsnice.org/.

## Things I've noticed
* Appears they're signing urls using a different algorithm for `_signature` url parameter.
* `ttwid` doesn't really seem to matter (at least for user_posts)
* Whatever tokens they're checking don't seem to expire
* VerifyFp doesn't seem to exist on the initial calls of at least user_posts anymore

## Priorities
1. Figure out how `x-tt-params` is being generated

## Related Issues (with more information and potentially more help)
I've closed these and linked to this, sorted by most relevant to least relevant
* #690 
* #685 
* #691
* #688 
* #693 
* #681 
* #674 

Api Update: New endpoints using x-tt-params
Tiktok changed various endpoints (see #695), this fix applies x-tt-params to by_sound / user_page list requests.

note: i integrated the encrypter into signer to keep it faster, set different landingpage by passing `default_url` kwarg to sign_url


Discussion / hints:

![1631850761(1)](https://user-images.githubusercontent.com/58629508/133721478-22dfdb19-c80d-4194-90a0-c449c620ef4d.png)
![1631850786(1)](https://user-images.githubusercontent.com/58629508/133721509-51f70dc3-14f7-478a-aa0d-cd8de6c72205.png)
I konw this function is encryption function ,but My JS is poor
i try to resign the link`https://t.tiktok.com/api/post/item_list/?msToken=xxx=&X-Bogus=xxx`,use the old sign function`window.byted_acrawler.sign({ "url":urlT }),` and the useragent is same as old origin link,and turn out the old sign function is still ok,we just need find way to gen x-tt-params 
x-bugus seems generate by window.byted_acrawler.frontierSign("aaa") => {X-Bogus: 'RkWhY1g5s/20PSyl'} ,not sure what param is needed ,keep search

The original API can be used by adding'x-tt-params'
In this kind of situation, you can be sure, there are people from tiktok's engineering team watching this issue.

If you really want to get the API to work you should probably organize and work together with a little more privacy.


Now, about the x-tt-params code I posted in the previous issue, here is what gets inside `b`

`"x-tt-params": Object(d.a)(b)`


```json
aid: [CENSORED INT]
app_language: "fr"
app_name: "tiktok_web"
battery_info: BatteryManager {charging: true, chargingTime: 0, dischargingTime: Infinity, level: 1, onchargingchange: null, …}
browser_language: "fr-FR"
browser_name: "Mozilla"
browser_online: true
browser_platform: "Win32"
browser_version: "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
cookie_enabled: true
count: 30
cursor: "0"
device_id: "[UINT64 CENSORED]"
device_platform: "web_pc"
focus_state: true
history_len: 4
is_fullscreen: false
is_page_visible: true
language: "fr"
os: "windows"
priority_region: "FR"
referer: ""
region: "FR"
root_referer: undefined
screen_height: 1440
screen_width: 2560
secUid: "[BASE64 CENSORED]"
timezone_name: "Europe/Paris"
verifyFp: "verify_[CENSORED]"
[[Prototype]]: Object
```
about _signature url parameter.
the douyin(tiktok china version) use this html to generate.
https://github.com/boiio/douyin_downloader/blob/master/signature.html

i'm use this in my personal douyin-scraper and still work.
Don't know if it will help,maybe just a samename parameter,gl.
> about _signature url parameter.
> the douyin(tiktok china version) use this html to generate.
> https://github.com/boiio/douyin_downloader/blob/master/signature.html
> 
> i'm use this in my personal douyin-scraper and still work.
> Don't know if it will help,maybe just a samename parameter,gl.

The new encryption function has been changed
@carcabot has replicated the signing function in javascript with a docker container in their repository. 
* [javascript](https://github.com/carcabot/tiktok-signature/blob/master/javascript)
* [example trending.py](https://github.com/carcabot/tiktok-signature/blob/master/examples/trending.py)
> @carcabot has replicated the signing function in javascript with a docker container in their repository.
> 
> * [javascript](https://github.com/carcabot/tiktok-signature/blob/master/javascript?rgh-link-date=2021-09-20T19%3A51%3A05Z)
> * [example trending.py](https://github.com/carcabot/tiktok-signature/blob/master/examples/trending.py?rgh-link-date=2021-09-20T19%3A51%3A05Z)

This is perfect, works for me using jsdom.
Looking at his code it seems that all he is doing differently is sending `x_tt_params` to all requests, but in order to generate that value he first calls `window.genXTTParams` in a TikTok page.

https://github.com/carcabot/tiktok-signature/blob/2177e53ab3201bbad33aa8867c7f1b395d99d72e/index.js#L119-L121
> Looking at his code it seems that all he is doing differently is sending `x_tt_params` to all requests, but in order to generate that value he first calls `window.genXTTParams` in a TikTok page.
> 
> [carcabot/tiktok-signature@`2177e53`/index.js#L119-L121](https://github.com/carcabot/tiktok-signature/blob/2177e53ab3201bbad33aa8867c7f1b395d99d72e/index.js#L119-L121)

yeah that was the problem, the api changed where now instead of sending the old params directly you have to encrypt them and send them encrypted as an x-tt-params header.

and also sending a param with mstoken, xbogus, and the signature


Fix patch:
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("<script> " + get_acrawler() + " </script>")
+        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<i;c++){var o=r[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<i;c+=4)t[n+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<t;o+=4){var f=i(4294967296*(r||e.random()));r=987654071*f(),n.push(4294967296*f()|0)}return new c.init(n,t)}}),o=r.enc={},f=o.Hex={stringify:function(e){for(var t=e.words,r=e.sigBytes,n=[],i=0;i<r;i++){var c=t[i>>>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<t;n+=2)r[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<r;i++){var c=t[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<t;n++)r[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<a;u+=o)this._doProcessBlock(n,u);var d=n.splice(0,a);r.sigBytes-=s}return new c.init(d,s)},clone:function(){var e=i.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0}),d=(n.Hasher=u.extend({cfg:i.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){u.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(t,r){return new e.init(r).finalize(t)}},_createHmacHelper:function(e){return function(t,r){return new d.HMAC.init(e,r).finalize(t)}}}),r.algo={});return r}(Math);!function(){var e=CryptoJS,t=e.lib.WordArray;e.enc.Base64={stringify:function(e){var t=e.words,r=e.sigBytes,n=this._map;e.clamp();for(var i=[],c=0;c<r;c+=3)for(var o=(t[c>>>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<r;f++)i.push(n.charAt(o>>>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<n.length;c++)i[n.charCodeAt(c)]=c}var o=n.charAt(64);if(o){var f=e.indexOf(o);-1!==f&&(r=f)}return function(e,r,n){for(var i=[],c=0,o=0;o<r;o++)if(o%4){var f=n[e.charCodeAt(o-1)]<<o%4*2,a=n[e.charCodeAt(o)]>>>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<n;o++)t[r+o]^=c[o]}return t.Encryptor=t.extend({processBlock:function(e,t){var n=this._cipher,i=n.blockSize;r.call(this,e,t,i),n.encryptBlock(e,t),this._prevBlock=e.slice(t,t+i)}}),t.Decryptor=t.extend({processBlock:function(e,t){var n=this._cipher,i=n.blockSize,c=e.slice(t,t+i);n.decryptBlock(e,t),r.call(this,e,t,i),this._prevBlock=c}}),t}(),p=(t.pad={}).Pkcs7={pad:function(e,t){for(var r=4*t,n=r-e.sigBytes%r,c=n<<24|n<<16|n<<8|n,o=[],f=0;f<n;f+=4)o.push(c);var a=i.create(o,n);e.concat(a)},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>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;o<i;o++)if(o<r)c[o]=t[o];else{var f=c[o-1];o%r?r>6&&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<i;h++){o=i-h;if(h%4)f=c[o];else f=c[o-4];a[h]=h<4||o<=4?f:s[n[f>>>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<a;h++){var y=n[s>>>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<e.length;t++)r[t]=e[t];return r}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}for(var c=[],o=0,f=[],a=0,s=function(e,t){var r=e[t++],n=e[t],i=parseInt(""+r+n,16);if(i>>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;_<v+16;_++){var g=""+e[_++]+e[_];g=parseInt(g,16),b+=String.fromCharCode(g)}if("HNOJ@?RC"!=b)throw new Error("error magic number "+b);v+=16,parseInt(""+e[v]+e[v+1],16),v+=8,o=0;for(var m=0;m<4;m++){var S=v+2*m,k=""+e[S++]+e[S],C=parseInt(k,16);o+=(3&C)<<2*m}v+=16,v+=8;var B=parseInt(""+e[v]+e[v+1]+e[v+2]+e[v+3]+e[v+4]+e[v+5]+e[v+6]+e[v+7],16),x=B,w=v+=8,z=h(e,v+=B);z[1],v+=4,c={p:[],q:[]};for(var E=0;E<z;E++){for(var O=s(e,v),I=v+=2*O[0],R=c.p.length,A=0;A<O[1];A++){var M=s(e,I);c.p.push(M[1]),I+=2*M[0]}v=I,c.q.push([R,c.p.length])}var D={5:1,6:1,70:1,22:1,23:1,37:1,73:1},P={72:1},q={74:1},F={11:1,12:1,24:1,26:1,27:1,31:1},j={10:1},J={2:1,29:1,30:1,20:1},H=[],$=[];function X(e,t,r){for(var n=t;n<t+r;){var i=p(e,n);H[n]=i,n+=2,P[i]?($[n]=u(e,n),n+=2):D[i]?($[n]=d(e,n),n+=4):q[i]?($[n]=l(e,n),n+=8):F[i]?($[n]=p(e,n),n+=2):(j[i]||J[i])&&($[n]=h(e,n),n+=4)}}return U(e,w,x/2,[],t,r);function N(e,t,r,s,l,v,b,_){null==v&&(v=this);var g,m,S,k=[],C=0;b&&(g=b);var B,x,w=t,z=w+2*r;if(!_)for(;w<z;){var E=parseInt(""+e[w]+e[w+1],16);w+=2;var O=3&(B=13*E%241);if(B>>=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]<g):O<9&&(x=p(e,w),w+=2,k[C]=k[C][x]);else if(O>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];A<c.q[x][1];A++)g+=String.fromCharCode(o^c.p[A]);k[++C]=g,w+=4}}else O>0?(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];A<c.q[x][1];A++)O+=String.fromCharCode(o^c.p[A]);w+=4,k[C]=k[C][O]}}else if(O<3)(O=B)>11?(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];A<c.q[x][1];A++)O+=String.fromCharCode(o^c.p[A]);w+=4,k[C--][O]=g}}else if(O>0)(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<z;)if(E=H[w],w+=2,O=3&(B=13*E%241),B>>=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];A<c.q[x][1];A++)O+=String.fromCharCode(o^c.p[A]);w+=4,k[C--][O]=g}}else if(O>0)(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<c.q[x][1];A++)O+=String.fromCharCode(o^c.p[A]);w+=4,k[C]=k[C][O]}else O<14&&(k[++C]=$[w],w+=2);else if((O=B)<5){x=$[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 O<7&&(x=$[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)if(O=3&B,B>>=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];A<c.q[x][1];A++)g+=String.fromCharCode(o^c.p[A]);k[++C]=g,w+=4}else O<4&&(k[C--]?w+=4:w+=2*(x=$[w])-2);else(O=B)>5?(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]<g):O<9&&(x=$[w],w+=2,k[C]=k[C][x]);return[0,null]}function U(e,t,r,n,i,c,o,f){var a,s;null==c&&(c=this),i&&!i.d&&(i.d=0,i.$0=i,i[1]={});var u={},d=u.d=i?i.d+1:0;for(u["$"+d]=u,s=0;s<d;s++)u[a="$"+s]=i[a];for(s=0,d=u.length=n.length;s<d;s++)u[s]=n[s];return f&&!H[t]&&X(e,t,2*r),H[t]?N(e,t,r,0,u,c,null,1)[1]:N(e,t,r,0,u,c,null,0)[1]}},a=[i,,"undefined"!=typeof sessionStorage?sessionStorage:void 0,"undefined"!=typeof console?console:void 0,"undefined"!=typeof document?document:void 0,"undefined"!=typeof navigator?navigator:void 0,"undefined"!=typeof screen?screen:void 0,"undefined"!=typeof Intl?Intl:void 0,"undefined"!=typeof Array?Array:void 0,"undefined"!=typeof Object?Object:void 0],window._$jsvmprt("484e4f4a403f524300332d0511788d78e08713dc000000000000080a1b000b001e00011f0002000025003d46000306001a271f0c1b000b03221e0002240200030a0001101c18010005001c1b000b02221e00042418000a00011022011700061c18010007001f010200051f020200061f030200071f040200002500121b010b011b010b03041b010b043e001f050200002501981b000b041e0008221e000924131e000a02000b0200001a020a0001101f061800220117000a1c131e000c1a001f07460003060006271f2c050157131e000c1a002202000d1d000e2202000f1d00102218041d00112218071e00121d00132218071e00141d00152218071e0016220117000a1c131e000c1a001e001522011700071c0200001d00172218071e00181d0019221b000b041e001a1d001b221b010b011b010b02041d001c221b000b051e001d1d001e221b000b061e001f1d0020221b000b061e00211d0022221b000b051e00231d0024221b000b051e00251d0026221b000b051e00271d0028221b000b051e00291d002a221b000b051e002b1d002c22180622011700071c0200004801191d002d2218071e002e1d002f221b000b07221e0030240a000010221e0031240a0000101e00321d00332218011d00342218021d00352213221e0036240200370a0001101e00381d003922131e003a1e003b1d003c1f081b010b05260a00001017000b180802003d1d003e1b000b051e003f17000a180818031d004018080007131e000c1a00001f0602000025007f131e000c1a00221b000b051e001d1d001e221b000b061e001f1d0020221b000b061e00211d0022221b000b051e00231d0024221b000b051e00251d0026221b000b051e00271d0028221b000b051e00291d002a221b000b051e002b1d002c221b000b07221e0030240a000010221e0031240a0000101e00321d0033001f070200002501520200411f060a00001f0702000025005d1800221e0042240a0000101f0618061e003b1f07180718013a1700251b000b0818011807294801281a01221e0043240200440a0001101806281f0616001c18071801391700141806221e004524480018010a0002101f061806001f080200002500731b020b0826180148100a0002101f061b010b001e00461e0047221e00482418060a0001101f071b010b001e0049221e004a2418001807131e000c1a002218071d004b221b010b001e004c1e004d1d004c221b010b001e004e1e004f1d00500a0003101f081808221e0042240a000010001f091b000b09221e00512418000a000110221e0052240200002500241800020053281b020b00180019281f061b020b07221e00542418060a0001101c000a0001101c1807221e0054240200550a0001101c1809261807221e0043240200560a00011018060a0002101f0a180a001f081b000b0118061d00571b000b0118071d00581b000b0118081d005900005a000852636861657e5b42046670637f1962746262787e7f42657e6370767431767465317770787d7475077674655865747c166674737061613c62746262787e7f3c637477746374630c747f6574634e7c7465797e750970767447746378776806727e7e7a7874057c706572790643747654696110624e674e6674734e78752c394d663a38065e737b7472650420282929037078750a65787a657e7a4e667473087061614e7f707c740f7574677872744e617d7065777e637c0435667875097574677872744e78750735637476787e7f06637476787e7f0535646274630f6163787e637865684e637476787e7f03357e62027e6208637477746363746307637477746374630c637e7e654e637477746374630d727e7e7a7874547f70737d74750e727e7e7a78744e747f70737d74750566787565790c62726374747f4e6678756579067974787679650d62726374747f4e797478767965087d707f76647076741073637e666274634e7d707f766470767408617d7065777e637c1073637e666274634e617d7065777e637c0b706161527e75745f707c740c73637e666274634e7f707c740a70616147746362787e7f0f73637e666274634e67746362787e7f067e7f5d787f740e73637e666274634e7e7f7d787f7408677463787768576109357d707f76647076740c7061614e7d707f76647076740e5570657445787c74577e637c70650f6374627e7d6774755e6165787e7f620865787c744b7e7f740d65787c746b7e7f744e7f707c740f78624e617076744e67786278737d740b777e7264624e62657065740a7c706572795c747578701a39757862617d70683c7c7e75742b3177647d7d62726374747f38077c7065727974620d78624e77647d7d62726374747f07797862657e6368067d747f7665790b797862657e63684e7d747f04202524281962747264637865684e677463787778727065787e7f4e7078750a767465537065657463680c737065657463684e787f777e12667473706161203f213a232123202127232908657e426563787f76047b7e787f012105627d78727403747f7204446577290561706362740350544207747f7263686165027867047c7e7574035253520361707505417a7262260761707575787f76047a74686207777e6354707279012c04616462790f78624e747f7263686165787e7f2c2001370f767465527e7c7c7e7f417063707c6211767465547062684378627a417063707c620d747f7263686165417063707c62",a);var c=a[1],s=c.getCommonParams,u=c.getEasyRiskParams,l=c.encryptParams;window.genXTTParams=function(e){return l(e)};"""
+
+
 def get_acrawler():
     return """Function(function(t){return'w={S(S,K){if(!a[S]){a[S]={};for(y=0;y<S;y)a[S][S.charAt(y)]=y}a[S][K]}K=String.fromCharCode,a={},y={x:(K){null==K?"":""==K?null:y.y(K,32,(a){S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",K.charAt(a})},y:(S,a,y){p,m,o,T,l,r,k,i=[],J=4,q=4,j=3,I="",b=[],z={val:y(0),position:a,index:1};for(p=0;p<3;p+=1)i[p]=p;for(o=0,l=Math.pow(2,2),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(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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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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..32697da6 100644
--- a/TikTokApi/tiktok.py
+++ b/TikTokApi/tiktok.py
@@ -34,7 +34,7 @@ def __init__(self, **kwargs):
         # Some Instance Vars
         self.executablePath = kwargs.get("executablePath", None)
 
-        if kwargs.get("custom_device_id") != None:
+        if kwargs.get("custom_did") != None:
             raise Exception("Please use custom_device_id instead of custom_device_id")
         self.custom_device_id = kwargs.get("custom_device_id", None)
         self.userAgent = (
@@ -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),
@@ -428,7 +434,7 @@ def by_trending(self, count=30, **kwargs) -> dict:
             for t in res.get("itemList", []):
                 response.append(t)
 
-            if not res["hasMore"] and not first:
+            if not res.get("hasMore", False) and not first:
                 logging.info("TikTok isn't sending more TikToks beyond this point.")
                 return response[:count]
 
@@ -579,13 +585,13 @@ def user_posts(self, userID, secUID, count=30, cursor=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)
 
             if "itemList" in res.keys():
                 for t in res.get("itemList", []):
                     response.append(t)
 
-            if not res["hasMore"] and not first:
+            if not res.get("hasMore", False) and not first:
                 logging.info("TikTok isn't sending more TikToks beyond this point.")
                 return response
 
@@ -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
@@ -769,7 +775,7 @@ def user_liked(self, userID, secUID, count=30, cursor=0, **kwargs) -> dict:
             for t in res.get("itemList", []):
                 response.append(t)
 
-            if not res["hasMore"] and not first:
+            if not res.get("hasMore", False) and not first:
                 logging.info("TikTok isn't sending more TikToks beyond this point.")
                 return response
 
@@ -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"]:
@@ -855,7 +861,7 @@ def by_sound(self, id, count=30, offset=0, **kwargs) -> dict:
                 for t in res.get("itemList", []):
                     response.append(t)
 
-            if not res["hasMore"]:
+            if not res.get("hasMore", False):
                 logging.info("TikTok isn't sending more TikToks beyond this point.")
                 return response
 
@@ -974,7 +980,7 @@ def by_hashtag(self, hashtag, count=30, offset=0, **kwargs) -> dict:
             for t in res.get("itemList", []):
                 response.append(t)
 
-            if not res["hasMore"]:
+            if not res.get("hasMore", False):
                 logging.info("TikTok isn't sending more TikToks beyond this point.")
                 return response
 
@@ -1054,7 +1060,7 @@ def get_recommended_tiktoks_by_video_id(self, id, count=30, **kwargs) -> dict:
             for t in res.get("itemList", []):
                 response.append(t)
 
-            if not res["hasMore"] and not first:
+            if not res.get("hasMore", False) and not first:
                 logging.info("TikTok isn't sending more TikToks beyond this point.")
                 return response[:count]
 
@@ -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))
 
 
diff --git a/setup.py b/setup.py
index 59cf11af..9586916e 100644
--- a/setup.py
+++ b/setup.py
@@ -8,7 +8,7 @@
 setuptools.setup(
     name="TikTokApi",
     packages=["TikTokApi"],
-    version="4.0.1",
+    version="4.0.2",
     license="MIT",
     description="The Unofficial TikTok API Wrapper in Python 3.",
     author="David Teather",


Test patch:
diff --git a/tests/test_by_hashtag.py b/tests/test_by_hashtag.py
index a60c916b..dff8eae8 100644
--- a/tests/test_by_hashtag.py
+++ b/tests/test_by_hashtag.py
@@ -18,10 +18,7 @@ def unique_count(tiktoks):
 
 def test_hashtag():
     assert len(api.by_hashtag("funny", 5)) == 5
-    assert len(api.by_hashtag("funny", 10)) == 10
-    assert len(api.by_hashtag("funny", 20)) == 20
-    # Grant A Little Lenience of at most a 15 difference
-    assert abs(len(unique_count(api.by_hashtag("funny", 500))) - 500) <= 15
+    assert len(api.by_hashtag("funny", 50)) == 50
 
 
 def test_non_latin1():
diff --git a/tests/test_suggested.py b/tests/test_suggested.py
index 5c21bdbe..c5385104 100644
--- a/tests/test_suggested.py
+++ b/tests/test_suggested.py
@@ -9,7 +9,7 @@
 def test_suggested():
     assert len(api.get_suggested_users_by_id()) > 0
     assert len(api.get_suggested_hashtags_by_id()) > 0
-    assert len(api.get_suggested_users_by_id()) > 0
+    assert len(api.get_suggested_music_by_id()) > 0
 
 
 def test_suggested_crawlers():