Repository: yt-dlp/yt-dlp

Issue:
TikTok Parsing Feed Breaking Update Dec 1, 2022 (non-watermark version missing)
### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I remove or skip any mandatory\* field

### Checklist

- [X] I'm reporting a broken site
- [X] I've verified that I'm running yt-dlp version **2022.11.11** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
- [X] I've checked that all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#video-url-contains-an-ampersand--and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)
- [X] I've searched the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)
- [X] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and I'm willing to share it if required

### Region

Canada

### Provide a description that is worded well enough to be understood

Requesting the list of formats returns JSON feed error, which resorts to downloading webpage which now only shows one video (with watermark) ... which his not helpful.

yt-dlp -F https://www.tiktok.com/@repurposeio/video/7158191036513127685

[TikTok] 7158191036513127685: Downloading video feed
WARNING: [TikTok] Expecting value in '': line 1 column 1 (char 0). Retrying... (attempt 1 of 4)
[TikTok] 7158191036513127685: Downloading video feed
WARNING: [TikTok] Expecting value in '': line 1 column 1 (char 0). Retrying... (attempt 2 of 4)
[TikTok] 7158191036513127685: Downloading video feed
WARNING: [TikTok] Expecting value in '': line 1 column 1 (char 0). Retrying... (attempt 3 of 4)
[TikTok] 7158191036513127685: Downloading video feed
WARNING: [TikTok] 7158191036513127685: Failed to parse JSON (caused by JSONDecodeError("Expecting value in '': line 1 column 1 (char 0)")); please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U; trying with webpage
[TikTok] 7158191036513127685: Downloading webpage
[info] Available formats for 7158191036513127685:
ID EXT RESOLUTION │ PROTO │ VCODEC  ACODEC
───────────────────────────────────────────
0  mp4 576x1024   │ https │ unknown unknown




### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
root@new-proc-ubuntu-2gb-nyc1-01-processing-01-1495731460959-8gb-nyc1:~/hani# /root/smpnode/yt-dlp-master/yt_dlp/__main__.py --proxy https://196.51.251.236:8800 --add-header 'user-agent:Mozilla/5.0' "https://www.tiktok.com/@repurposeio/video/7158191036513127685" -vU
[debug] Command-line config: ['--proxy', 'https://196.51.251.236:8800', '--add-header', 'user-agent:Mozilla/5.0', 'https://www.tiktok.com/@repurposeio/video/7158191036513127685', '-vU']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version 2022.11.11 [8b644025b]
[debug] Lazy loading extractors is disabled
[debug] Plugins: ['SamplePluginIE', 'SamplePluginPP']
[debug] Python 3.8.9 (CPython x86_64 64bit) - Linux-4.15.0-173-generic-x86_64-with-glibc2.17 (OpenSSL 1.0.2n  7 Dec 2017, glibc 2.27)
[debug] exe versions: ffmpeg 5.0.1-static (setts), ffprobe 5.0.1-static, rtmpdump 2.4
[debug] Optional libraries: certifi-2018.01.18, sqlite3-2.6.0
[debug] Proxy map: {'http': 'https://196.51.251.236:8800', 'https': 'https://196.51.251.236:8800'}
[debug] Loaded 1731 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Latest version: 2022.11.11, Current version: 2022.11.11
yt-dlp is up to date (2022.11.11)
[debug] [TikTok] Extracting URL: https://www.tiktok.com/@repurposeio/video/7158191036513127685
[TikTok] 7158191036513127685: Downloading video feed
WARNING: [TikTok] Expecting value in '': line 1 column 1 (char 0). Retrying... (attempt 1 of 4)
[TikTok] 7158191036513127685: Downloading video feed
WARNING: [TikTok] Expecting value in '': line 1 column 1 (char 0). Retrying... (attempt 2 of 4)
[TikTok] 7158191036513127685: Downloading video feed
WARNING: [TikTok] Expecting value in '': line 1 column 1 (char 0). Retrying... (attempt 3 of 4)
[TikTok] 7158191036513127685: Downloading video feed
WARNING: [TikTok] 7158191036513127685: Failed to parse JSON (caused by JSONDecodeError("Expecting value in '': line 1 column 1 (char 0)")); please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U; trying with webpage
[TikTok] 7158191036513127685: Downloading webpage
[debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7), vcodec:vp9.2(10), channels, acodec, filesize, fs_approx, tbr, vbr, abr, asr, proto, vext, aext, hasaud, source, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] 7158191036513127685: Downloading 1 format(s): 0
```



Discussion:

Resolving patch:
diff --git a/yt_dlp/extractor/tiktok.py b/yt_dlp/extractor/tiktok.py
--- a/yt_dlp/extractor/tiktok.py
+++ b/yt_dlp/extractor/tiktok.py
@@ -30,7 +30,7 @@ class TikTokBaseIE(InfoExtractor):
     _WORKING_APP_VERSION = None
     _APP_NAME = 'trill'
     _AID = 1180
-    _API_HOSTNAME = 'api-h2.tiktokv.com'
+    _API_HOSTNAME = 'api16-normal-c-useast1a.tiktokv.com'
     _UPLOADER_URL_FORMAT = 'https://www.tiktok.com/@%s'
     _WEBPAGE_HOST = 'https://www.tiktok.com/'
     QUALITIES = ('360p', '540p', '720p', '1080p')


Test patch: