Showing preview only (4,681K chars total). Download the full file or copy to clipboard to get everything.
Repository: TikHubIO/TikHub-API-Python-SDK
Branch: main
Commit: 2d92927332e1
Files: 167
Total size: 4.0 MB
Directory structure:
gitextract_qrj0e6h8/
├── .github/
│ └── workflows/
│ ├── ci.yml
│ └── release.yml
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── README_CN.md
├── README_ES.md
├── README_FR.md
├── README_JP.md
├── docs/
│ ├── async.md
│ ├── authentication.md
│ ├── changelog.md
│ ├── cli.md
│ ├── errors.md
│ ├── index.md
│ ├── logging.md
│ ├── migrating-from-v2.md
│ ├── naming.md
│ ├── pagination.md
│ ├── quickstart.md
│ ├── reference.md
│ └── retries.md
├── examples/
│ ├── README.md
│ ├── bilibili_app.py
│ ├── bilibili_web.py
│ ├── demo.py
│ ├── douyin_app_v3.py
│ ├── douyin_billboard.py
│ ├── douyin_creator.py
│ ├── douyin_creator_v2.py
│ ├── douyin_search.py
│ ├── douyin_web.py
│ ├── douyin_xingtu.py
│ ├── douyin_xingtu_v2.py
│ ├── health_check.py
│ ├── hybrid_parsing.py
│ ├── instagram_v1.py
│ ├── instagram_v2.py
│ ├── instagram_v3.py
│ ├── ios_shortcut.py
│ ├── kuaishou_app.py
│ ├── kuaishou_web.py
│ ├── lemon8_app.py
│ ├── linkedin_web.py
│ ├── pipixia_app.py
│ ├── quickstart.py
│ ├── reddit_app.py
│ ├── sora2.py
│ ├── temp_mail.py
│ ├── threads_web.py
│ ├── tikhub_downloader.py
│ ├── tikhub_user.py
│ ├── tiktok_ads.py
│ ├── tiktok_analytics.py
│ ├── tiktok_app_v3.py
│ ├── tiktok_creator.py
│ ├── tiktok_shop_web.py
│ ├── tiktok_web.py
│ ├── toutiao_app.py
│ ├── toutiao_web.py
│ ├── twitter_web.py
│ ├── wechat_channels.py
│ ├── wechat_media_platform_web.py
│ ├── weibo_app.py
│ ├── weibo_web.py
│ ├── weibo_web_v2.py
│ ├── xiaohongshu_app.py
│ ├── xiaohongshu_app_v2.py
│ ├── xiaohongshu_web.py
│ ├── xiaohongshu_web_v2.py
│ ├── xiaohongshu_web_v3.py
│ ├── xigua_app_v2.py
│ ├── youtube_web.py
│ ├── youtube_web_v2.py
│ └── zhihu_web.py
├── mkdocs.yml
├── pyproject.toml
├── scripts/
│ ├── generate_docs.py
│ ├── generate_examples.py
│ ├── generate_resources.py
│ ├── refresh_spec.py
│ ├── test_all_endpoints.py
│ └── verify_coverage.py
├── spec/
│ └── openapi.json
├── src/
│ └── tikhub/
│ ├── __init__.py
│ ├── _auth.py
│ ├── _base_client.py
│ ├── _errors.py
│ ├── _logging.py
│ ├── _pagination.py
│ ├── _rate_limit.py
│ ├── _retries.py
│ ├── _types.py
│ ├── _version.py
│ ├── async_client.py
│ ├── cli/
│ │ ├── __init__.py
│ │ ├── __main__.py
│ │ └── main.py
│ ├── client.py
│ ├── models/
│ │ ├── __init__.py
│ │ └── _common.py
│ ├── py.typed
│ └── resources/
│ ├── __init__.py
│ ├── _base.py
│ ├── bilibili_app.py
│ ├── bilibili_web.py
│ ├── demo.py
│ ├── douyin_app_v3.py
│ ├── douyin_billboard.py
│ ├── douyin_creator.py
│ ├── douyin_creator_v2.py
│ ├── douyin_search.py
│ ├── douyin_web.py
│ ├── douyin_xingtu.py
│ ├── douyin_xingtu_v2.py
│ ├── health_check.py
│ ├── hybrid_parsing.py
│ ├── instagram_v1.py
│ ├── instagram_v2.py
│ ├── instagram_v3.py
│ ├── ios_shortcut.py
│ ├── kuaishou_app.py
│ ├── kuaishou_web.py
│ ├── lemon8_app.py
│ ├── linkedin_web.py
│ ├── pipixia_app.py
│ ├── reddit_app.py
│ ├── sora2.py
│ ├── temp_mail.py
│ ├── threads_web.py
│ ├── tikhub_downloader.py
│ ├── tikhub_user.py
│ ├── tiktok_ads.py
│ ├── tiktok_analytics.py
│ ├── tiktok_app_v3.py
│ ├── tiktok_creator.py
│ ├── tiktok_interaction.py
│ ├── tiktok_shop_web.py
│ ├── tiktok_web.py
│ ├── toutiao_app.py
│ ├── toutiao_web.py
│ ├── twitter_web.py
│ ├── wechat_channels.py
│ ├── wechat_media_platform_web.py
│ ├── weibo_app.py
│ ├── weibo_web.py
│ ├── weibo_web_v2.py
│ ├── xiaohongshu_app.py
│ ├── xiaohongshu_app_v2.py
│ ├── xiaohongshu_web.py
│ ├── xiaohongshu_web_v2.py
│ ├── xiaohongshu_web_v3.py
│ ├── xigua_app_v2.py
│ ├── youtube_web.py
│ ├── youtube_web_v2.py
│ └── zhihu_web.py
└── tests/
├── __init__.py
├── conftest.py
└── unit/
├── __init__.py
├── test_cli.py
├── test_client_construction.py
├── test_errors.py
├── test_generated_resources.py
├── test_health_check.py
├── test_pagination.py
└── test_retries.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/ci.yml
================================================
name: ci
on:
push:
branches: [main]
pull_request:
branches: [main]
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install dev deps
run: |
python -m pip install --upgrade pip
pip install -e ".[dev]"
- name: Ruff
run: ruff check src tests scripts
- name: Mypy
run: mypy src/tikhub
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install
run: |
python -m pip install --upgrade pip
pip install -e ".[dev]"
- name: Test
run: pytest -q
coverage-gate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install
run: |
python -m pip install --upgrade pip
pip install -e ".[dev]"
- name: Verify endpoint coverage against snapshotted spec
run: python scripts/verify_coverage.py
================================================
FILE: .github/workflows/release.yml
================================================
name: release
on:
push:
tags: ["v*.*.*", "v*.*.*a*", "v*.*.*b*", "v*.*.*rc*"]
permissions:
contents: read
id-token: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Verify version matches tag
run: |
TAG="${GITHUB_REF#refs/tags/v}"
PKG_VERSION=$(grep -oP '__version__\s*=\s*"\K[^"]+' src/tikhub/_version.py)
if [ "$TAG" != "$PKG_VERSION" ]; then
echo "::error::tag $TAG does not match package version $PKG_VERSION"
exit 1
fi
- name: Install build tools
run: python -m pip install --upgrade pip build
- name: Run full test suite first
run: |
pip install -e ".[dev]"
ruff check src tests scripts
mypy src/tikhub
pytest -q
python scripts/verify_coverage.py
- name: Build sdist + wheel
run: python -m build
- uses: actions/upload-artifact@v4
with:
name: dist
path: dist/
publish:
needs: build
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/tikhub
steps:
- uses: actions/download-artifact@v4
with:
name: dist
path: dist/
- name: Publish to PyPI (OIDC trusted publishing)
uses: pypa/gh-action-pypi-publish@release/v1
================================================
FILE: .gitignore
================================================
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
.hypothesis/
venv/
.venv/
.idea/
.claude/
.python-version
.pytest_cache/
.mypy_cache/
.ruff_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
# Sphinx documentation
docs/_build/
# PyBuilder
target/
#Ipython Notebook
.ipynb_checkpoints
site/
# Test runner artifacts (one-shot, contain timing data and request ids)
test_results.json
test_results.md
# Local scratch / smoke-test scripts that may contain hardcoded API keys.
# Real test suites live in tests/unit/ and tests/integration/.
tests/API/
# Internal design plan — not shipped.
PLAN_V3.md
================================================
FILE: CHANGELOG.md
================================================
# Changelog
All notable changes to `tikhub` will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added — Phase 6 (docs, CLI, release tooling)
- **mkdocs-material site** at `mkdocs.yml` + `docs/`. Hand-written guides
for authentication, async, errors, pagination, retries, logging, CLI,
naming rules, and a migration guide from `tikhub_sdk_v2`.
- **Auto-generated API reference** (`docs/reference.md`, 1540 lines) listing
all 1010 methods with their endpoint paths and signatures.
Regenerated by `scripts/generate_docs.py`.
- **CLI** (`pip install "tikhub[cli]"` -> `tikhub` console script):
- `tikhub health`
- `tikhub fetch <url>`
- `tikhub user info`
- `tikhub user usage`
- `tikhub --version`
Implemented in `src/tikhub/cli/`.
- **GitHub Actions docs workflow** (`.github/workflows/docs.yml`) builds the
mkdocs site and deploys to GitHub Pages on every push to main.
- **GitHub Actions release workflow** (`.github/workflows/release.yml`)
triggered by version tags (`v3.x.y`); builds sdist + wheel and publishes
to PyPI via OIDC trusted publishing after running the full lint /
typecheck / test / coverage gate.
- **`Self`-typed lifecycle methods** on `BaseClient` / `AsyncBaseClient` so
`with TikHub() as client:` correctly narrows to `TikHub` (not the parent
base class) under mypy strict.
- **8 new CLI tests** - 110 total now passing.
### Added — full endpoint coverage
- **Codegen pipeline** under `scripts/`:
- `refresh_spec.py` — pulls latest `openapi.json`, prints diff vs cached snapshot.
- `generate_resources.py` — regenerates all resource modules + `client.py` + `async_client.py` from `spec/openapi.json`.
- `verify_coverage.py` — CI gate that asserts every spec endpoint has a matching SDK method (and vice versa).
- **All 52 resources** for TikHub OpenAPI V5.3.2 wired up — **1010 / 1010 endpoints**.
- **Multipart support** in `_base_client._request` (the one Sora2 image-upload endpoint).
- **GitHub Actions CI** (`.github/workflows/ci.yml`): lint, mypy, pytest matrix on Python 3.9–3.13, plus the coverage gate.
- **`docs/quickstart.md`** — runnable 5-minute tour.
- **61 new tests** (`tests/unit/test_generated_resources.py`) covering resource attribute presence, query/JSON/array body dispatch, async ↔ sync parity, and total endpoint count.
## [2.1.0] — 2026-04-08
Complete rewrite of the TikHub Python SDK.
### Added
- New `tikhub` package built from scratch against TikHub OpenAPI spec V5.3.2.
- `TikHub` (sync) and `AsyncTikHub` (async) clients backed by `httpx`.
- Bearer-token authentication via constructor or `$TIKHUB_API_KEY`.
- Exception hierarchy rooted at `TikHubError` with clear HTTP status mapping.
- Automatic retry for transient failures (5xx, 429, network errors) with exponential backoff and `Retry-After` honouring.
- Rate-limit-aware sleeping based on `X-RateLimit-Reset` headers.
- Cursor / page / offset paginator scaffolding.
- Pydantic v2 model layer (`extra="allow"` so the SDK survives upstream additions).
- `health_check` resource demonstrating the foundation end-to-end.
### Removed
- Legacy auto-generated code (`setup.py`, `tox.ini`, old docs, old tests) replaced by the new hand-architected SDK.
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: README.md
================================================
# TikHub API Python SDK
<p align="center">
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/stargazers"><img src="https://img.shields.io/github/stars/TikHub/TikHub-API-Python-SDK?style=social" alt="GitHub Stars"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/network/members"><img src="https://img.shields.io/github/forks/TikHub/TikHub-API-Python-SDK?style=social" alt="GitHub Forks"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/issues"><img src="https://img.shields.io/github/issues/TikHub/TikHub-API-Python-SDK" alt="GitHub Issues"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/pulls"><img src="https://img.shields.io/github/issues-pr/TikHub/TikHub-API-Python-SDK" alt="GitHub Pull Requests"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/blob/main/LICENSE"><img src="https://img.shields.io/github/license/TikHub/TikHub-API-Python-SDK" alt="License"></a>
</p>
<p align="center">
English | <a href="README_CN.md">中文</a> | <a href="README_FR.md">Français</a> | <a href="README_ES.md">Español</a> | <a href="README_JP.md">日本語</a>
</p>
<p align="center">
<img src="TikHub_Banner.jpg" alt="TikHub Banner">
</p>
The official Python SDK for the [TikHub](https://tikhub.io) social media data API — a unified REST API that provides real-time access to **16+ social media platforms** including TikTok, Douyin, Instagram, YouTube, Twitter/X, Xiaohongshu (Red Note), Bilibili, Weibo, Threads, LinkedIn, Reddit, Kuaishou, WeChat, Lemon8, Zhihu, and more.
Built for developers, data scientists, and AI engineers who need structured social media data at scale — for **AI training**, **influencer analytics**, **trend monitoring**, **sentiment analysis**, **market research**, and **competitive intelligence**.
## Why TikHub?
- **1000+ endpoints** across 16 platforms through a single API key
- **Real-time data** — video details, user profiles, comments, search results, live streams, trending content, and e-commerce analytics
- **RESTful & OpenAPI-native** — every endpoint is documented in the [OpenAPI spec](https://api.tikhub.io/openapi.json) and testable via [Swagger UI](https://api.tikhub.io)
- **MCP integration** — connect AI agents (Claude, LangChain, Coze, n8n) directly to social media data via [Model Context Protocol](https://tikhub.io)
- **Datasets available** — 1B+ pre-collected, structured records for training and research
## Why This SDK?
- **100% endpoint coverage** — 1010 / 1010 endpoints from OpenAPI spec V5.3.2, mechanically generated and verified
- **Sync + async** — `TikHub` and `AsyncTikHub` clients with identical APIs
- **Production-ready** — automatic retries with exponential backoff, rate-limit handling, structured error hierarchy with full debugging context
- **Type-safe** — `mypy --strict` clean, built on `httpx` + `pydantic v2`
- **Zero config** — flat kwargs, no config objects; set one env var and go
> **Version:** `2.1.1` — Requires Python 3.9+
## Supported Platforms
| Platform | Resource | Endpoints |
|---|---|---|
| TikTok | `tiktok_web`, `tiktok_app_v3`, `tiktok_creator`, `tiktok_analytics`, `tiktok_ads`, `tiktok_shop_web` | 200+ |
| Douyin | `douyin_web`, `douyin_app_v3`, `douyin_search`, `douyin_billboard`, `douyin_creator`, `douyin_xingtu` | 400+ |
| Instagram | `instagram_v1`, `instagram_v2`, `instagram_v3` | 80+ |
| YouTube | `youtube_web`, `youtube_web_v2` | 50+ |
| Twitter / X | `twitter_web` | 13+ |
| Xiaohongshu (Red Note) | `xiaohongshu_web`, `xiaohongshu_app` (+ v2/v3 variants) | 80+ |
| Bilibili | `bilibili_web`, `bilibili_app` | 40+ |
| Weibo | `weibo_web`, `weibo_web_v2`, `weibo_app` | 30+ |
| Threads | `threads_web` | 10+ |
| LinkedIn | `linkedin_web` | 10+ |
| Reddit | `reddit_app` | 10+ |
| Kuaishou | `kuaishou_web`, `kuaishou_app` | 20+ |
| WeChat | `wechat_channels`, `wechat_media_platform_web` | 20+ |
| Lemon8 | `lemon8_app` | 10+ |
| Zhihu | `zhihu_web` | 30+ |
| Others | `toutiao_web`, `toutiao_app`, `xigua_app_v2`, `pipixia_app`, `sora2` | 30+ |
## Install
```bash
pip install tikhub
```
Requires Python 3.9+.
### From source
```bash
git clone https://github.com/TikHub/TikHub-API-Python-SDK.git
cd TikHub-API-Python-SDK
pip install -e ".[dev]"
pytest -q
```
## Get your API Key
1. Go to [https://user.tikhub.io/login](https://user.tikhub.io/login) and sign up / log in.
2. Copy your API key from the dashboard.
3. Set it as an environment variable or pass it directly:
```bash
export TIKHUB_API_KEY="YOUR_API_KEY"
```
## Quickstart
```python
from tikhub import TikHub
client = TikHub(api_key="YOUR_API_KEY")
# 1:1 with the OpenAPI spec — resource = tag, method = path basename
video = client.douyin_web.fetch_one_video(aweme_id="7251234567890123456")
print(video.aweme_detail.desc)
client.close()
```
Or with the recommended context manager:
```python
with TikHub(api_key="YOUR_API_KEY") as client:
health = client.health_check.check()
print(health.status)
```
## Async
```python
import asyncio
from tikhub import AsyncTikHub
async def main():
async with AsyncTikHub(api_key="YOUR_API_KEY") as client:
video = await client.douyin_web.fetch_one_video(aweme_id="...")
print(video.aweme_detail.desc)
asyncio.run(main())
```
## Configuration
The constructor takes one required argument and a small handful of optional kwargs:
```python
TikHub(
api_key=None, # str | None — defaults to $TIKHUB_API_KEY
timeout=30, # float | None — total request timeout in seconds
base_url=None, # str | None — only override for a private mirror
# Advanced (rare):
max_retries=3,
proxy=None,
user_agent=None,
parse_response=True,
http_client=None, # bring your own httpx.Client
)
```
That's the entire configuration surface. There is no `ClientConfig` object — knobs are flat kwargs.
## Naming rules
The SDK is mechanically derived from the TikHub OpenAPI spec. Two rules:
1. **Resource attribute** = OpenAPI tag, lowercased, dashes → underscores, `-API` stripped.
`Douyin-Web-API` → `client.douyin_web`. `TikTok-App-V3-API` → `client.tiktok_app_v3`.
2. **Method name** = the **last segment of the API path, verbatim**.
`/api/v1/douyin/web/fetch_one_video` → `client.douyin_web.fetch_one_video(...)`.
Parameter names match the OpenAPI spec verbatim. If you can read the TikHub API docs, you already know how to use the SDK.
## Status
**100% endpoint coverage** against TikHub OpenAPI spec V5.3.2.
| | |
|---|---|
| Resources | **52** (one per OpenAPI tag) |
| Endpoints | **1010 / 1010** |
| Tests | 110 passing |
| Type-check | mypy `--strict` clean across 71 source files |
| Lint | ruff clean |
| Phase | Scope | State |
|---|---|---|
| 0 | Foundation: client, transport, errors, retries, pagination | ✅ done |
| 1 | Codegen pipeline (`scripts/refresh_spec.py`, `generate_resources.py`, `verify_coverage.py`) | ✅ done |
| 2 | Douyin + TikTok core (412 endpoints) | ✅ done |
| 3 | Other Chinese platforms (302 endpoints) | ✅ done |
| 4 | International platforms (234 endpoints) | ✅ done |
| 5 | TikTok specialty + utilities (94 endpoints) | ✅ done |
| 6 | Docs site, CLI, migration guide, release workflow | ✅ done |
The resource layer is **mechanically generated** from `spec/openapi.json`. To refresh after a TikHub spec update:
```bash
python scripts/refresh_spec.py # pulls latest openapi.json, prints diff
python scripts/generate_resources.py # regenerates all 52 resource files + clients
python scripts/generate_docs.py # regenerates docs/reference.md
python scripts/verify_coverage.py # asserts 100% coverage
pytest -q # 110 tests
```
## CLI
A small console wrapper ships in the `cli` extra:
```bash
pip install "tikhub[cli]"
export TIKHUB_API_KEY="YOUR_API_KEY"
tikhub health # ping the API
tikhub fetch https://v.douyin.com/abc/ # universal video URL parser
tikhub user info # plan + quota
tikhub user usage # today's request count
```
Every command prints JSON to stdout — pipe to `jq` or any other formatter.
## Documentation
Full docs (mkdocs-material): authentication, async, errors, pagination, retries, logging, CLI, migration guide, naming rules, and the auto-generated reference for all 1010 endpoints.
```bash
pip install -e ".[docs]"
mkdocs serve # http://127.0.0.1:8000
```
## License
MIT.
================================================
FILE: README_CN.md
================================================
# TikHub API Python SDK
<p align="center">
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/stargazers"><img src="https://img.shields.io/github/stars/TikHub/TikHub-API-Python-SDK?style=social" alt="GitHub Stars"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/network/members"><img src="https://img.shields.io/github/forks/TikHub/TikHub-API-Python-SDK?style=social" alt="GitHub Forks"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/issues"><img src="https://img.shields.io/github/issues/TikHub/TikHub-API-Python-SDK" alt="GitHub Issues"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/pulls"><img src="https://img.shields.io/github/issues-pr/TikHub/TikHub-API-Python-SDK" alt="GitHub Pull Requests"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/blob/main/LICENSE"><img src="https://img.shields.io/github/license/TikHub/TikHub-API-Python-SDK" alt="License"></a>
</p>
<p align="center">
<a href="README.md">English</a> | 中文 | <a href="README_FR.md">Français</a> | <a href="README_ES.md">Español</a> | <a href="README_JP.md">日本語</a>
</p>
<p align="center">
<img src="TikHub_Banner.jpg" alt="TikHub Banner">
</p>
[TikHub](https://tikhub.io) 社交媒体数据 API 的官方 Python SDK — 统一的 REST API,可实时访问 **16+ 社交媒体平台**,包括 TikTok、抖音、Instagram、YouTube、Twitter/X、小红书、B站、微博、Threads、LinkedIn、Reddit、快手、微信、Lemon8、知乎等。
专为开发者、数据科学家和 AI 工程师打造,适用于 **AI 训练**、**达人分析**、**趋势监控**、**舆情分析**、**市场调研** 和 **竞品情报** 等场景。
## 为什么选择 TikHub?
- **1000+ 接口**,覆盖 16 个平台,只需一个 API Key
- **实时数据** — 视频详情、用户资料、评论、搜索结果、直播、热门内容、电商分析
- **RESTful & OpenAPI 原生** — 所有接口均在 [OpenAPI 规范](https://api.tikhub.io/openapi.json) 中有文档,可通过 [Swagger UI](https://api.tikhub.io) 在线测试
- **MCP 集成** — 通过 [Model Context Protocol](https://tikhub.io) 将 AI Agent(Claude、LangChain、Coze、n8n)直接连接到社交媒体数据
- **数据集** — 10 亿+ 条预采集的结构化数据,可用于训练和研究
## 为什么选择这个 SDK?
- **100% 接口覆盖** — OpenAPI 规范 V5.3.2 的 1010 / 1010 个接口,机械化生成并验证
- **同步 + 异步** — `TikHub` 和 `AsyncTikHub` 客户端,API 完全一致
- **生产就绪** — 自动重试(指数退避)、速率限制处理、结构化异常体系(含完整调试上下文)
- **类型安全** — `mypy --strict` 通过,基于 `httpx` + `pydantic v2` 构建
- **零配置** — 扁平化参数,无需配置对象;设置一个环境变量即可使用
> **版本:** `2.1.1` — 需要 Python 3.9+
## 支持的平台
| 平台 | 资源 | 接口数 |
|---|---|---|
| TikTok | `tiktok_web`, `tiktok_app_v3`, `tiktok_creator`, `tiktok_analytics`, `tiktok_ads`, `tiktok_shop_web` | 200+ |
| 抖音 | `douyin_web`, `douyin_app_v3`, `douyin_search`, `douyin_billboard`, `douyin_creator`, `douyin_xingtu` | 400+ |
| Instagram | `instagram_v1`, `instagram_v2`, `instagram_v3` | 80+ |
| YouTube | `youtube_web`, `youtube_web_v2` | 50+ |
| Twitter / X | `twitter_web` | 13+ |
| 小红书 | `xiaohongshu_web`, `xiaohongshu_app`(+ v2/v3 变体) | 80+ |
| B站 | `bilibili_web`, `bilibili_app` | 40+ |
| 微博 | `weibo_web`, `weibo_web_v2`, `weibo_app` | 30+ |
| Threads | `threads_web` | 10+ |
| LinkedIn | `linkedin_web` | 10+ |
| Reddit | `reddit_app` | 10+ |
| 快手 | `kuaishou_web`, `kuaishou_app` | 20+ |
| 微信 | `wechat_channels`, `wechat_media_platform_web` | 20+ |
| Lemon8 | `lemon8_app` | 10+ |
| 知乎 | `zhihu_web` | 30+ |
| 其他 | `toutiao_web`, `toutiao_app`, `xigua_app_v2`, `pipixia_app`, `sora2` | 30+ |
## 安装
```bash
pip install tikhub
```
需要 Python 3.9+。
### 从源码安装
```bash
git clone https://github.com/TikHub/TikHub-API-Python-SDK.git
cd TikHub-API-Python-SDK
pip install -e ".[dev]"
pytest -q
```
## 获取 API Key
1. 前往 [https://user.tikhub.io/login](https://user.tikhub.io/login) 注册 / 登录。
2. 在控制台复制你的 API Key。
3. 设置为环境变量或直接传入:
```bash
export TIKHUB_API_KEY="YOUR_API_KEY"
```
## 快速开始
```python
from tikhub import TikHub
client = TikHub(api_key="YOUR_API_KEY")
# 与 OpenAPI 规范 1:1 对应 — 资源 = 标签, 方法 = 路径末段
video = client.douyin_web.fetch_one_video(aweme_id="7251234567890123456")
print(video.aweme_detail.desc)
client.close()
```
推荐使用上下文管理器:
```python
with TikHub(api_key="YOUR_API_KEY") as client:
health = client.health_check.check()
print(health.status)
```
## 异步用法
```python
import asyncio
from tikhub import AsyncTikHub
async def main():
async with AsyncTikHub(api_key="YOUR_API_KEY") as client:
video = await client.douyin_web.fetch_one_video(aweme_id="...")
print(video.aweme_detail.desc)
asyncio.run(main())
```
## 配置
构造函数接受一个必需参数和少量可选参数:
```python
TikHub(
api_key=None, # str | None — 默认读取 $TIKHUB_API_KEY
timeout=30, # float | None — 总请求超时时间(秒)
base_url=None, # str | None — 仅在使用私有镜像时覆盖
# 高级选项(较少使用):
max_retries=3,
proxy=None,
user_agent=None,
parse_response=True,
http_client=None, # 传入自定义 httpx.Client
)
```
这就是全部的配置项。没有 `ClientConfig` 对象 — 所有选项都是扁平化的关键字参数。
## 命名规则
SDK 由 TikHub OpenAPI 规范机械化生成。两条规则:
1. **资源属性** = OpenAPI 标签,转小写,连字符转下划线,去掉 `-API` 后缀。
`Douyin-Web-API` -> `client.douyin_web`。`TikTok-App-V3-API` -> `client.tiktok_app_v3`。
2. **方法名** = API 路径的**最后一段,保持原样**。
`/api/v1/douyin/web/fetch_one_video` -> `client.douyin_web.fetch_one_video(...)`。
参数名与 OpenAPI 规范完全一致。如果你能读懂 TikHub API 文档,你就已经会用这个 SDK 了。
## 状态
**100% 接口覆盖**,基于 TikHub OpenAPI 规范 V5.3.2。
| | |
|---|---|
| 资源 | **52**(每个 OpenAPI 标签一个) |
| 接口 | **1010 / 1010** |
| 测试 | 110 个通过 |
| 类型检查 | mypy `--strict` 71 个源文件全部通过 |
| 代码检查 | ruff 通过 |
资源层由 `spec/openapi.json` **机械化生成**。当 TikHub 规范更新后,运行以下命令刷新:
```bash
python scripts/refresh_spec.py # 拉取最新 openapi.json,打印差异
python scripts/generate_resources.py # 重新生成所有 52 个资源文件 + 客户端
python scripts/generate_docs.py # 重新生成 docs/reference.md
python scripts/verify_coverage.py # 验证 100% 覆盖
pytest -q # 110 个测试
```
## CLI 命令行工具
SDK 内置了一个轻量命令行工具:
```bash
export TIKHUB_API_KEY="YOUR_API_KEY"
tikhub health # 检查 API 连通性
tikhub fetch https://v.douyin.com/abc/ # 通用视频链接解析
tikhub user info # 账户套餐 + 配额
tikhub user usage # 今日请求量
```
所有命令输出 JSON 到标准输出 — 可通过管道传给 `jq` 或其他格式化工具。
## 文档
完整文档(mkdocs-material):身份认证、异步、异常处理、分页、重试、日志、CLI、迁移指南、命名规则,以及所有 1010 个接口的自动生成参考文档。
```bash
pip install -e ".[docs]"
mkdocs serve # http://127.0.0.1:8000
```
## 许可证
MIT。
================================================
FILE: README_ES.md
================================================
# TikHub API Python SDK
<p align="center">
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/stargazers"><img src="https://img.shields.io/github/stars/TikHub/TikHub-API-Python-SDK?style=social" alt="GitHub Stars"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/network/members"><img src="https://img.shields.io/github/forks/TikHub/TikHub-API-Python-SDK?style=social" alt="GitHub Forks"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/issues"><img src="https://img.shields.io/github/issues/TikHub/TikHub-API-Python-SDK" alt="GitHub Issues"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/pulls"><img src="https://img.shields.io/github/issues-pr/TikHub/TikHub-API-Python-SDK" alt="GitHub Pull Requests"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/blob/main/LICENSE"><img src="https://img.shields.io/github/license/TikHub/TikHub-API-Python-SDK" alt="License"></a>
</p>
<p align="center">
<a href="README.md">English</a> | <a href="README_CN.md">中文</a> | <a href="README_FR.md">Français</a> | Español | <a href="README_JP.md">日本語</a>
</p>
<p align="center">
<img src="TikHub_Banner.jpg" alt="TikHub Banner">
</p>
El SDK oficial de Python para la API de datos de redes sociales de [TikHub](https://tikhub.io) — una API REST unificada que proporciona acceso en tiempo real a **más de 16 plataformas de redes sociales**, incluyendo TikTok, Douyin, Instagram, YouTube, Twitter/X, Xiaohongshu (Red Note), Bilibili, Weibo, Threads, LinkedIn, Reddit, Kuaishou, WeChat, Lemon8, Zhihu, y más.
Diseñado para desarrolladores, científicos de datos e ingenieros de IA que necesitan datos estructurados de redes sociales a escala — para **entrenamiento de IA**, **análisis de influencers**, **monitoreo de tendencias**, **análisis de sentimientos**, **investigación de mercado** e **inteligencia competitiva**.
## ¿Por qué TikHub?
- **Más de 1000 endpoints** en 16 plataformas con una sola clave API
- **Datos en tiempo real** — detalles de vídeos, perfiles de usuarios, comentarios, resultados de búsqueda, transmisiones en vivo, contenido en tendencia y análisis de e-commerce
- **RESTful y nativo de OpenAPI** — cada endpoint está documentado en la [especificación OpenAPI](https://api.tikhub.io/openapi.json) y se puede probar vía [Swagger UI](https://api.tikhub.io)
- **Integración MCP** — conecta agentes de IA (Claude, LangChain, Coze, n8n) directamente a los datos sociales vía [Model Context Protocol](https://tikhub.io)
- **Datasets disponibles** — más de 1000 millones de registros estructurados pre-recolectados para entrenamiento e investigación
## ¿Por qué este SDK?
- **Cobertura del 100%** — 1010 / 1010 endpoints de la especificación OpenAPI V5.3.2, generados y verificados mecánicamente
- **Sync + async** — clientes `TikHub` y `AsyncTikHub` con APIs idénticas
- **Listo para producción** — reintentos automáticos con backoff exponencial, manejo de límites de tasa, jerarquía de errores estructurada
- **Type-safe** — compatible con `mypy --strict`, construido sobre `httpx` + `pydantic v2`
- **Cero configuración** — kwargs simples, sin objetos de configuración; establece una variable de entorno y listo
> **Versión:** `2.1.1` — Requiere Python 3.9+
## Plataformas soportadas
| Plataforma | Recurso | Endpoints |
|---|---|---|
| TikTok | `tiktok_web`, `tiktok_app_v3`, `tiktok_creator`, `tiktok_analytics`, `tiktok_ads`, `tiktok_shop_web` | 200+ |
| Douyin | `douyin_web`, `douyin_app_v3`, `douyin_search`, `douyin_billboard`, `douyin_creator`, `douyin_xingtu` | 400+ |
| Instagram | `instagram_v1`, `instagram_v2`, `instagram_v3` | 80+ |
| YouTube | `youtube_web`, `youtube_web_v2` | 50+ |
| Twitter / X | `twitter_web` | 13+ |
| Xiaohongshu (Red Note) | `xiaohongshu_web`, `xiaohongshu_app` (+ variantes v2/v3) | 80+ |
| Bilibili | `bilibili_web`, `bilibili_app` | 40+ |
| Weibo | `weibo_web`, `weibo_web_v2`, `weibo_app` | 30+ |
| Threads | `threads_web` | 10+ |
| LinkedIn | `linkedin_web` | 10+ |
| Reddit | `reddit_app` | 10+ |
| Kuaishou | `kuaishou_web`, `kuaishou_app` | 20+ |
| WeChat | `wechat_channels`, `wechat_media_platform_web` | 20+ |
| Lemon8 | `lemon8_app` | 10+ |
| Zhihu | `zhihu_web` | 30+ |
| Otros | `toutiao_web`, `toutiao_app`, `xigua_app_v2`, `pipixia_app`, `sora2` | 30+ |
## Instalación
```bash
pip install tikhub
```
Requiere Python 3.9+.
### Desde el código fuente
```bash
git clone https://github.com/TikHub/TikHub-API-Python-SDK.git
cd TikHub-API-Python-SDK
pip install -e ".[dev]"
pytest -q
```
## Obtener tu clave API
1. Ve a [https://user.tikhub.io/login](https://user.tikhub.io/login) y regístrate / inicia sesión.
2. Copia tu clave API desde el panel de control.
3. Establécela como variable de entorno o pásala directamente:
```bash
export TIKHUB_API_KEY="YOUR_API_KEY"
```
## Inicio rápido
```python
from tikhub import TikHub
client = TikHub(api_key="YOUR_API_KEY")
# 1:1 con la especificación OpenAPI — recurso = tag, método = basename de la ruta
video = client.douyin_web.fetch_one_video(aweme_id="7251234567890123456")
print(video.aweme_detail.desc)
client.close()
```
O con el gestor de contexto recomendado:
```python
with TikHub(api_key="YOUR_API_KEY") as client:
health = client.health_check.check()
print(health.status)
```
## Asíncrono
```python
import asyncio
from tikhub import AsyncTikHub
async def main():
async with AsyncTikHub(api_key="YOUR_API_KEY") as client:
video = await client.douyin_web.fetch_one_video(aweme_id="...")
print(video.aweme_detail.desc)
asyncio.run(main())
```
## Configuración
El constructor acepta un argumento obligatorio y algunos kwargs opcionales:
```python
TikHub(
api_key=None, # str | None — por defecto $TIKHUB_API_KEY
timeout=30, # float | None — timeout total de la solicitud en segundos
base_url=None, # str | None — solo sobrescribir para un espejo privado
# Avanzado (raro):
max_retries=3,
proxy=None,
user_agent=None,
parse_response=True,
http_client=None, # trae tu propio httpx.Client
)
```
## Reglas de nomenclatura
El SDK se genera mecánicamente a partir de la especificación OpenAPI de TikHub. Dos reglas:
1. **Atributo de recurso** = tag OpenAPI, en minúsculas, guiones -> underscores, `-API` eliminado.
`Douyin-Web-API` -> `client.douyin_web`. `TikTok-App-V3-API` -> `client.tiktok_app_v3`.
2. **Nombre del método** = el **último segmento de la ruta API, tal cual**.
`/api/v1/douyin/web/fetch_one_video` -> `client.douyin_web.fetch_one_video(...)`.
Los nombres de parámetros coinciden exactamente con la especificación OpenAPI.
## CLI
```bash
export TIKHUB_API_KEY="YOUR_API_KEY"
tikhub health # verificar conectividad de la API
tikhub fetch https://v.douyin.com/abc/ # analizador universal de URLs de vídeo
tikhub user info # plan + cuota
tikhub user usage # conteo de solicitudes de hoy
```
Todos los comandos imprimen JSON en stdout.
## Licencia
MIT.
================================================
FILE: README_FR.md
================================================
# TikHub API Python SDK
<p align="center">
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/stargazers"><img src="https://img.shields.io/github/stars/TikHub/TikHub-API-Python-SDK?style=social" alt="GitHub Stars"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/network/members"><img src="https://img.shields.io/github/forks/TikHub/TikHub-API-Python-SDK?style=social" alt="GitHub Forks"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/issues"><img src="https://img.shields.io/github/issues/TikHub/TikHub-API-Python-SDK" alt="GitHub Issues"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/pulls"><img src="https://img.shields.io/github/issues-pr/TikHub/TikHub-API-Python-SDK" alt="GitHub Pull Requests"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/blob/main/LICENSE"><img src="https://img.shields.io/github/license/TikHub/TikHub-API-Python-SDK" alt="License"></a>
</p>
<p align="center">
<a href="README.md">English</a> | <a href="README_CN.md">中文</a> | Français | <a href="README_ES.md">Español</a> | <a href="README_JP.md">日本語</a>
</p>
<p align="center">
<img src="TikHub_Banner.jpg" alt="TikHub Banner">
</p>
Le SDK Python officiel pour l'API de données de médias sociaux [TikHub](https://tikhub.io) — une API REST unifiée qui fournit un accès en temps réel à **16+ plateformes de médias sociaux**, dont TikTok, Douyin, Instagram, YouTube, Twitter/X, Xiaohongshu (Red Note), Bilibili, Weibo, Threads, LinkedIn, Reddit, Kuaishou, WeChat, Lemon8, Zhihu, et plus encore.
Conçu pour les développeurs, les data scientists et les ingénieurs IA qui ont besoin de données structurées de médias sociaux à grande échelle — pour l'**entraînement IA**, l'**analyse d'influenceurs**, la **veille de tendances**, l'**analyse de sentiments**, les **études de marché** et la **veille concurrentielle**.
## Pourquoi TikHub ?
- **1000+ endpoints** sur 16 plateformes avec une seule clé API
- **Données en temps réel** — détails vidéo, profils utilisateurs, commentaires, résultats de recherche, livestreams, contenu tendance et analyses e-commerce
- **RESTful & natif OpenAPI** — chaque endpoint est documenté dans la [spécification OpenAPI](https://api.tikhub.io/openapi.json) et testable via [Swagger UI](https://api.tikhub.io)
- **Intégration MCP** — connectez les agents IA (Claude, LangChain, Coze, n8n) directement aux données sociales via [Model Context Protocol](https://tikhub.io)
- **Datasets disponibles** — 1 milliard+ d'enregistrements structurés pré-collectés pour l'entraînement et la recherche
## Pourquoi ce SDK ?
- **Couverture à 100%** — 1010 / 1010 endpoints de la spécification OpenAPI V5.3.2, générés et vérifiés mécaniquement
- **Sync + async** — clients `TikHub` et `AsyncTikHub` avec des APIs identiques
- **Prêt pour la production** — nouvelles tentatives automatiques avec backoff exponentiel, gestion des limites de taux, hiérarchie d'erreurs structurée
- **Type-safe** — compatible `mypy --strict`, construit sur `httpx` + `pydantic v2`
- **Zéro configuration** — kwargs simples, pas d'objets de config ; définissez une variable d'environnement et c'est parti
> **Version :** `2.1.1` — Requiert Python 3.9+
## Plateformes supportées
| Plateforme | Ressource | Endpoints |
|---|---|---|
| TikTok | `tiktok_web`, `tiktok_app_v3`, `tiktok_creator`, `tiktok_analytics`, `tiktok_ads`, `tiktok_shop_web` | 200+ |
| Douyin | `douyin_web`, `douyin_app_v3`, `douyin_search`, `douyin_billboard`, `douyin_creator`, `douyin_xingtu` | 400+ |
| Instagram | `instagram_v1`, `instagram_v2`, `instagram_v3` | 80+ |
| YouTube | `youtube_web`, `youtube_web_v2` | 50+ |
| Twitter / X | `twitter_web` | 13+ |
| Xiaohongshu (Red Note) | `xiaohongshu_web`, `xiaohongshu_app` (+ variantes v2/v3) | 80+ |
| Bilibili | `bilibili_web`, `bilibili_app` | 40+ |
| Weibo | `weibo_web`, `weibo_web_v2`, `weibo_app` | 30+ |
| Threads | `threads_web` | 10+ |
| LinkedIn | `linkedin_web` | 10+ |
| Reddit | `reddit_app` | 10+ |
| Kuaishou | `kuaishou_web`, `kuaishou_app` | 20+ |
| WeChat | `wechat_channels`, `wechat_media_platform_web` | 20+ |
| Lemon8 | `lemon8_app` | 10+ |
| Zhihu | `zhihu_web` | 30+ |
| Autres | `toutiao_web`, `toutiao_app`, `xigua_app_v2`, `pipixia_app`, `sora2` | 30+ |
## Installation
```bash
pip install tikhub
```
Requiert Python 3.9+.
### Depuis les sources
```bash
git clone https://github.com/TikHub/TikHub-API-Python-SDK.git
cd TikHub-API-Python-SDK
pip install -e ".[dev]"
pytest -q
```
## Obtenir votre clé API
1. Rendez-vous sur [https://user.tikhub.io/login](https://user.tikhub.io/login) et inscrivez-vous / connectez-vous.
2. Copiez votre clé API depuis le tableau de bord.
3. Définissez-la comme variable d'environnement ou passez-la directement :
```bash
export TIKHUB_API_KEY="YOUR_API_KEY"
```
## Démarrage rapide
```python
from tikhub import TikHub
client = TikHub(api_key="YOUR_API_KEY")
# 1:1 avec la spécification OpenAPI — ressource = tag, méthode = basename du chemin
video = client.douyin_web.fetch_one_video(aweme_id="7251234567890123456")
print(video.aweme_detail.desc)
client.close()
```
Ou avec le gestionnaire de contexte recommandé :
```python
with TikHub(api_key="YOUR_API_KEY") as client:
health = client.health_check.check()
print(health.status)
```
## Asynchrone
```python
import asyncio
from tikhub import AsyncTikHub
async def main():
async with AsyncTikHub(api_key="YOUR_API_KEY") as client:
video = await client.douyin_web.fetch_one_video(aweme_id="...")
print(video.aweme_detail.desc)
asyncio.run(main())
```
## Configuration
Le constructeur accepte un argument obligatoire et quelques kwargs optionnels :
```python
TikHub(
api_key=None, # str | None — par défaut $TIKHUB_API_KEY
timeout=30, # float | None — timeout total de la requête en secondes
base_url=None, # str | None — à ne remplacer que pour un miroir privé
# Avancé (rare) :
max_retries=3,
proxy=None,
user_agent=None,
parse_response=True,
http_client=None, # apportez votre propre httpx.Client
)
```
## Règles de nommage
Le SDK est généré mécaniquement depuis la spécification OpenAPI de TikHub. Deux règles :
1. **Attribut de ressource** = tag OpenAPI, en minuscules, tirets -> underscores, `-API` supprimé.
`Douyin-Web-API` -> `client.douyin_web`. `TikTok-App-V3-API` -> `client.tiktok_app_v3`.
2. **Nom de méthode** = le **dernier segment du chemin API, tel quel**.
`/api/v1/douyin/web/fetch_one_video` -> `client.douyin_web.fetch_one_video(...)`.
Les noms de paramètres correspondent exactement à la spécification OpenAPI.
## CLI
```bash
export TIKHUB_API_KEY="YOUR_API_KEY"
tikhub health # vérifier la connectivité API
tikhub fetch https://v.douyin.com/abc/ # analyseur universel d'URL vidéo
tikhub user info # forfait + quota
tikhub user usage # nombre de requêtes du jour
```
Toutes les commandes affichent du JSON sur stdout.
## Licence
MIT.
================================================
FILE: README_JP.md
================================================
# TikHub API Python SDK
<p align="center">
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/stargazers"><img src="https://img.shields.io/github/stars/TikHub/TikHub-API-Python-SDK?style=social" alt="GitHub Stars"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/network/members"><img src="https://img.shields.io/github/forks/TikHub/TikHub-API-Python-SDK?style=social" alt="GitHub Forks"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/issues"><img src="https://img.shields.io/github/issues/TikHub/TikHub-API-Python-SDK" alt="GitHub Issues"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/pulls"><img src="https://img.shields.io/github/issues-pr/TikHub/TikHub-API-Python-SDK" alt="GitHub Pull Requests"></a>
<a href="https://github.com/TikHub/TikHub-API-Python-SDK/blob/main/LICENSE"><img src="https://img.shields.io/github/license/TikHub/TikHub-API-Python-SDK" alt="License"></a>
</p>
<p align="center">
<a href="README.md">English</a> | <a href="README_CN.md">中文</a> | <a href="README_FR.md">Français</a> | <a href="README_ES.md">Español</a> | 日本語
</p>
<p align="center">
<img src="TikHub_Banner.jpg" alt="TikHub Banner">
</p>
[TikHub](https://tikhub.io) ソーシャルメディアデータ API の公式 Python SDK — TikTok、Douyin(抖音)、Instagram、YouTube、Twitter/X、Xiaohongshu(小紅書)、Bilibili、Weibo、Threads、LinkedIn、Reddit、Kuaishou(快手)、WeChat、Lemon8、Zhihu(知乎)など **16以上のソーシャルメディアプラットフォーム** にリアルタイムアクセスできる統一 REST API。
**AI トレーニング**、**インフルエンサー分析**、**トレンド監視**、**感情分析**、**市場調査**、**競合インテリジェンス** など、大規模な構造化ソーシャルメディアデータを必要とする開発者、データサイエンティスト、AI エンジニア向けに構築されています。
## TikHub を選ぶ理由
- **1000以上のエンドポイント** — 16プラットフォームを1つの API キーで利用可能
- **リアルタイムデータ** — 動画詳細、ユーザープロフィール、コメント、検索結果、ライブ配信、トレンドコンテンツ、EC分析
- **RESTful & OpenAPI ネイティブ** — すべてのエンドポイントが [OpenAPI 仕様](https://api.tikhub.io/openapi.json) に文書化され、[Swagger UI](https://api.tikhub.io) でテスト可能
- **MCP 統合** — [Model Context Protocol](https://tikhub.io) 経由で AI エージェント(Claude、LangChain、Coze、n8n)をソーシャルメディアデータに直接接続
- **データセット** — トレーニングと研究用の10億件以上の構造化済みレコード
## この SDK を選ぶ理由
- **100% エンドポイントカバレッジ** — OpenAPI 仕様 V5.3.2 の 1010 / 1010 エンドポイント、機械的に生成・検証
- **同期 + 非同期** — `TikHub` と `AsyncTikHub` クライアント、API は完全に同一
- **本番環境対応** — 指数バックオフによる自動リトライ、レート制限処理、構造化エラー階層
- **型安全** — `mypy --strict` 対応、`httpx` + `pydantic v2` で構築
- **ゼロコンフィグ** — フラットな kwargs、設定オブジェクト不要;環境変数1つで利用開始
> **バージョン:** `2.1.1` — Python 3.9+ が必要
## 対応プラットフォーム
| プラットフォーム | リソース | エンドポイント数 |
|---|---|---|
| TikTok | `tiktok_web`, `tiktok_app_v3`, `tiktok_creator`, `tiktok_analytics`, `tiktok_ads`, `tiktok_shop_web` | 200+ |
| Douyin(抖音) | `douyin_web`, `douyin_app_v3`, `douyin_search`, `douyin_billboard`, `douyin_creator`, `douyin_xingtu` | 400+ |
| Instagram | `instagram_v1`, `instagram_v2`, `instagram_v3` | 80+ |
| YouTube | `youtube_web`, `youtube_web_v2` | 50+ |
| Twitter / X | `twitter_web` | 13+ |
| Xiaohongshu(小紅書) | `xiaohongshu_web`, `xiaohongshu_app`(+ v2/v3 バリアント) | 80+ |
| Bilibili | `bilibili_web`, `bilibili_app` | 40+ |
| Weibo(微博) | `weibo_web`, `weibo_web_v2`, `weibo_app` | 30+ |
| Threads | `threads_web` | 10+ |
| LinkedIn | `linkedin_web` | 10+ |
| Reddit | `reddit_app` | 10+ |
| Kuaishou(快手) | `kuaishou_web`, `kuaishou_app` | 20+ |
| WeChat | `wechat_channels`, `wechat_media_platform_web` | 20+ |
| Lemon8 | `lemon8_app` | 10+ |
| Zhihu(知乎) | `zhihu_web` | 30+ |
| その他 | `toutiao_web`, `toutiao_app`, `xigua_app_v2`, `pipixia_app`, `sora2` | 30+ |
## インストール
```bash
pip install tikhub
```
Python 3.9+ が必要です。
### ソースからインストール
```bash
git clone https://github.com/TikHub/TikHub-API-Python-SDK.git
cd TikHub-API-Python-SDK
pip install -e ".[dev]"
pytest -q
```
## API キーの取得
1. [https://user.tikhub.io/login](https://user.tikhub.io/login) にアクセスしてサインアップ / ログインします。
2. ダッシュボードから API キーをコピーします。
3. 環境変数として設定するか、直接渡します:
```bash
export TIKHUB_API_KEY="YOUR_API_KEY"
```
## クイックスタート
```python
from tikhub import TikHub
client = TikHub(api_key="YOUR_API_KEY")
# OpenAPI 仕様と 1:1 対応 — リソース = タグ、メソッド = パスのベースネーム
video = client.douyin_web.fetch_one_video(aweme_id="7251234567890123456")
print(video.aweme_detail.desc)
client.close()
```
推奨のコンテキストマネージャーを使用:
```python
with TikHub(api_key="YOUR_API_KEY") as client:
health = client.health_check.check()
print(health.status)
```
## 非同期
```python
import asyncio
from tikhub import AsyncTikHub
async def main():
async with AsyncTikHub(api_key="YOUR_API_KEY") as client:
video = await client.douyin_web.fetch_one_video(aweme_id="...")
print(video.aweme_detail.desc)
asyncio.run(main())
```
## 設定
コンストラクタは1つの必須引数といくつかのオプション kwargs を受け取ります:
```python
TikHub(
api_key=None, # str | None — デフォルトは $TIKHUB_API_KEY
timeout=30, # float | None — リクエストの合計タイムアウト(秒)
base_url=None, # str | None — プライベートミラー用のみ
# 上級(まれ):
max_retries=3,
proxy=None,
user_agent=None,
parse_response=True,
http_client=None, # 独自の httpx.Client を使用
)
```
## 命名規則
SDK は TikHub OpenAPI 仕様から機械的に生成されます。2つのルール:
1. **リソース属性** = OpenAPI タグを小文字化、ハイフンをアンダースコアに変換、`-API` を除去。
`Douyin-Web-API` -> `client.douyin_web`。`TikTok-App-V3-API` -> `client.tiktok_app_v3`。
2. **メソッド名** = API パスの**最後のセグメントをそのまま使用**。
`/api/v1/douyin/web/fetch_one_video` -> `client.douyin_web.fetch_one_video(...)`。
パラメータ名は OpenAPI 仕様と完全に一致します。
## CLI
```bash
export TIKHUB_API_KEY="YOUR_API_KEY"
tikhub health # API 接続確認
tikhub fetch https://v.douyin.com/abc/ # ユニバーサル動画 URL パーサー
tikhub user info # プラン + クォータ
tikhub user usage # 本日のリクエスト数
```
すべてのコマンドは JSON を標準出力に表示します。
## ライセンス
MIT。
================================================
FILE: docs/async.md
================================================
# Async
The SDK is async-first. `AsyncTikHub` has the **same API surface** as `TikHub`, just with `await` in front of every method call.
## Basic use
```python
import asyncio
from tikhub import AsyncTikHub
async def main():
async with AsyncTikHub(api_key="YOUR_API_KEY") as client:
video = await client.douyin_web.fetch_one_video(aweme_id="7251...")
print(video)
asyncio.run(main())
```
The async client **must** be used as a context manager (`async with`) so the underlying `httpx.AsyncClient` shuts down cleanly.
## Concurrent requests
The whole point of async is fanning out — fetch many endpoints in parallel:
```python
import asyncio
from tikhub import AsyncTikHub
async def main():
async with AsyncTikHub() as client:
ids = ["7251...", "7252...", "7253...", "7254..."]
videos = await asyncio.gather(*[
client.douyin_web.fetch_one_video(aweme_id=i) for i in ids
])
for v in videos:
print(v)
asyncio.run(main())
```
`httpx` pools connections automatically — there's no extra setup.
## Mixing sync code in an async context
If you accidentally call the sync `TikHub` inside an `async def`, the SDK detects the running loop and raises a clear error pointing you at `AsyncTikHub`. To use the synchronous client from inside an async function, run it in a thread:
```python
import anyio
from tikhub import TikHub
async def main():
sync_client = TikHub(api_key="sk-...")
video = await anyio.to_thread.run_sync(
lambda: sync_client.douyin_web.fetch_one_video(aweme_id="...")
)
```
But the cleaner choice is just to use `AsyncTikHub`.
## Lifecycle
| | Sync | Async |
|---|---|---|
| Construct | `TikHub(api_key=...)` | `AsyncTikHub(api_key=...)` |
| Recommended | `with TikHub() as c:` | `async with AsyncTikHub() as c:` |
| Explicit close | `client.close()` | `await client.aclose()` |
================================================
FILE: docs/authentication.md
================================================
# Authentication
TikHub uses bearer-token authentication. The SDK supports exactly this — no API-key-in-query, no basic auth, no OAuth flow.
## Setting your API key
The constructor reads from three sources, in priority order:
1. **Explicit argument** — `TikHub(api_key="YOUR_API_KEY")`
2. **Environment variable** — `$TIKHUB_API_KEY`
3. None — raises `TikHubConfigError` on the first request.
```python
import os
from tikhub import TikHub
# Explicit
client = TikHub(api_key="YOUR_API_KEY")
# Or via environment
os.environ["TIKHUB_API_KEY"] = "YOUR_API_KEY"
client = TikHub()
```
## Errors
If the key is missing or wrong:
```python
from tikhub import TikHub, TikHubAuthError, TikHubConfigError
try:
with TikHub() as client: # no key set anywhere
client.health_check.check()
except TikHubConfigError as exc:
print(exc) # "No API key provided. Pass api_key= or set $TIKHUB_API_KEY."
try:
with TikHub(api_key="sk-bogus") as client:
client.health_check.check()
except TikHubAuthError as exc:
print(exc.status_code) # 401
print(exc.response_body) # upstream error message
```
## Custom headers
If you need additional headers (e.g. for telemetry), pass your own `httpx.Client`:
```python
import httpx
from tikhub import TikHub
http = httpx.Client(
base_url="https://api.tikhub.io",
headers={"X-My-App": "production"},
)
client = TikHub(api_key="sk-...", http_client=http)
```
The SDK still injects the `Authorization: Bearer …` header per request, so your client is never mutated.
## Custom user agent
```python
client = TikHub(api_key="sk-...", user_agent="my-app/2.1.0")
```
If unset, the SDK sends `tikhub-py/<version>`.
================================================
FILE: docs/changelog.md
================================================
# Changelog
The full changelog lives at [`CHANGELOG.md`](https://github.com/TikHub/TikHub-API-Python-SDK-V2/blob/main/CHANGELOG.md) in the repo root.
================================================
FILE: docs/cli.md
================================================
# CLI
The `tikhub` package ships an optional command-line wrapper for ad-hoc data extraction. Install it with the `cli` extra:
```bash
pip install "tikhub[cli]"
```
This adds [`typer`](https://typer.tiangolo.com) as a dependency and registers a `tikhub` console script.
## Authenticate
Set `TIKHUB_API_KEY` in your environment so you don't have to pass it on every call:
```bash
export TIKHUB_API_KEY="YOUR_API_KEY"
```
## Commands
### `tikhub health`
Verifies your API key and the TikHub API is reachable.
```bash
tikhub health
```
### `tikhub fetch <url>`
Universal video URL parser — pass a Douyin / TikTok / Bilibili / Xiaohongshu / etc. share URL and the SDK uses the `hybrid_parsing` endpoint to figure out the platform and pull the data.
```bash
tikhub fetch https://v.douyin.com/abc/
tikhub fetch https://www.tiktok.com/@user/video/7251234567890
```
### `tikhub user info`
Show your TikHub account info — quota, plan, etc.
```bash
tikhub user info
```
### `tikhub user usage`
Show your daily request usage.
```bash
tikhub user usage
```
## Output
Every command prints JSON to stdout. Pipe it to `jq`, `python -m json.tool`, or your favourite formatter:
```bash
tikhub health | jq .
tikhub fetch https://v.douyin.com/abc/ | jq '.aweme_detail.desc'
```
## Help
```bash
tikhub --help
tikhub user --help
tikhub fetch --help
```
## Why so few commands?
The CLI deliberately stays small. The Python SDK is the primary interface — the CLI is for `curl`-style ad-hoc fetches. If you need to script a complex pipeline, write a Python script importing `tikhub` directly.
================================================
FILE: docs/errors.md
================================================
# Errors
Every HTTP failure becomes a typed exception that carries the original request, the parsed response body, and the upstream `x-request-id` so you can debug without re-running the call.
## Hierarchy
```text
TikHubError base class for everything raised by the SDK
├── TikHubConfigError bad config (missing API key, etc.)
├── TikHubConnectionError network failed before any HTTP response
│ ├── TikHubTimeoutError
│ └── TikHubProxyError
├── TikHubHTTPError base for any 4xx / 5xx
│ ├── TikHubBadRequestError 400, 422
│ ├── TikHubAuthError 401
│ ├── TikHubPermissionError 403
│ ├── TikHubNotFoundError 404
│ ├── TikHubRateLimitError 429 — exposes .retry_after
│ ├── TikHubServerError 5xx
│ └── TikHubUpstreamError 502 / 503 / 504 (TikHub couldn't reach platform)
├── TikHubValidationError response body failed Pydantic parsing
└── TikHubFeatureRemovedError method targets a deprecated tag
```
All HTTP errors carry:
| Attribute | Description |
|---|---|
| `status_code` | The HTTP status |
| `method` | `"GET"`, `"POST"`, … |
| `url` | The full URL we requested |
| `params` | Query parameters dict |
| `request_body` | Whatever we sent as JSON / multipart |
| `response_body` | The parsed response body (dict if JSON, else text) |
| `request_id` | The `x-request-id` header from TikHub |
| `headers` | Response headers (auth header always redacted) |
## Catching specific errors
```python
from tikhub import (
TikHub,
TikHubAuthError,
TikHubNotFoundError,
TikHubRateLimitError,
)
with TikHub() as client:
try:
client.douyin_web.fetch_one_video(aweme_id="not-a-real-id")
except TikHubNotFoundError as exc:
print(f"404: {exc.url} — {exc.response_body}")
except TikHubRateLimitError as exc:
print(f"Rate limited; retry after {exc.retry_after}s")
except TikHubAuthError as exc:
print("API key rejected:", exc.response_body)
```
## Retries are automatic for transient failures
You don't need to handle 5xx, 429, or transient network errors yourself — the SDK retries them with exponential backoff. See [Retries & rate limits](retries.md).
## Producing a debug dump
```python
try:
client.douyin_web.fetch_one_video(aweme_id="bad")
except TikHubHTTPError as exc:
# repr() returns a multi-line dump suitable for bug reports.
print(repr(exc))
```
================================================
FILE: docs/index.md
================================================
# tikhub
> Modern Python SDK for the [TikHub](https://tikhub.io) social-media data API.
`tikhub` is a hand-architected, async-first Python SDK that mirrors the **entire** TikHub OpenAPI spec — every method name and every parameter matches the API exactly. There is no translation layer.
```python
from tikhub import TikHub
with TikHub(api_key="YOUR_API_KEY") as client:
video = client.douyin_web.fetch_one_video(aweme_id="7251234567890123456")
print(video)
```
## At a glance
- :material-check-circle: **100% endpoint coverage** — 1010 / 1010 endpoints from spec V5.3.2
- :material-check-circle: **52 resources** — one per OpenAPI tag, flat namespace
- :material-check-circle: **Async-first** with a parallel sync surface
- :material-check-circle: **Typed exceptions** with status-code mapping and request-id
- :material-check-circle: **Built-in retries** with exponential backoff and `Retry-After` honouring
- :material-check-circle: **Pagination helpers** for cursor / page / offset patterns
- :material-check-circle: **Mechanical codegen** — refresh from `openapi.json` in one command
## Naming rules
The SDK is mechanically derived from the TikHub OpenAPI spec. Two rules govern everything:
1. **Resource attribute** = OpenAPI tag, lowercased, dashes → underscores, `-API` stripped.
`Douyin-Web-API` → `client.douyin_web`. `TikTok-App-V3-API` → `client.tiktok_app_v3`.
2. **Method name** = the **last segment of the path, verbatim**.
`/api/v1/douyin/web/fetch_one_video` → `client.douyin_web.fetch_one_video(...)`.
`/api/v1/douyin/web/handler_user_profile` → `client.douyin_web.handler_user_profile(...)`.
Parameter names also match the OpenAPI spec verbatim. If you can read the [TikHub API docs](https://docs.tikhub.io), you already know how to use the SDK.
See the [API reference](reference.md) for the complete catalogue of resources and methods.
## Install
The package isn't on PyPI yet. Install directly from GitHub:
```bash
# Latest from the v2.1.0 branch
pip install "git+https://github.com/TikHub/TikHub-API-Python-SDK-V2.git@v2.1.0"
# With the optional CLI extra
pip install "tikhub[cli] @ git+https://github.com/TikHub/TikHub-API-Python-SDK-V2.git@v2.1.0"
# Pin to a specific commit (recommended for production)
pip install "git+https://github.com/TikHub/TikHub-API-Python-SDK-V2.git@<commit-sha>"
```
Once merged to `main` you can drop the `@v2.1.0` ref. Once published to PyPI you'll be able to use plain `pip install tikhub`.
Requires Python 3.9+.
## Next steps
- [Quickstart](quickstart.md) — 5-minute runnable tour
- [Authentication](authentication.md)
- [API reference](reference.md) — all 1010 endpoints
- [Migrating from V2](migrating-from-v2.md)
================================================
FILE: docs/logging.md
================================================
# Logging
The SDK uses the standard library `logging` module under the `tikhub.*` namespace. It never installs handlers — your application configures its own root logger.
## Logger namespaces
| Logger | Level | What it emits |
|---|---|---|
| `tikhub.requests` | DEBUG | One line per request: method, URL, status, duration, request id |
| `tikhub.requests.bodies` | DEBUG | Request and response bodies (auth header always redacted) |
| `tikhub.retries` | INFO | "Retrying X after Ys (attempt N/M, reason: …)" |
| `tikhub.rate_limit` | WARNING | "Rate limited, sleeping Xs" |
| `tikhub.deprecation` | WARNING | When you call a method targeting a deprecated upstream endpoint |
## Quick setup
```python
import logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(levelname)-7s %(name)s %(message)s",
)
logging.getLogger("tikhub.requests").setLevel(logging.DEBUG)
```
That's it — every request the SDK makes will now print to stderr.
## Structured logging
The SDK doesn't ship a JSON formatter. If you use `structlog`, `loguru`, or another structured-logging library, configure your root handler the way you normally would and the SDK's emissions will flow through.
## OpenTelemetry
Because the SDK uses a vanilla `httpx.AsyncClient`, the official `opentelemetry-instrumentation-httpx` package works out of the box:
```python
from opentelemetry.instrumentation.httpx import HTTPXClientInstrumentor
HTTPXClientInstrumentor().instrument()
```
Every TikHub request will now produce a span with the URL, status, and duration.
## Auth header redaction
The bearer token is **always** redacted in any log output the SDK produces. This is not configurable.
================================================
FILE: docs/migrating-from-v2.md
================================================
# Migrating from `tikhub_sdk_v2`
`tikhub` (V2.1) is a clean-slate replacement for `tikhub_sdk_v2`. Both packages can be installed side-by-side, so you can migrate file-by-file.
```bash
pip install tikhub_sdk_v2 tikhub # both at once
```
## Why move
| | V1.x (`tikhub_sdk_v2`) | V2.1 (`tikhub`) |
|---|---|---|
| Package | `tikhub_sdk_v2` | `tikhub` |
| Spec version targeted | V1.0.0 (~28 tags) | **V5.3.2 (52 tags, 1010 endpoints)** |
| Naming | `BodyFetchHotTotalHighFanListApiV1DouyinBillboardFetchHotTotalHighFanListPost` | `client.douyin_billboard.fetch_hot_total_high_fan_list(...)` |
| Async | "library: asyncio" was set in the generator config but the emitted code is sync | Native `httpx.AsyncClient` |
| Python | 2 / 3 (with `six`) | **3.9+** |
| Default host | `localhost` (you had to override every time) | `https://api.tikhub.io` |
| Retries / pagination / typed errors | none | built in |
## Construction
=== "V1.x"
```python
from tikhub_sdk_v2 import Configuration, ApiClient, DouyinWebAPIApi
cfg = Configuration(host="https://api.tikhub.io")
cfg.access_token = "YOUR_API_KEY"
api_client = ApiClient(cfg)
api = DouyinWebAPIApi(api_client)
```
=== "V2.1"
```python
from tikhub import TikHub
client = TikHub(api_key="YOUR_API_KEY")
```
## Calling an endpoint
The V2.1 method name is **the last segment of the path, verbatim**. The parameter names are the OpenAPI parameter names verbatim. So you can find any method just by looking at the API doc URL.
=== "V1.x"
```python
api = DouyinWebAPIApi(api_client)
video = api.fetch_one_video_api_v1_douyin_web_fetch_one_video_get(
aweme_id="7251234567890123456",
)
```
=== "V2.1"
```python
video = client.douyin_web.fetch_one_video(aweme_id="7251234567890123456")
```
## Method mapping
| V1.x class | V2.1 attribute |
|---|---|
| `DouyinWebAPIApi` | `client.douyin_web` |
| `DouyinAppV3APIApi` | `client.douyin_app_v3` |
| `DouyinBillboardAPIApi` | `client.douyin_billboard` |
| `DouyinXingtuAPIApi` | `client.douyin_xingtu` |
| `TikTokWebAPIApi` | `client.tiktok_web` |
| `TikTokAppV3APIApi` | `client.tiktok_app_v3` |
| `TikTokInteractionAPIApi` | `client.tiktok_interaction` |
| `XiaohongshuWebAPIApi` | `client.xiaohongshu_web` |
| `XiaohongshuWebV2APIApi` | `client.xiaohongshu_web_v2` |
| `BilibiliWebAPIApi` | `client.bilibili_web` |
| `KuaishouWebAPIApi` | `client.kuaishou_web` |
| `KuaishouAppAPIApi` | `client.kuaishou_app` |
| `WeiboWebAPIApi` | `client.weibo_web` |
| `TwitterWebAPIApi` | `client.twitter_web` |
| `YouTubeWebAPIApi` | `client.youtube_web` |
| `WeChatMediaPlatformWebAPIApi` | `client.wechat_media_platform_web` |
| `ZhihuWebAPIApi` | `client.zhihu_web` |
| `ToutiaoWebAPIApi` / `ToutiaoAppAPIApi` | `client.toutiao_web` / `client.toutiao_app` |
| `TempMailAPIApi` | `client.temp_mail` |
| `TikHubUserAPIApi` | `client.tikhub_user` |
| `HealthCheckApi` | `client.health_check` |
| `HybridParsingApi` | `client.hybrid_parsing` |
| `IOSShortcutApi` | `client.ios_shortcut` |
For the method on each class, drop the `_api_v1_..._get` / `_post` suffix that V2 added. The V2.1 method is the path basename.
## Methods that no longer exist
These V1.x classes target endpoints that have been **removed** from the upstream API and are not in V2.1:
- `CaptchaSolverApi` — service discontinued
- `NetEaseCloudMusicAPIApi` — service discontinued
- `InstagramWebAndAPPAPIApi` — replaced by `client.instagram_v1` / `v2` / `v3`
- `DouyinAppV1APIApi`, `DouyinAppV2APIApi` — replaced by `client.douyin_app_v3`
- `TikTokAppV2APIApi` — replaced by `client.tiktok_app_v3`
If your code imports any of these classes you'll need to either drop the call entirely (for the discontinued ones) or rewrite it against the new SDK.
## Errors
V1.x raised `ApiException` for any non-2xx response, with the body in `.body`. V2.1 raises a typed exception per status code:
=== "V1.x"
```python
from tikhub_sdk_v2.exceptions import ApiException
try:
api.fetch_one_video_api_v1_douyin_web_fetch_one_video_get(aweme_id="bad")
except ApiException as exc:
if exc.status == 404:
...
```
=== "V2.1"
```python
from tikhub import TikHubNotFoundError
try:
client.douyin_web.fetch_one_video(aweme_id="bad")
except TikHubNotFoundError as exc:
print(exc.url, exc.response_body, exc.request_id)
```
See the [errors](errors.md) page for the full hierarchy.
## What about types?
V1.x returned model objects with `to_dict()` / `to_str()` boilerplate. The SDK currently returns raw `dict` for every method (Pydantic v2 model layer is on the roadmap). To opt out of any future parsing entirely, pass `parse_response=False` to the constructor.
================================================
FILE: docs/naming.md
================================================
# Naming rules
The SDK is mechanically derived from the TikHub OpenAPI spec. There are exactly **two rules** that determine every name in the SDK.
## Rule 1: Resource attribute = OpenAPI tag
Lowercased, dashes → underscores, `-API` suffix stripped.
| OpenAPI tag | SDK attribute |
|---|---|
| `Douyin-Web-API` | `client.douyin_web` |
| `Douyin-App-V3-API` | `client.douyin_app_v3` |
| `TikTok-Shop-Web-API` | `client.tiktok_shop_web` |
| `Xiaohongshu-Web-V3-API` | `client.xiaohongshu_web_v3` |
| `iOS-Shortcut` | `client.ios_shortcut` |
| `Health-Check` | `client.health_check` |
| `Hybrid-Parsing` | `client.hybrid_parsing` |
## Rule 2: Method name = path basename
The **last segment of the OpenAPI path, verbatim**. We never strip `fetch_` / `get_` / `handler_`, never rename for "consistency", never pluralize, never abbreviate.
| OpenAPI path | SDK method |
|---|---|
| `/api/v1/douyin/web/fetch_one_video` | `client.douyin_web.fetch_one_video(...)` |
| `/api/v1/douyin/web/handler_user_profile` | `client.douyin_web.handler_user_profile(...)` |
| `/api/v1/douyin/web/handler_user_profile_v2` | `client.douyin_web.handler_user_profile_v2(...)` |
| `/api/v1/tiktok/web/generate_xbogus` | `client.tiktok_web.generate_xbogus(...)` |
| `/api/v1/sora2/upload_image` | `client.sora2.upload_image(...)` |
## Rule 3 (corollary): Parameter names = OpenAPI parameter names
If the API documents `aweme_id`, the SDK kwarg is `aweme_id`. If the API documents `uniqueId` (camelCase), the SDK kwarg is `uniqueId`. We do not snake_case or rename for stylistic consistency — that would create a translation layer.
```python
client.douyin_web.fetch_one_video(aweme_id="...") # snake_case from API
client.tiktok_web.fetch_user_profile(uniqueId="charlidamelio") # camelCase from API
```
## Why so strict?
- **Discoverability** — anyone reading the [TikHub API docs](https://docs.tikhub.io) can use the SDK without a second mental model.
- **Maintainability** — adding a new endpoint to the API takes one command (`python scripts/refresh_spec.py && python scripts/generate_resources.py`). There's no per-endpoint hand-curation.
- **No drift** — there's no V2-style `fetch_one_video_api_v1_douyin_web_fetch_one_video_get` boilerplate, and no risk of two SDK methods quietly meaning slightly different things.
## Versioned methods
When TikHub ships V1 / V2 / V3 of the same operation, the SDK exposes **all of them** as distinct methods — we don't pick a "best" one and hide the others.
```python
v1 = client.douyin_web.fetch_one_video(aweme_id="...")
v2 = client.douyin_web.fetch_one_video_v2(aweme_id="...")
```
## Deprecated methods
When the upstream spec marks an operation deprecated, the SDK still ships it (with the same verbatim name) and adds a deprecation note to the docstring. Methods are only removed if they disappear from the upstream spec entirely.
================================================
FILE: docs/pagination.md
================================================
# Pagination
The SDK ships three paginator classes that cover every list-style endpoint in the spec:
| Pattern | Class | Used by |
|---|---|---|
| `cursor` / `max_cursor` + `has_more` | `CursorPaginator` | Most Douyin and TikTok user-content listings |
| `page` + `count` | `PagePaginator` | TikTok web search, Bilibili comments |
| `offset` + `limit` | `OffsetPaginator` | Some Instagram and Reddit feeds |
All three implement both **sync iteration** and **async iteration** with the same surface.
## Iterating
```python
from tikhub import TikHub
with TikHub() as client:
pager = client.tiktok_app_v3.fetch_user_post_videos(sec_uid="MS4wLjA...")
# Lazy iteration — fetches pages on demand.
for video in pager:
print(video["aweme_id"])
```
## Limiting how much you fetch
```python
first_50 = pager.first(50) # eager, capped at 50 items
```
## Page-by-page
```python
pager = client.tiktok_app_v3.fetch_user_post_videos(sec_uid="MS4wLjA...")
page = pager.next_page()
print(pager.cursor, pager.has_more)
```
## Async
```python
import asyncio
from tikhub import AsyncTikHub
async def main():
async with AsyncTikHub() as client:
pager = client.tiktok_app_v3.fetch_user_post_videos(sec_uid="...")
async for video in pager:
print(video["aweme_id"])
first_100 = await pager.afirst(100)
asyncio.run(main())
```
## How the SDK detects paginated endpoints
The codegen marks any endpoint whose query parameters include `cursor`, `max_cursor`, `page`, or `offset` AND whose summary suggests a list. The wrapper paginator inspects the upstream response keys (`has_more`, `next_cursor`, etc.) automatically.
If you hit an endpoint that the SDK didn't detect as paginated but should be, please [open an issue](https://github.com/TikHub/TikHub-API-Python-SDK-V2/issues) — we'll add it.
================================================
FILE: docs/quickstart.md
================================================
# Quickstart
A 5-minute tour of the `tikhub` SDK.
## Install
```bash
pip install tikhub
```
Requires Python 3.9+.
## Authenticate
Set your API key as an environment variable (recommended):
```bash
export TIKHUB_API_KEY="YOUR_API_KEY"
```
Or pass it explicitly:
```python
from tikhub import TikHub
client = TikHub(api_key="YOUR_API_KEY")
```
## Your first call
```python
from tikhub import TikHub
with TikHub() as client:
health = client.health_check.check()
print(health)
```
If your API key works, you'll see a JSON dict with `code: 200`.
## Calling a real endpoint
The SDK is mechanically derived from the TikHub OpenAPI spec. Every method
matches an endpoint exactly.
```python
with TikHub() as client:
# GET /api/v1/douyin/web/fetch_one_video
video = client.douyin_web.fetch_one_video(aweme_id="7251234567890123456")
print(video)
# GET /api/v1/tiktok/app/v3/handler_user_profile
user = client.tiktok_app_v3.handler_user_profile(sec_user_id="MS4wLjA...")
# POST /api/v1/douyin/search/fetch_video_search_v2
results = client.douyin_search.fetch_video_search_v2(keyword="cats")
```
The two rules to remember:
1. **Resource attribute** = OpenAPI tag, lowercased, dashes → underscores, `-API` stripped.
2. **Method name** = the last segment of the path, verbatim.
3. **Parameter names** = the OpenAPI parameter names, verbatim.
If you can read the [TikHub API docs](https://docs.tikhub.io), you already know how to use the SDK.
## Async
Identical surface, just `await` everything:
```python
import asyncio
from tikhub import AsyncTikHub
async def main():
async with AsyncTikHub() as client:
video = await client.douyin_web.fetch_one_video(aweme_id="...")
print(video)
asyncio.run(main())
```
## Errors
Every HTTP failure becomes a typed exception:
```python
from tikhub import TikHub, TikHubNotFoundError, TikHubRateLimitError
with TikHub() as client:
try:
client.douyin_web.fetch_one_video(aweme_id="invalid")
except TikHubNotFoundError as exc:
print("Not found:", exc.url, exc.response_body)
except TikHubRateLimitError as exc:
print(f"Slow down — retry after {exc.retry_after}s")
```
The full hierarchy is documented in [errors.md](errors.md).
## Pagination
List endpoints return a paginator. Iterate, take the first N, or drive
page-by-page:
```python
with TikHub() as client:
pager = client.tiktok_app_v3.fetch_user_post_videos(sec_uid="MS4wLjA...")
# iterate every video lazily
for video in pager:
print(video["aweme_id"])
# or just the first 100
first_100 = pager.first(100)
```
## Configuration
The constructor takes only the things you actually need:
```python
TikHub(
api_key=None, # str | None — defaults to $TIKHUB_API_KEY
timeout=30, # float | None — total request timeout in seconds
base_url=None, # str | None — only override for a private mirror
max_retries=3,
proxy=None,
user_agent=None,
parse_response=True, # set False to receive raw dicts
http_client=None, # bring your own httpx.Client
transport=None, # bring your own httpx.BaseTransport (e.g. for tests)
)
```
That's the entire surface. There is no separate `ClientConfig` object.
================================================
FILE: docs/reference.md
================================================
# API reference
All **1010** endpoints across **52** resources, generated from `spec/openapi.json` (V5.3.2).
Method names match the OpenAPI path basename verbatim. Parameter names match the OpenAPI parameter names verbatim. See [naming rules](index.md#naming-rules).
## Resources
- [`client.bilibili_app`](#clientbilibiliapp) — `BilibiliApp`, 11 endpoints
- [`client.bilibili_web`](#clientbilibiliweb) — `BilibiliWeb`, 30 endpoints
- [`client.demo`](#clientdemo) — `Demo`, 9 endpoints
- [`client.douyin_app_v3`](#clientdouyinappv3) — `DouyinAppV3`, 47 endpoints
- [`client.douyin_billboard`](#clientdouyinbillboard) — `DouyinBillboard`, 31 endpoints
- [`client.douyin_creator`](#clientdouyincreator) — `DouyinCreator`, 16 endpoints
- [`client.douyin_creator_v2`](#clientdouyincreatorv2) — `DouyinCreatorV2`, 14 endpoints
- [`client.douyin_search`](#clientdouyinsearch) — `DouyinSearch`, 19 endpoints
- [`client.douyin_web`](#clientdouyinweb) — `DouyinWeb`, 76 endpoints
- [`client.douyin_xingtu`](#clientdouyinxingtu) — `DouyinXingtu`, 22 endpoints
- [`client.douyin_xingtu_v2`](#clientdouyinxingtuv2) — `DouyinXingtuV2`, 21 endpoints
- [`client.health_check`](#clienthealthcheck) — `HealthCheck`, 1 endpoints
- [`client.hybrid_parsing`](#clienthybridparsing) — `HybridParsing`, 1 endpoints
- [`client.instagram_v1`](#clientinstagramv1) — `InstagramV1`, 29 endpoints
- [`client.instagram_v2`](#clientinstagramv2) — `InstagramV2`, 27 endpoints
- [`client.instagram_v3`](#clientinstagramv3) — `InstagramV3`, 32 endpoints
- [`client.ios_shortcut`](#clientiosshortcut) — `IosShortcut`, 1 endpoints
- [`client.kuaishou_app`](#clientkuaishouapp) — `KuaishouApp`, 20 endpoints
- [`client.kuaishou_web`](#clientkuaishouweb) — `KuaishouWeb`, 13 endpoints
- [`client.lemon8_app`](#clientlemon8app) — `Lemon8App`, 16 endpoints
- [`client.linkedin_web`](#clientlinkedinweb) — `LinkedinWeb`, 25 endpoints
- [`client.pipixia_app`](#clientpipixiaapp) — `PipixiaApp`, 17 endpoints
- [`client.reddit_app`](#clientredditapp) — `RedditApp`, 24 endpoints
- [`client.sora2`](#clientsora2) — `Sora2`, 17 endpoints
- [`client.temp_mail`](#clienttempmail) — `TempMail`, 3 endpoints
- [`client.threads_web`](#clientthreadsweb) — `ThreadsWeb`, 11 endpoints
- [`client.tikhub_downloader`](#clienttikhubdownloader) — `TikhubDownloader`, 2 endpoints
- [`client.tikhub_user`](#clienttikhubuser) — `TikhubUser`, 6 endpoints
- [`client.tiktok_ads`](#clienttiktokads) — `TiktokAds`, 31 endpoints
- [`client.tiktok_analytics`](#clienttiktokanalytics) — `TiktokAnalytics`, 4 endpoints
- [`client.tiktok_app_v3`](#clienttiktokappv3) — `TiktokAppV3`, 75 endpoints
- [`client.tiktok_creator`](#clienttiktokcreator) — `TiktokCreator`, 14 endpoints
- [`client.tiktok_interaction`](#clienttiktokinteraction) — `TiktokInteraction`, 7 endpoints
- [`client.tiktok_shop_web`](#clienttiktokshopweb) — `TiktokShopWeb`, 15 endpoints
- [`client.tiktok_web`](#clienttiktokweb) — `TiktokWeb`, 59 endpoints
- [`client.toutiao_app`](#clienttoutiaoapp) — `ToutiaoApp`, 5 endpoints
- [`client.toutiao_web`](#clienttoutiaoweb) — `ToutiaoWeb`, 2 endpoints
- [`client.twitter_web`](#clienttwitterweb) — `TwitterWeb`, 13 endpoints
- [`client.wechat_channels`](#clientwechatchannels) — `WechatChannels`, 10 endpoints
- [`client.wechat_media_platform_web`](#clientwechatmediaplatformweb) — `WechatMediaPlatformWeb`, 10 endpoints
- [`client.weibo_app`](#clientweiboapp) — `WeiboApp`, 20 endpoints
- [`client.weibo_web`](#clientweiboweb) — `WeiboWeb`, 11 endpoints
- [`client.weibo_web_v2`](#clientweibowebv2) — `WeiboWebV2`, 33 endpoints
- [`client.xiaohongshu_app`](#clientxiaohongshuapp) — `XiaohongshuApp`, 12 endpoints
- [`client.xiaohongshu_app_v2`](#clientxiaohongshuappv2) — `XiaohongshuAppV2`, 21 endpoints
- [`client.xiaohongshu_web`](#clientxiaohongshuweb) — `XiaohongshuWeb`, 17 endpoints
- [`client.xiaohongshu_web_v2`](#clientxiaohongshuwebv2) — `XiaohongshuWebV2`, 18 endpoints
- [`client.xiaohongshu_web_v3`](#clientxiaohongshuwebv3) — `XiaohongshuWebV3`, 11 endpoints
- [`client.xigua_app_v2`](#clientxiguaappv2) — `XiguaAppV2`, 7 endpoints
- [`client.youtube_web`](#clientyoutubeweb) — `YoutubeWeb`, 21 endpoints
- [`client.youtube_web_v2`](#clientyoutubewebv2) — `YoutubeWebV2`, 19 endpoints
- [`client.zhihu_web`](#clientzhihuweb) — `ZhihuWeb`, 34 endpoints
---
## `client.bilibili_app`
**Class:** `tikhub.resources.bilibili_app.BilibiliApp` (sync) / `AsyncBilibiliApp` (async)
**Endpoints:** 11
| Method | Endpoint | Summary |
|---|---|---|
| `fetch_bangumi_tab()` | `GET /api/v1/bilibili/app/fetch_bangumi_tab` | 获取番剧推荐/Get bangumi tab |
| `fetch_cinema_tab()` | `GET /api/v1/bilibili/app/fetch_cinema_tab` | 获取影视推荐/Get cinema tab |
| `fetch_home_feed(idx=..., flush=..., pull=...)` | `GET /api/v1/bilibili/app/fetch_home_feed` | 获取主页推荐视频流/Get home feed |
| `fetch_one_video(av_id=..., bv_id=...)` | `GET /api/v1/bilibili/app/fetch_one_video` | 获取单个视频详情信息/Get single video data |
| `fetch_popular_feed(idx=..., last_param=...)` | `GET /api/v1/bilibili/app/fetch_popular_feed` | 获取热门推荐/Get popular feed |
| `fetch_reply_detail(root, av_id=..., bv_id=..., next_offset=..., ps=...)` | `GET /api/v1/bilibili/app/fetch_reply_detail` | 获取二级评论回复/Get reply detail |
| `fetch_search_all(keyword, page=..., page_size=..., order=...)` | `GET /api/v1/bilibili/app/fetch_search_all` | 综合搜索/search all |
| `fetch_search_by_type(keyword, search_type=..., page=..., page_size=..., order=...)` | `GET /api/v1/bilibili/app/fetch_search_by_type` | 分类搜索/ search by type |
| `fetch_user_info(user_id)` | `GET /api/v1/bilibili/app/fetch_user_info` | 获取用户信息/Get user info |
| `fetch_user_videos(user_id, post_filter=..., page=..., ps=...)` | `GET /api/v1/bilibili/app/fetch_user_videos` | 获取用户投稿视频/Get user videos |
| `fetch_video_comments(av_id=..., bv_id=..., mode=..., next_offset=...)` | `GET /api/v1/bilibili/app/fetch_video_comments` | 获取视频评论列表/Get video comments |
## `client.bilibili_web`
**Class:** `tikhub.resources.bilibili_web.BilibiliWeb` (sync) / `AsyncBilibiliWeb` (async)
**Endpoints:** 30
| Method | Endpoint | Summary |
|---|---|---|
| `bv_to_aid(bv_id)` | `GET /api/v1/bilibili/web/bv_to_aid` | 通过bv号获得视频aid号/Generate aid by bvid |
| `fetch_all_live_areas()` | `GET /api/v1/bilibili/web/fetch_all_live_areas` | 获取所有直播分区列表/Get a list of all live areas |
| `fetch_collect_folders(uid)` | `GET /api/v1/bilibili/web/fetch_collect_folders` | 获取用户所有收藏夹信息/Get user collection folders |
| `fetch_com_popular(pn=...)` | `GET /api/v1/bilibili/web/fetch_com_popular` | 获取综合热门视频信息/Get comprehensive popular video information |
| `fetch_comment_reply(bv_id, rpid, pn=...)` | `GET /api/v1/bilibili/web/fetch_comment_reply` | 获取视频下指定评论的回复/Get reply to the specified comment |
| `fetch_dynamic_detail(dynamic_id)` | `GET /api/v1/bilibili/web/fetch_dynamic_detail` | 获取动态详情/Get dynamic detail |
| `fetch_dynamic_detail_v2(dynamic_id)` | `GET /api/v1/bilibili/web/fetch_dynamic_detail_v2` | 获取动态详情v2/Get dynamic detail v2 |
| `fetch_general_search(keyword, order, page, page_size, duration=..., pubtime_begin_s=..., pubtime_end_s=...)` | `GET /api/v1/bilibili/web/fetch_general_search` | 获取综合搜索信息/Get general search data |
| `fetch_get_user_id(share_link)` | `GET /api/v1/bilibili/web/fetch_get_user_id` | 提取用户ID/Extract user ID |
| `fetch_hot_search(limit)` | `GET /api/v1/bilibili/web/fetch_hot_search` | 获取热门搜索信息/Get hot search data |
| `fetch_live_room_detail(room_id)` | `GET /api/v1/bilibili/web/fetch_live_room_detail` | 获取指定直播间信息/Get information of specified live room |
| `fetch_live_streamers(area_id, pn=...)` | `GET /api/v1/bilibili/web/fetch_live_streamers` | 获取指定分区正在直播的主播/Get live streamers of specified live area |
| `fetch_live_videos(room_id)` | `GET /api/v1/bilibili/web/fetch_live_videos` | 获取直播间视频流/Get live video data of specified room |
| `fetch_one_video(bv_id)` | `GET /api/v1/bilibili/web/fetch_one_video` | 获取单个视频详情信息/Get single video data |
| `fetch_one_video_v2(a_id, c_id)` | `GET /api/v1/bilibili/web/fetch_one_video_v2` | 获取单个视频详情信息V2/Get single video data V2 |
| `fetch_one_video_v3(url)` | `GET /api/v1/bilibili/web/fetch_one_video_v3` | 获取单个视频详情信息V3/Get single video data V3 |
| `fetch_user_collection_videos(folder_id, pn=...)` | `GET /api/v1/bilibili/web/fetch_user_collection_videos` | 获取指定收藏夹内视频数据/Gets video data from a collection folder |
| `fetch_user_dynamic(uid, offset=...)` | `GET /api/v1/bilibili/web/fetch_user_dynamic` | 获取指定用户动态/Get dynamic information of specified user |
| `fetch_user_post_videos(uid, pn=..., order=...)` | `GET /api/v1/bilibili/web/fetch_user_post_videos` | 获取用户主页作品数据/Get user homepage video data |
| `fetch_user_profile(uid)` | `GET /api/v1/bilibili/web/fetch_user_profile` | 获取指定用户的信息/Get information of specified user |
| `fetch_user_relation_stat(uid)` | `GET /api/v1/bilibili/web/fetch_user_relation_stat` | 获取用户关系状态统计/Get user relation stat (following and followers) |
| `fetch_user_up_stat(uid)` | `GET /api/v1/bilibili/web/fetch_user_up_stat` | 获取UP主状态统计/Get UP stat (total likes and views) |
| `fetch_video_comments(bv_id, pn=...)` | `GET /api/v1/bilibili/web/fetch_video_comments` | 获取指定视频的评论/Get comments on the specified video |
| `fetch_video_danmaku(cid)` | `GET /api/v1/bilibili/web/fetch_video_danmaku` | 获取视频实时弹幕/Get Video Danmaku |
| `fetch_video_detail(aid)` | `GET /api/v1/bilibili/web/fetch_video_detail` | 获取单个视频详情/Get single video detail |
| `fetch_video_parts(bv_id)` | `GET /api/v1/bilibili/web/fetch_video_parts` | 通过bv号获得视频分p信息/Get Video Parts By bvid |
| `fetch_video_play_info(url)` | `GET /api/v1/bilibili/web/fetch_video_play_info` | 获取单个视频播放信息/Get single video play info |
| `fetch_video_playurl(bv_id, cid)` | `GET /api/v1/bilibili/web/fetch_video_playurl` | 获取视频流地址/Get video playurl |
| `fetch_video_subtitle(a_id, c_id)` | `GET /api/v1/bilibili/web/fetch_video_subtitle` | 获取视频字幕信息/Get video subtitle info |
| `fetch_vip_video_playurl(bv_id, cid, cookie)` | `POST /api/v1/bilibili/web/fetch_vip_video_playurl` | 获取大会员清晰度视频流地址/Get VIP video playurl |
## `client.demo`
**Class:** `tikhub.resources.demo.Demo` (sync) / `AsyncDemo` (async)
**Endpoints:** 9
| Method | Endpoint | Summary |
|---|---|---|
| `article_extract()` | `GET /api/v1/demo/wechat/article_extract` | 【Demo】微信公众号文章提取(1小时缓存)/[Demo] WeChat Article Extract with Cache |
| `cache_status()` | `GET /api/v1/demo/demo/cache_status` | 查看Demo缓存状态/View Demo Cache Status |
| `douyin_app_fetch_one_video()` | `GET /api/v1/demo/douyin/app/fetch_one_video` | 【Demo】抖音APP获取固定作品数据(1小时缓存)/[Demo] Fetch Douyin APP Fixed Video Data with Cache |
| `douyin_web_fetch_one_video()` | `GET /api/v1/demo/douyin/web/fetch_one_video` | 【Demo】抖音Web获取固定作品数据(1小时缓存)/[Demo] Fetch Douyin Web Fixed Video Data with Cache |
| `fetch_user_info()` | `GET /api/v1/demo/instagram/web/fetch_user_info` | 【Demo】Instagram获取固定用户信息(1小时缓存)/[Demo] Instagram Fixed User Profile with Cache |
| `fetch_user_profile()` | `GET /api/v1/demo/tiktok/web/fetch_user_profile` | 【Demo】TikTok固定用户信息(1小时缓存)/[Demo] TikTok Fixed User Profile with Cache |
| `general_search()` | `GET /api/v1/demo/douyin_search/app/general_search` | 【Demo】抖音搜索综合搜索(1小时缓存)/[Demo] Douyin General Search with Cache |
| `kuaishou_web_fetch_one_video()` | `GET /api/v1/demo/kuaishou/web/fetch_one_video` | 【Demo】快手获取固定视频信息(1小时缓存)/[Demo] Kuaishou Fixed Video with Cache |
| `tiktok_app_fetch_one_video()` | `GET /api/v1/demo/tiktok/app/fetch_one_video` | 【Demo】TikTok APP获取固定视频详情(1小时缓存)/[Demo] TikTok APP Fixed Video Detail with Cache |
## `client.douyin_app_v3`
**Class:** `tikhub.resources.douyin_app_v3.DouyinAppV3` (sync) / `AsyncDouyinAppV3` (async)
**Endpoints:** 47
| Method | Endpoint | Summary |
|---|---|---|
| `add_video_play_count(aweme_type, item_id, cookie=...)` | `GET /api/v1/douyin/app/v3/add_video_play_count` | 根据视频ID来增加作品的播放数/Increase the number of plays of the work according to the video ID |
| `fetch_brand_hot_search_list()` | `GET /api/v1/douyin/app/v3/fetch_brand_hot_search_list` | 获取抖音品牌热榜分类数据/Get Douyin brand hot search list data |
| `fetch_brand_hot_search_list_detail(category_id)` | `GET /api/v1/douyin/app/v3/fetch_brand_hot_search_list_detail` | 获取抖音品牌热榜具体分类数据/Get Douyin brand hot search list detail data |
| `fetch_general_search_result(keyword, offset=..., count=..., sort_type=..., publish_time=..., filter_duration=..., content_type=...)` | `GET /api/v1/douyin/app/v3/fetch_general_search_result` | 获取指定关键词的综合搜索结果(弃用,替代接口见下方文档说明)/Get comprehensive search results of specified keywords (deprecated, see the documentation |
| `fetch_hashtag_detail(ch_id)` | `GET /api/v1/douyin/app/v3/fetch_hashtag_detail` | 获取指定话题的详情数据/Get details of specified hashtag |
| `fetch_hashtag_search_result(keyword, offset=..., count=...)` | `GET /api/v1/douyin/app/v3/fetch_hashtag_search_result` | 获取指定关键词的话题搜索结果(弃用,替代接口见下方文档说明)/Get hashtag search results of specified keywords (deprecated, see the documentation below |
| `fetch_hashtag_video_list(ch_id, cursor=..., sort_type=..., count=...)` | `GET /api/v1/douyin/app/v3/fetch_hashtag_video_list` | 获取指定话题的作品数据/Get video list of specified hashtag |
| `fetch_hot_search_list(board_type=..., board_sub_type=...)` | `GET /api/v1/douyin/app/v3/fetch_hot_search_list` | 获取抖音热搜榜数据/Get Douyin hot search list data |
| `fetch_live_hot_search_list()` | `GET /api/v1/douyin/app/v3/fetch_live_hot_search_list` | 获取抖音直播热搜榜数据/Get Douyin live hot search list data |
| `fetch_live_search_result(keyword, cursor=..., count=...)` | `GET /api/v1/douyin/app/v3/fetch_live_search_result` | 获取指定关键词的直播搜索结果(弃用,替代接口见下方文档说明)/Get live search results of specified keywords (deprecated, see the documentation below fo |
| `fetch_multi_video(body)` | `POST /api/v1/douyin/app/v3/fetch_multi_video` | 批量获取视频信息 V1/Batch Get Video Information V1 |
| `fetch_multi_video_high_quality_play_url(aweme_ids=...)` | `POST /api/v1/douyin/app/v3/fetch_multi_video_high_quality_play_url` | 批量获取视频的最高画质播放链接/Batch get the highest quality play URL of videos |
| `fetch_multi_video_statistics(aweme_ids)` | `GET /api/v1/douyin/app/v3/fetch_multi_video_statistics` | 根据视频ID批量获取作品的统计数据(点赞数、下载数、播放数、分享数)/Get the statistical data of the Post according to the video ID (like count, download |
| `fetch_multi_video_v2(body)` | `POST /api/v1/douyin/app/v3/fetch_multi_video_v2` | 批量获取视频信息 V2/Batch Get Video Information V2 |
| `fetch_music_detail(music_id)` | `GET /api/v1/douyin/app/v3/fetch_music_detail` | 获取指定音乐的详情数据/Get details of specified music |
| `fetch_music_hot_search_list(chart_type=..., cursor=...)` | `GET /api/v1/douyin/app/v3/fetch_music_hot_search_list` | 获取抖音音乐榜数据/Get Douyin music hot search list data |
| `fetch_music_search_result(keyword, offset=..., count=...)` | `GET /api/v1/douyin/app/v3/fetch_music_search_result` | 获取指定关键词的音乐搜索结果(弃用,替代接口见下方文档说明)/Get music search results of specified keywords (deprecated, see the documentation below f |
| `fetch_music_video_list(music_id, cursor=..., count=...)` | `GET /api/v1/douyin/app/v3/fetch_music_video_list` | 获取指定音乐的视频列表数据/Get video list of specified music |
| `fetch_one_video(aweme_id)` | `GET /api/v1/douyin/app/v3/fetch_one_video` | 获取单个作品数据/Get single video data |
| `fetch_one_video_by_share_url(share_url)` | `GET /api/v1/douyin/app/v3/fetch_one_video_by_share_url` | 根据分享链接获取单个作品数据/Get single video data by sharing link |
| `fetch_one_video_v2(aweme_id)` | `GET /api/v1/douyin/app/v3/fetch_one_video_v2` | 获取单个作品数据 V2/Get single video data V2 |
| `fetch_one_video_v3(aweme_id)` | `GET /api/v1/douyin/app/v3/fetch_one_video_v3` | 获取单个作品数据 V3 (无版权限制)/Get single video data V3 (No copyright restrictions) |
| `fetch_series_detail(series_id)` | `GET /api/v1/douyin/app/v3/fetch_series_detail` | 获取短剧详情信息/Get series detail |
| `fetch_series_video_list(series_id, cursor=...)` | `GET /api/v1/douyin/app/v3/fetch_series_video_list` | 获取短剧视频列表/Get series video list |
| `fetch_share_info_by_share_code(share_code)` | `GET /api/v1/douyin/app/v3/fetch_share_info_by_share_code` | 根据分享口令获取分享信息/Get share info by share code |
| `fetch_user_fans_list(sec_user_id=..., max_time=..., count=...)` | `GET /api/v1/douyin/app/v3/fetch_user_fans_list` | 获取用户粉丝列表/Get user fans list |
| `fetch_user_following_list(sec_user_id=..., max_time=..., count=...)` | `GET /api/v1/douyin/app/v3/fetch_user_following_list` | 获取用户关注列表 (弃用,使用 /api/v1/douyin/web/fetch_user_following_list 替代)/Get user following list (Deprecated, use /api/v1/douyin |
| `fetch_user_like_videos(sec_user_id, max_cursor=..., counts=...)` | `GET /api/v1/douyin/app/v3/fetch_user_like_videos` | 获取用户喜欢作品数据/Get user like video data |
| `fetch_user_post_videos(sec_user_id, max_cursor=..., count=..., sort_type=...)` | `GET /api/v1/douyin/app/v3/fetch_user_post_videos` | 获取用户主页作品数据/Get user homepage video data |
| `fetch_user_search_result(keyword, offset=..., count=..., douyin_user_fans=..., douyin_user_type=...)` | `GET /api/v1/douyin/app/v3/fetch_user_search_result` | 获取指定关键词的用户搜索结果(弃用,替代接口见下方文档说明)/Get user search results of specified keywords (deprecated, see the documentation below fo |
| `fetch_user_series_list(user_id=..., sec_user_id=..., cursor=...)` | `GET /api/v1/douyin/app/v3/fetch_user_series_list` | 获取用户短剧合集列表/Get user series list |
| `fetch_video_comment_replies(item_id, comment_id, cursor=..., count=...)` | `GET /api/v1/douyin/app/v3/fetch_video_comment_replies` | 获取指定视频的评论回复数据/Get comment replies data of specified video |
| `fetch_video_comments(aweme_id, cursor=..., count=...)` | `GET /api/v1/douyin/app/v3/fetch_video_comments` | 获取单个视频评论数据/Get single video comments data |
| `fetch_video_high_quality_play_url(aweme_id=..., share_url=...)` | `GET /api/v1/douyin/app/v3/fetch_video_high_quality_play_url` | 获取视频的最高画质播放链接/Get the highest quality play URL of the video |
| `fetch_video_mix_detail(mix_id)` | `GET /api/v1/douyin/app/v3/fetch_video_mix_detail` | 获取抖音视频合集详情数据/Get Douyin video mix detail data |
| `fetch_video_mix_post_list(mix_id, cursor=..., count=...)` | `GET /api/v1/douyin/app/v3/fetch_video_mix_post_list` | 获取抖音视频合集作品列表数据/Get Douyin video mix post list data |
| `fetch_video_search_result(keyword, offset=..., count=..., sort_type=..., publish_time=..., filter_duration=...)` | `GET /api/v1/douyin/app/v3/fetch_video_search_result` | 获取指定关键词的视频搜索结果(弃用,替代接口见下方文档说明)/Get video search results of specified keywords (deprecated, see the documentation below f |
| `fetch_video_search_result_v2(keyword, sort_type=..., publish_time=..., filter_duration=..., page=..., search_id=...)` | `GET /api/v1/douyin/app/v3/fetch_video_search_result_v2` | 获取指定关键词的视频搜索结果 V2 (弃用,替代接口见下方文档说明)/Get video search results of specified keywords V2 (deprecated, see the documentation |
| `fetch_video_statistics(aweme_ids)` | `GET /api/v1/douyin/app/v3/fetch_video_statistics` | 根据视频ID获取作品的统计数据(点赞数、下载数、播放数、分享数)/Get the statistical data of the Post according to the video ID (like count, download co |
| `generate_douyin_short_url(url)` | `GET /api/v1/douyin/app/v3/generate_douyin_short_url` | 生成抖音短链接/Generate Douyin short link |
| `generate_douyin_video_share_qrcode(object_id)` | `GET /api/v1/douyin/app/v3/generate_douyin_video_share_qrcode` | 生成抖音视频分享二维码/Generate Douyin video share QR code |
| `handler_user_profile(sec_user_id)` | `GET /api/v1/douyin/app/v3/handler_user_profile` | 获取指定用户的信息/Get information of specified user |
| `open_douyin_app_to_keyword_search(keyword)` | `GET /api/v1/douyin/app/v3/open_douyin_app_to_keyword_search` | 生成抖音分享链接,唤起抖音APP,跳转指定关键词搜索结果/Generate Douyin share link, call Douyin APP, and jump to the specified keyword search resul |
| `open_douyin_app_to_send_private_message(uid, sec_uid)` | `GET /api/v1/douyin/app/v3/open_douyin_app_to_send_private_message` | 生成抖音分享链接,唤起抖音APP,给指定用户发送私信/Generate Douyin share link, call Douyin APP, and send private messages to specified users |
| `open_douyin_app_to_user_profile(uid, sec_uid)` | `GET /api/v1/douyin/app/v3/open_douyin_app_to_user_profile` | 生成抖音分享链接,唤起抖音APP,跳转指定用户主页/Generate Douyin share link, call Douyin APP, and jump to the specified user profile |
| `open_douyin_app_to_video_detail(aweme_id)` | `GET /api/v1/douyin/app/v3/open_douyin_app_to_video_detail` | 生成抖音分享链接,唤起抖音APP,跳转指定作品详情页/Generate Douyin share link, call Douyin APP, and jump to the specified video details page |
| `register_device(proxy=...)` | `GET /api/v1/douyin/app/v3/register_device` | 抖音APP注册设备/Douyin APP register device |
## `client.douyin_billboard`
**Class:** `tikhub.resources.douyin_billboard.DouyinBillboard` (sync) / `AsyncDouyinBillboard` (async)
**Endpoints:** 31
| Method | Endpoint | Summary |
|---|---|---|
| `fetch_city_list()` | `GET /api/v1/douyin/billboard/fetch_city_list` | 获取中国城市列表/Fetch Chinese city list |
| `fetch_content_tag()` | `GET /api/v1/douyin/billboard/fetch_content_tag` | 获取垂类内容标签/Fetch vertical content tags |
| `fetch_hot_account_fans_interest_account_list(sec_uid)` | `GET /api/v1/douyin/billboard/fetch_hot_account_fans_interest_account_list` | 获取粉丝兴趣作者 20个用户/Fetch fan interest author 20 users |
| `fetch_hot_account_fans_interest_search_list(sec_uid)` | `GET /api/v1/douyin/billboard/fetch_hot_account_fans_interest_search_list` | 获取粉丝近3天搜索词 10个搜索词/Fetch fan interest search term in the last 3 days 10 search terms |
| `fetch_hot_account_fans_interest_topic_list(sec_uid)` | `GET /api/v1/douyin/billboard/fetch_hot_account_fans_interest_topic_list` | 获取粉丝近3天感兴趣的话题 10个话题/Fetch fan interest topic in the last 3 days 10 topics |
| `fetch_hot_account_fans_portrait_list(sec_uid, option=...)` | `GET /api/v1/douyin/billboard/fetch_hot_account_fans_portrait_list` | 获取粉丝画像/Fetch fan portrait |
| `fetch_hot_account_item_analysis_list(sec_uid)` | `GET /api/v1/douyin/billboard/fetch_hot_account_item_analysis_list` | 获取账号作品分析-上周/Fetch account work analysis - last week |
| `fetch_hot_account_list(date_window=..., page_num=..., page_size=..., query_tag=...)` | `POST /api/v1/douyin/billboard/fetch_hot_account_list` | 获取热门账号/Fetch hot account list |
| `fetch_hot_account_search_list(keyword, cursor)` | `GET /api/v1/douyin/billboard/fetch_hot_account_search_list` | 搜索用户名或抖音号/Fetch account search list |
| `fetch_hot_account_trends_list(sec_uid, option=..., date_window=...)` | `GET /api/v1/douyin/billboard/fetch_hot_account_trends_list` | 获取账号粉丝数据趋势/Fetch account fan data trend |
| `fetch_hot_calendar_detail(calendar_id)` | `GET /api/v1/douyin/billboard/fetch_hot_calendar_detail` | 获取活动日历详情/Fetch activity calendar detail |
| `fetch_hot_calendar_list(city_code=..., category_code=..., end_date=..., start_date=...)` | `POST /api/v1/douyin/billboard/fetch_hot_calendar_list` | 获取活动日历/Fetch activity calendar |
| `fetch_hot_category_list(billboard_type, snapshot_time=..., start_date=..., end_date=..., keyword=...)` | `GET /api/v1/douyin/billboard/fetch_hot_category_list` | 获取热点榜分类/Fetch hot list category |
| `fetch_hot_challenge_list(page, page_size, keyword=...)` | `GET /api/v1/douyin/billboard/fetch_hot_challenge_list` | 获取挑战热榜/Fetch hot challenge list |
| `fetch_hot_city_list(page, page_size, order, city_code=..., sentence_tag=..., keyword=...)` | `GET /api/v1/douyin/billboard/fetch_hot_city_list` | 获取同城热点榜/Fetch city hot list |
| `fetch_hot_comment_word_list(aweme_id)` | `GET /api/v1/douyin/billboard/fetch_hot_comment_word_list` | 获取作品评论分析-词云权重/Fetch work comment analysis word cloud weight |
| `fetch_hot_item_trends_list(aweme_id=..., option=..., date_window=...)` | `GET /api/v1/douyin/billboard/fetch_hot_item_trends_list` | 获取作品数据趋势/Fetch post data trend |
| `fetch_hot_rise_list(page, page_size, order, sentence_tag=..., keyword=...)` | `GET /api/v1/douyin/billboard/fetch_hot_rise_list` | 获取上升热点榜/Fetch rising hot list |
| `fetch_hot_total_high_fan_list(page=..., page_size=..., date_window=..., tags=...)` | `POST /api/v1/douyin/billboard/fetch_hot_total_high_fan_list` | 获取高涨粉率榜/Fetch high fan rate list |
| `fetch_hot_total_high_like_list(page=..., page_size=..., date_window=..., tags=...)` | `POST /api/v1/douyin/billboard/fetch_hot_total_high_like_list` | 获取高点赞率榜/Fetch high like rate list |
| `fetch_hot_total_high_play_list(page=..., page_size=..., date_window=..., tags=...)` | `POST /api/v1/douyin/billboard/fetch_hot_total_high_play_list` | 获取高完播率榜/Fetch high completion rate list |
| `fetch_hot_total_high_search_list(page_num=..., page_size=..., date_window=..., keyword=...)` | `POST /api/v1/douyin/billboard/fetch_hot_total_high_search_list` | 获取热度飙升的搜索榜/Fetch search list with rising popularity |
| `fetch_hot_total_high_topic_list(page=..., page_size=..., date_window=..., tags=...)` | `POST /api/v1/douyin/billboard/fetch_hot_total_high_topic_list` | 获取热度飙升的话题榜/Fetch topic list with rising popularity |
| `fetch_hot_total_hot_word_detail_list(keyword, word_id, query_day)` | `GET /api/v1/douyin/billboard/fetch_hot_total_hot_word_detail_list` | 获取内容词详情/Fetch content word details |
| `fetch_hot_total_hot_word_list(page_num=..., page_size=..., date_window=..., keyword=...)` | `POST /api/v1/douyin/billboard/fetch_hot_total_hot_word_list` | 获取全部热门内容词/Fetch all hot content words |
| `fetch_hot_total_list(page, page_size, type, snapshot_time=..., start_date=..., end_date=..., sentence_tag=..., keyword=...)` | `GET /api/v1/douyin/billboard/fetch_hot_total_list` | 获取热点总榜/Fetch total hot list |
| `fetch_hot_total_low_fan_list(page=..., page_size=..., date_window=..., tags=...)` | `POST /api/v1/douyin/billboard/fetch_hot_total_low_fan_list` | 获取低粉爆款榜/Fetch low fan explosion list |
| `fetch_hot_total_search_list(page_num=..., page_size=..., date_window=..., keyword=...)` | `POST /api/v1/douyin/billboard/fetch_hot_total_search_list` | 获取搜索热榜/Fetch search hot list |
| `fetch_hot_total_topic_list(page=..., page_size=..., date_window=..., tags=...)` | `POST /api/v1/douyin/billboard/fetch_hot_total_topic_list` | 获取话题热榜/Fetch topic hot list |
| `fetch_hot_total_video_list(page=..., page_size=..., date_window=..., sub_type=..., tags=...)` | `POST /api/v1/douyin/billboard/fetch_hot_total_video_list` | 获取视频热榜/Fetch video hot list |
| `fetch_hot_user_portrait_list(aweme_id, option=...)` | `GET /api/v1/douyin/billboard/fetch_hot_user_portrait_list` | 获取作品点赞观众画像-仅限热门榜/Fetch work like audience portrait - hot list only |
## `client.douyin_creator`
**Class:** `tikhub.resources.douyin_creator.DouyinCreator` (sync) / `AsyncDouyinCreator` (async)
**Endpoints:** 16
| Method | Endpoint | Summary |
|---|---|---|
| `fetch_creator_activity_detail(activity_id)` | `GET /api/v1/douyin/creator/fetch_creator_activity_detail` | 获取创作者活动详情/Get creator activity detail |
| `fetch_creator_activity_list(start_time, end_time)` | `GET /api/v1/douyin/creator/fetch_creator_activity_list` | 获取创作者活动列表/Get creator activity list |
| `fetch_creator_content_category()` | `GET /api/v1/douyin/creator/fetch_creator_content_category` | 获取创作者内容创作合集分类/Get creator content creation category |
| `fetch_creator_content_course(category_id, order=..., limit=..., offset=...)` | `GET /api/v1/douyin/creator/fetch_creator_content_course` | 获取创作者内容创作课程/Get creator content creation course |
| `fetch_creator_hot_challenge_billboard()` | `GET /api/v1/douyin/creator/fetch_creator_hot_challenge_billboard` | 获取创作者热门挑战榜单/Get creator hot challenge billboard |
| `fetch_creator_hot_course(order=..., limit=..., offset=..., category_id=...)` | `GET /api/v1/douyin/creator/fetch_creator_hot_course` | 获取创作者热门课程/Get creator hot course |
| `fetch_creator_hot_music_billboard(billboard_tag=..., order_key=..., time_filter=...)` | `GET /api/v1/douyin/creator/fetch_creator_hot_music_billboard` | 获取创作者热门音乐榜单/Get creator hot music billboard |
| `fetch_creator_hot_props_billboard(billboard_tag=..., order_key=..., time_filter=...)` | `GET /api/v1/douyin/creator/fetch_creator_hot_props_billboard` | 获取创作者热门道具榜单/Get creator hot props billboard |
| `fetch_creator_hot_spot_billboard(billboard_tag=..., hot_search_type=..., city_code=...)` | `GET /api/v1/douyin/creator/fetch_creator_hot_spot_billboard` | 获取创作者中心创作热点/Get creator hot spot billboard |
| `fetch_creator_hot_topic_billboard(billboard_tag=..., order_key=..., time_filter=...)` | `GET /api/v1/douyin/creator/fetch_creator_hot_topic_billboard` | 获取创作者热门话题榜单/Get creator hot topic billboard |
| `fetch_creator_material_center_billboard(billboard_tag=..., order_key=..., time_filter=...)` | `GET /api/v1/douyin/creator/fetch_creator_material_center_billboard` | 获取创作者中心热门视频榜单/Get creator material center billboard |
| `fetch_creator_material_center_config()` | `GET /api/v1/douyin/creator/fetch_creator_material_center_config` | 获取创作者中心配置/Get creator material center config |
| `fetch_industry_category_config()` | `GET /api/v1/douyin/creator/fetch_industry_category_config` | 获取行业分类配置/Get industry category config |
| `fetch_mission_task_list(cursor=..., limit=..., mission_type=..., tab_scene=..., industry_lv1=..., industry_lv2=..., platform_channel=..., pay_type=..., greater_than_cost_progress=..., publish_time_start=..., quick_selector_scene=..., keyword=...)` | `GET /api/v1/douyin/creator/fetch_mission_task_list` | 获取商单任务列表/Get mission task list |
| `fetch_user_search(user_name)` | `GET /api/v1/douyin/creator/fetch_user_search` | 搜索用户/Search users |
| `fetch_video_danmaku_list(item_id, count=..., offset=..., order_type=..., is_blocked=...)` | `GET /api/v1/douyin/creator/fetch_video_danmaku_list` | 获取作品弹幕列表/Get video danmaku list |
## `client.douyin_creator_v2`
**Class:** `tikhub.resources.douyin_creator_v2.DouyinCreatorV2` (sync) / `AsyncDouyinCreatorV2` (async)
**Endpoints:** 14
| Method | Endpoint | Summary |
|---|---|---|
| `fetch_author_diagnosis(cookie)` | `POST /api/v1/douyin/creator_v2/fetch_author_diagnosis` | 获取创作者账号诊断/Fetch author diagnosis |
| `fetch_item_analysis_involved_vertical(cookie, start_date, end_date)` | `POST /api/v1/douyin/creator_v2/fetch_item_analysis_involved_vertical` | 获取作品垂类标签/Fetch item analysis involved vertical |
| `fetch_item_analysis_item_performance(cookie, start_date, end_date, primary_verticals, genres=..., metric_type=...)` | `POST /api/v1/douyin/creator_v2/fetch_item_analysis_item_performance` | 获取投稿表现数据/Fetch item analysis item performance |
| `fetch_item_analysis_overview(cookie, start_date, end_date, primary_verticals, genres=...)` | `POST /api/v1/douyin/creator_v2/fetch_item_analysis_overview` | 获取投稿分析概览/Fetch item analysis overview |
| `fetch_item_audience_others(cookie, item_id)` | `POST /api/v1/douyin/creator_v2/fetch_item_audience_others` | 获取作品观众其他数据分析/Fetch item audience others analysis |
| `fetch_item_audience_portrait(cookie, item_id)` | `POST /api/v1/douyin/creator_v2/fetch_item_audience_portrait` | 获取作品观众数据分析/Fetch item audience portrait |
| `fetch_item_danmaku_analysis(cookie, item_id)` | `POST /api/v1/douyin/creator_v2/fetch_item_danmaku_analysis` | 获取作品弹幕分析/Fetch item bullet analysis |
| `fetch_item_list(cookie, start_time, end_time, count=..., order_by=..., fields=..., need_cooperation=..., need_long_article=..., cursor=...)` | `POST /api/v1/douyin/creator_v2/fetch_item_list` | 获取投稿作品列表/Fetch item list |
| `fetch_item_list_download(cookie, min_cursor, max_cursor, type_filters=..., need_long_article=...)` | `POST /api/v1/douyin/creator_v2/fetch_item_list_download` | 导出投稿作品列表/Download item list |
| `fetch_item_overview_data(cookie, ids, fields=...)` | `POST /api/v1/douyin/creator_v2/fetch_item_overview_data` | 获取作品总览数据/Fetch item overview data |
| `fetch_item_play_source(cookie, item_id)` | `POST /api/v1/douyin/creator_v2/fetch_item_play_source` | 获取作品流量来源统计/Fetch item play source statistics |
| `fetch_item_search_keyword(cookie, item_id)` | `POST /api/v1/douyin/creator_v2/fetch_item_search_keyword` | 获取作品搜索关键词统计/Fetch item search keywords statistics |
| `fetch_item_watch_trend(cookie, item_id, analysis_type=...)` | `POST /api/v1/douyin/creator_v2/fetch_item_watch_trend` | 获取作品观看趋势分析/Fetch item watch trend analysis |
| `fetch_live_room_history_list(cookie, start_date, end_date, limit=..., need_living=..., download=...)` | `POST /api/v1/douyin/creator_v2/fetch_live_room_history_list` | 获取直播场次历史记录/Fetch live room history list |
## `client.douyin_search`
**Class:** `tikhub.resources.douyin_search.DouyinSearch` (sync) / `AsyncDouyinSearch` (async)
**Endpoints:** 19
| Method | Endpoint | Summary |
|---|---|---|
| `fetch_challenge_search_v1(keyword=..., cursor=..., sort_type=..., publish_time=..., filter_duration=..., content_type=..., search_id=..., backtrace=...)` | `POST /api/v1/douyin/search/fetch_challenge_search_v1` | 获取话题搜索 V1/Fetch hashtag search V1 |
| `fetch_challenge_search_v2(keyword=..., cursor=..., sort_type=..., publish_time=..., filter_duration=..., content_type=..., search_id=..., backtrace=...)` | `POST /api/v1/douyin/search/fetch_challenge_search_v2` | 获取话题搜索 V2/Fetch hashtag search V2 |
| `fetch_challenge_suggest(keyword=...)` | `POST /api/v1/douyin/search/fetch_challenge_suggest` | 获取话题推荐搜索/Fetch hashtag suggestions |
| `fetch_discuss_search(keyword=..., cursor=..., sort_type=..., publish_time=..., filter_duration=..., content_type=..., search_id=..., backtrace=...)` | `POST /api/v1/douyin/search/fetch_discuss_search` | 获取讨论搜索/Fetch discussion search |
| `fetch_experience_search(keyword=..., cursor=..., sort_type=..., publish_time=..., filter_duration=..., content_type=..., search_id=..., backtrace=...)` | `POST /api/v1/douyin/search/fetch_experience_search` | 获取经验搜索/Fetch experience search |
| `fetch_general_search_v1(keyword=..., cursor=..., sort_type=..., publish_time=..., filter_duration=..., content_type=..., search_id=..., backtrace=...)` | `POST /api/v1/douyin/search/fetch_general_search_v1` | 获取综合搜索 V1/Fetch general search V1 |
| `fetch_general_search_v2(keyword=..., cursor=..., sort_type=..., publish_time=..., filter_duration=..., content_type=..., search_id=..., backtrace=...)` | `POST /api/v1/douyin/search/fetch_general_search_v2` | 获取综合搜索 V2/Fetch general search V2 |
| `fetch_image_search(keyword=..., cursor=..., sort_type=..., publish_time=..., filter_duration=..., content_type=..., search_id=..., backtrace=...)` | `POST /api/v1/douyin/search/fetch_image_search` | 获取图片搜索/Fetch image search |
| `fetch_image_search_v3(keyword, cursor=..., search_id=...)` | `POST /api/v1/douyin/search/fetch_image_search_v3` | 获取图文搜索 V3/Fetch image-text search V3 |
| `fetch_live_search_v1(keyword=..., cursor=..., sort_type=..., publish_time=..., filter_duration=..., content_type=..., search_id=..., backtrace=...)` | `POST /api/v1/douyin/search/fetch_live_search_v1` | 获取直播搜索 V1/Fetch live search V1 |
| `fetch_multi_search(keyword=..., cursor=..., sort_type=..., publish_time=..., filter_duration=..., content_type=..., search_id=..., backtrace=...)` | `POST /api/v1/douyin/search/fetch_multi_search` | 获取多重搜索/Fetch multi-type search |
| `fetch_music_search(keyword=..., cursor=..., sort_type=..., publish_time=..., filter_duration=..., content_type=..., search_id=..., backtrace=...)` | `POST /api/v1/douyin/search/fetch_music_search` | 获取音乐搜索/Fetch music search |
| `fetch_school_search(keyword=...)` | `POST /api/v1/douyin/search/fetch_school_search` | 获取学校搜索/Fetch school search |
| `fetch_search_suggest(keyword=...)` | `POST /api/v1/douyin/search/fetch_search_suggest` | 获取搜索关键词推荐/Fetch search keyword suggestions |
| `fetch_user_search(keyword=..., cursor=..., douyin_user_fans=..., douyin_user_type=..., search_id=...)` | `POST /api/v1/douyin/search/fetch_user_search` | 获取用户搜索/Fetch user search |
| `fetch_user_search_v2(keyword=..., cursor=...)` | `POST /api/v1/douyin/search/fetch_user_search_v2` | 获取用户搜索 V2/Fetch user search V2 |
| `fetch_video_search_v1(keyword=..., cursor=..., sort_type=..., publish_time=..., filter_duration=..., content_type=..., search_id=..., backtrace=...)` | `POST /api/v1/douyin/search/fetch_video_search_v1` | 获取视频搜索 V1/Fetch video search V1 |
| `fetch_video_search_v2(keyword=..., cursor=..., sort_type=..., publish_time=..., filter_duration=..., content_type=..., search_id=..., backtrace=...)` | `POST /api/v1/douyin/search/fetch_video_search_v2` | 获取视频搜索 V2/Fetch video search V2 |
| `fetch_vision_search(image_uri, cursor=..., search_id=..., search_source=..., detection=..., detection_index=..., user_query=..., aweme_id=...)` | `POST /api/v1/douyin/search/fetch_vision_search` | 获取图像识别搜索/Fetch vision search (image-based search) |
## `client.douyin_web`
**Class:** `tikhub.resources.douyin_web.DouyinWeb` (sync) / `AsyncDouyinWeb` (async)
**Endpoints:** 76
| Method | Endpoint | Summary |
|---|---|---|
| `douyin_live_room(live_room_url, danmaku_type)` | `GET /api/v1/douyin/web/douyin_live_room` | 提取直播间弹幕/Extract live room danmaku |
| `encrypt_uid_to_sec_user_id(uid)` | `GET /api/v1/douyin/web/encrypt_uid_to_sec_user_id` | 加密用户uid到sec_user_id/Encrypt user uid to sec_user_id |
| `fetch_batch_user_profile_v1(sec_user_ids)` | `GET /api/v1/douyin/web/fetch_batch_user_profile_v1` | 获取批量用户信息(最多10个)/Get batch user profile (up to 10) |
| `fetch_batch_user_profile_v2(sec_user_ids)` | `GET /api/v1/douyin/web/fetch_batch_user_profile_v2` | 获取批量用户信息(最多50个)/Get batch user profile (up to 50) |
| `fetch_cartoon_aweme(count, refresh_index=..., cookie=...)` | `GET /api/v1/douyin/web/fetch_cartoon_aweme` | 二次元作品推荐/Anime Video |
| `fetch_challenge_posts(challenge_id=..., sort_type=..., cursor=..., count=..., cookie=...)` | `POST /api/v1/douyin/web/fetch_challenge_posts` | 话题作品/Challenge Posts |
| `fetch_douyin_web_guest_cookie(user_agent)` | `GET /api/v1/douyin/web/fetch_douyin_web_guest_cookie` | 获取抖音Web的游客Cookie/Get the guest Cookie of Douyin Web |
| `fetch_food_aweme(count, refresh_index=..., cookie=...)` | `GET /api/v1/douyin/web/fetch_food_aweme` | 美食作品推荐/Food Video |
| `fetch_game_aweme(count, refresh_index=..., cookie=...)` | `GET /api/v1/douyin/web/fetch_game_aweme` | 游戏作品推荐/Game Video |
| `fetch_general_search_result(keyword, offset=..., count=..., sort_type=..., publish_time=..., filter_duration=..., search_range=..., content_type=..., search_id=...)` | `GET /api/v1/douyin/web/fetch_general_search_result` | [已弃用/Deprecated] 获取指定关键词的综合搜索结果/Get comprehensive search results of specified keywords |
| `fetch_home_feed(count=..., refresh_index=...)` | `GET /api/v1/douyin/web/fetch_home_feed` | 获取首页推荐数据/Get home feed data |
| `fetch_hot_search_result()` | `GET /api/v1/douyin/web/fetch_hot_search_result` | 获取抖音热榜数据/Get Douyin hot search results |
| `fetch_knowledge_aweme(count, refresh_index=..., cookie=...)` | `GET /api/v1/douyin/web/fetch_knowledge_aweme` | 知识作品推荐/Knowledge Video |
| `fetch_live_gift_ranking(room_id, rank_type=...)` | `GET /api/v1/douyin/web/fetch_live_gift_ranking` | 获取直播间送礼用户排行榜/Get live room gift user ranking |
| `fetch_live_im_fetch(room_id, user_unique_id)` | `GET /api/v1/douyin/web/fetch_live_im_fetch` | 抖音直播间弹幕参数获取/Douyin live room danmaku parameters |
| `fetch_live_room_product_result(room_id, author_id, offset=..., limit=...)` | `GET /api/v1/douyin/web/fetch_live_room_product_result` | 抖音直播间商品信息/Douyin live room product information |
| `fetch_live_search_result(keyword, offset=..., count=..., search_id=...)` | `GET /api/v1/douyin/web/fetch_live_search_result` | [已弃用/Deprecated] 获取指定关键词的直播搜索结果/Get live search results of specified keywords |
| `fetch_multi_video(body)` | `POST /api/v1/douyin/web/fetch_multi_video` | 批量获取视频信息/Batch Get Video Information |
| `fetch_multi_video_high_quality_play_url(aweme_ids=...)` | `POST /api/v1/douyin/web/fetch_multi_video_high_quality_play_url` | 批量获取视频的最高画质播放链接/Batch get the highest quality play URL of videos |
| `fetch_music_aweme(count, refresh_index=..., cookie=...)` | `GET /api/v1/douyin/web/fetch_music_aweme` | 音乐作品推荐/Music Video |
| `fetch_one_video(aweme_id, need_anchor_info=...)` | `GET /api/v1/douyin/web/fetch_one_video` | 获取单个作品数据/Get single video data |
| `fetch_one_video_by_share_url(share_url)` | `GET /api/v1/douyin/web/fetch_one_video_by_share_url` | 根据分享链接获取单个作品数据/Get single video data by sharing link |
| `fetch_one_video_danmaku(item_id, duration, end_time, start_time)` | `GET /api/v1/douyin/web/fetch_one_video_danmaku` | 获取单个作品视频弹幕数据/Get single video danmaku data |
| `fetch_one_video_v2(aweme_id)` | `GET /api/v1/douyin/web/fetch_one_video_v2` | 获取单个作品数据 V2/Get single video data V2 |
| `fetch_product_coupon(product_id, shop_id, price, author_id, sec_user_id)` | `GET /api/v1/douyin/web/fetch_product_coupon` | 获取商品优惠券信息/Get product coupon information |
| `fetch_product_detail(product_id, aweme_id=..., room_id=..., sec_user_id=...)` | `GET /api/v1/douyin/web/fetch_product_detail` | 获取商品详情/Get product detail |
| `fetch_product_review_list(product_id, shop_id, cursor=..., count=..., sort_type=...)` | `GET /api/v1/douyin/web/fetch_product_review_list` | 获取商品评价列表/Get product review list |
| `fetch_product_review_score(product_id, shop_id)` | `GET /api/v1/douyin/web/fetch_product_review_score` | 获取商品评价评分/Get product review score |
| `fetch_product_sku_list(product_id, author_id)` | `GET /api/v1/douyin/web/fetch_product_sku_list` | 获取商品SKU列表/Get product SKU list |
| `fetch_query_user(body=...)` | `POST /api/v1/douyin/web/fetch_query_user` | 查询抖音用户基本信息/Query Douyin user basic information |
| `fetch_related_posts(aweme_id, refresh_index=..., count=...)` | `GET /api/v1/douyin/web/fetch_related_posts` | 获取相关作品推荐数据/Get related posts recommendation data |
| `fetch_search_challenge(keyword=..., cursor=..., count=..., cookie=...)` | `POST /api/v1/douyin/web/fetch_search_challenge` | [已弃用/Deprecated] 搜索话题/Search Challenge |
| `fetch_series_aweme(offset, count, content_type, cookie=...)` | `GET /api/v1/douyin/web/fetch_series_aweme` | 短剧作品/Series Video |
| `fetch_user_collection_videos(cookie, max_cursor=..., counts=...)` | `POST /api/v1/douyin/web/fetch_user_collection_videos` | 获取用户收藏作品数据/Get user collection video data |
| `fetch_user_collects(cookie, max_cursor=..., counts=...)` | `POST /api/v1/douyin/web/fetch_user_collects` | 获取用户收藏夹/Get user collection |
| `fetch_user_collects_videos(collects_id, max_cursor=..., counts=...)` | `GET /api/v1/douyin/web/fetch_user_collects_videos` | 获取用户收藏夹数据/Get user collection data |
| `fetch_user_fans_list(sec_user_id=..., max_time=..., count=..., source_type=...)` | `GET /api/v1/douyin/web/fetch_user_fans_list` | 获取用户粉丝列表/Get user fans list |
| `fetch_user_following_list(sec_user_id=..., max_time=..., count=..., source_type=...)` | `GET /api/v1/douyin/web/fetch_user_following_list` | 获取用户关注列表/Get user following list |
| `fetch_user_like_videos(sec_user_id, max_cursor=..., counts=..., cookie=...)` | `POST /api/v1/douyin/web/fetch_user_like_videos` | 获取用户喜欢作品数据/Get user like video data |
| `fetch_user_live_info_by_uid(uid)` | `GET /api/v1/douyin/web/fetch_user_live_info_by_uid` | 使用UID获取用户开播信息/Get user live information by UID |
| `fetch_user_live_videos(webcast_id)` | `GET /api/v1/douyin/web/fetch_user_live_videos` | 获取用户直播流数据/Get user live video data |
| `fetch_user_live_videos_by_room_id(room_id)` | `GET /api/v1/douyin/web/fetch_user_live_videos_by_room_id` | 通过room_id获取指定用户的直播流数据 V1/Get live video data of specified user by room_id V1 |
| `fetch_user_live_videos_by_room_id_v2(room_id)` | `GET /api/v1/douyin/web/fetch_user_live_videos_by_room_id_v2` | 通过room_id获取指定用户的直播流数据 V2/Gets the live stream data of the specified user by room_id V2 |
| `fetch_user_live_videos_by_sec_uid(sec_uid)` | `GET /api/v1/douyin/web/fetch_user_live_videos_by_sec_uid` | 通过sec_uid获取指定用户的直播流数据/Get live video data of specified user by sec_uid |
| `fetch_user_mix_videos(mix_id, max_cursor=..., counts=...)` | `GET /api/v1/douyin/web/fetch_user_mix_videos` | 获取用户合辑作品数据/Get user mix video data |
| `fetch_user_post_videos(sec_user_id, max_cursor=..., count=..., filter_type=..., cookie=...)` | `GET /api/v1/douyin/web/fetch_user_post_videos` | 获取用户主页作品数据/Get user homepage video data |
| `fetch_user_profile_by_short_id(short_id)` | `GET /api/v1/douyin/web/fetch_user_profile_by_short_id` | 使用Short ID获取用户信息/Get user information by Short ID |
| `fetch_user_profile_by_uid(uid)` | `GET /api/v1/douyin/web/fetch_user_profile_by_uid` | 使用UID获取用户信息/Get user information by UID |
| `fetch_user_search_result(keyword, offset=..., count=..., douyin_user_fans=..., douyin_user_type=..., search_id=...)` | `GET /api/v1/douyin/web/fetch_user_search_result` | 获取指定关键词的用户搜索结果(废弃,替代接口请参考下方文档)/Get user search results of specified keywords (deprecated, please refer to the following |
| `fetch_user_search_result_v2(keyword, cursor=...)` | `GET /api/v1/douyin/web/fetch_user_search_result_v2` | 获取指定关键词的用户搜索结果 V2 (已弃用,替代接口请参考下方文档)/Get user search results of specified keywords V2 (deprecated, please refer to the fo |
| `fetch_user_search_result_v3(keyword, cursor=..., douyin_user_type=..., douyin_user_fans=...)` | `GET /api/v1/douyin/web/fetch_user_search_result_v3` | 获取指定关键词的用户搜索结果 V3 (已弃用,替代接口请参考下方文档)/Get user search results of specified keywords V3 (deprecated, please refer to the fo |
| `fetch_video_channel_result(tag_id, count=..., refresh_index=...)` | `GET /api/v1/douyin/web/fetch_video_channel_result` | 抖音视频频道数据/Douyin video channel data |
| `fetch_video_comment_replies(item_id, comment_id, cursor=..., count=...)` | `GET /api/v1/douyin/web/fetch_video_comment_replies` | 获取指定视频的评论回复数据/Get comment replies data of specified video |
| `fetch_video_comments(aweme_id, cursor=..., count=...)` | `GET /api/v1/douyin/web/fetch_video_comments` | 获取单个视频评论数据/Get single video comments data |
| `fetch_video_high_quality_play_url(aweme_id=..., share_url=...)` | `GET /api/v1/douyin/web/fetch_video_high_quality_play_url` | 获取视频的最高画质播放链接/Get the highest quality play URL of the video |
| `fetch_video_search_result(keyword, offset=..., count=..., sort_type=..., publish_time=..., filter_duration=..., search_id=...)` | `GET /api/v1/douyin/web/fetch_video_search_result` | [已弃用/Deprecated] 获取指定关键词的视频搜索结果/Get video search results of specified keywords |
| `fetch_video_search_result_v2(keyword, sort_type=..., publish_time=..., filter_duration=..., page=..., search_id=...)` | `GET /api/v1/douyin/web/fetch_video_search_result_v2` | 获取指定关键词的视频搜索结果 V2 (废弃,替代接口请参考下方文档)/Get video search results of specified keywords V2 (Deprecated, please refer to the fo |
| `generate_a_bogus(url, data, user_agent, index_0=..., index_1=..., index_2=...)` | `POST /api/v1/douyin/web/generate_a_bogus` | 使用接口网址生成A-Bogus参数/Generate A-Bogus parameter using API URL |
| `generate_real_msToken()` | `GET /api/v1/douyin/web/generate_real_msToken` | 生成真实msToken/Generate real msToken |
| `generate_s_v_web_id()` | `GET /api/v1/douyin/web/generate_s_v_web_id` | 生成s_v_web_id/Generate s_v_web_id |
| `generate_ttwid(user_agent=...)` | `GET /api/v1/douyin/web/generate_ttwid` | 生成ttwid/Generate ttwid |
| `generate_verify_fp()` | `GET /api/v1/douyin/web/generate_verify_fp` | 生成verify_fp/Generate verify_fp |
| `generate_wss_xb_signature(user_agent, room_id, user_unique_id)` | `GET /api/v1/douyin/web/generate_wss_xb_signature` | 生成弹幕xb签名/Generate barrage xb signature |
| `generate_x_bogus(url, user_agent)` | `POST /api/v1/douyin/web/generate_x_bogus` | 使用接口网址生成X-Bogus参数/Generate X-Bogus parameter using API URL |
| `get_all_aweme_id(body)` | `POST /api/v1/douyin/web/get_all_aweme_id` | 提取列表作品id/Extract list video id |
| `get_all_sec_user_id(body)` | `POST /api/v1/douyin/web/get_all_sec_user_id` | 提取列表用户id/Extract list user id |
| `get_all_webcast_id(body)` | `POST /api/v1/douyin/web/get_all_webcast_id` | 提取列表直播间号/Extract list webcast id |
| `get_aweme_id(url)` | `GET /api/v1/douyin/web/get_aweme_id` | 提取单个作品id/Extract single video id |
| `get_sec_user_id(url)` | `GET /api/v1/douyin/web/get_sec_user_id` | 提取单个用户id/Extract single user id |
| `get_webcast_id(url)` | `GET /api/v1/douyin/web/get_webcast_id` | 提取直播间号/Extract webcast id |
| `handler_shorten_url(target_url)` | `GET /api/v1/douyin/web/handler_shorten_url` | 生成短链接 |
| `handler_user_profile(sec_user_id)` | `GET /api/v1/douyin/web/handler_user_profile` | 使用sec_user_id获取指定用户的信息/Get information of specified user by sec_user_id |
| `handler_user_profile_v2(unique_id)` | `GET /api/v1/douyin/web/handler_user_profile_v2` | 使用unique_id(抖音号)获取指定用户的信息/Get information of specified user by unique_id |
| `handler_user_profile_v3(uid)` | `GET /api/v1/douyin/web/handler_user_profile_v3` | 根据抖音uid获取指定用户的信息/Get information of specified user by uid |
| `handler_user_profile_v4(sec_user_id)` | `GET /api/v1/douyin/web/handler_user_profile_v4` | 根据sec_user_id获取指定用户的信息(性别,年龄,直播等级、牌子)/Get information of specified user by sec_user_id (gender, age, live level、brand) |
| `webcast_id_2_room_id(webcast_id)` | `GET /api/v1/douyin/web/webcast_id_2_room_id` | 直播间号转房间号/Webcast id to room id |
## `client.douyin_xingtu`
**Class:** `tikhub.resources.douyin_xingtu.DouyinXingtu` (sync) / `AsyncDouyinXingtu` (async)
**Endpoints:** 22
| Method | Endpoint | Summary |
|---|---|---|
| `author_content_hot_comment_keywords_v1(kolId)` | `GET /api/v1/douyin/xingtu/author_content_hot_comment_keywords_v1` | 获取kol热词分析内容V1/Get Author Content Hot Comment Keywords V1 |
| `author_hot_comment_tokens_v1(kolId)` | `GET /api/v1/douyin/xingtu/author_hot_comment_tokens_v1` | 获取kol热词分析评论V1/Get Author Hot Comment Tokens V1 |
| `get_sign_image(uri, durationTS=..., format=...)` | `GET /api/v1/douyin/xingtu/get_sign_image` | 获取加密图片解析/Get Sign Image |
| `get_xingtu_kolid_by_sec_user_id(sec_user_id)` | `GET /api/v1/douyin/xingtu/get_xingtu_kolid_by_sec_user_id` | 根据抖音sec_user_id获取游客星图kolid/Get XingTu kolid by Douyin sec_user_id |
| `get_xingtu_kolid_by_uid(uid)` | `GET /api/v1/douyin/xingtu/get_xingtu_kolid_by_uid` | 根据抖音用户ID获取游客星图kolid/Get XingTu kolid by Douyin User ID |
| `get_xingtu_kolid_by_unique_id(unique_id)` | `GET /api/v1/douyin/xingtu/get_xingtu_kolid_by_unique_id` | 根据抖音号获取游客星图kolid/Get XingTu kolid by Douyin unique_id |
| `kol_audience_portrait_v1(kolId)` | `GET /api/v1/douyin/xingtu/kol_audience_portrait_v1` | 获取kol观众画像V1/Get kol Audience Portrait V1 |
| `kol_base_info_v1(kolId, platformChannel)` | `GET /api/v1/douyin/xingtu/kol_base_info_v1` | 获取kol基本信息V1/Get kol Base Info V1 |
| `kol_conversion_ability_analysis_v1(kolId, _range)` | `GET /api/v1/douyin/xingtu/kol_conversion_ability_analysis_v1` | 获取kol转化能力分析V1/Get kol Conversion Ability Analysis V1 |
| `kol_convert_video_display_v1(kolId, detailType, page)` | `GET /api/v1/douyin/xingtu/kol_convert_video_display_v1` | 获取kol转化视频展示V1/Get kol Convert Video Display V1 |
| `kol_cp_info_v1(kolId)` | `GET /api/v1/douyin/xingtu/kol_cp_info_v1` | 获取kol性价比能力分析V1/Get kol Cp Info V1 |
| `kol_daily_fans_v1(kolId, startDate, endDate)` | `GET /api/v1/douyin/xingtu/kol_daily_fans_v1` | 获取kol粉丝趋势V1/Get kol Daily Fans V1 |
| `kol_data_overview_v1(kolId, _type, _range, flowType, onlyAssign=...)` | `GET /api/v1/douyin/xingtu/kol_data_overview_v1` | 获取kol数据概览V1/Get kol Data Overview V1 |
| `kol_fans_portrait_v1(kolId, fansType=...)` | `GET /api/v1/douyin/xingtu/kol_fans_portrait_v1` | 获取kol粉丝画像V1/Get kol Fans Portrait V1 |
| `kol_link_struct_v1(kolId)` | `GET /api/v1/douyin/xingtu/kol_link_struct_v1` | 获取kol连接用户V1/Get kol Link Struct V1 |
| `kol_rec_videos_v1(kolId)` | `GET /api/v1/douyin/xingtu/kol_rec_videos_v1` | 获取kol内容表现V1/Get kol Rec Videos V1 |
| `kol_service_price_v1(kolId, platformChannel)` | `GET /api/v1/douyin/xingtu/kol_service_price_v1` | 获取kol服务报价V1/Get kol Service Price V1 |
| `kol_touch_distribution_v1(kolId)` | `GET /api/v1/douyin/xingtu/kol_touch_distribution_v1` | 获取kol连接用户来源V1/Get kol Touch Distribution V1 |
| `kol_video_performance_v1(kolId, onlyAssign)` | `GET /api/v1/douyin/xingtu/kol_video_performance_v1` | 获取kol视频表现V1/Get kol Video Performance V1 |
| `kol_xingtu_index_v1(kolId)` | `GET /api/v1/douyin/xingtu/kol_xingtu_index_v1` | 获取kol星图指数V1/Get kol Xingtu Index V1 |
| `search_kol_v1(keyword, platformSource, page)` | `GET /api/v1/douyin/xingtu/search_kol_v1` | 关键词搜索kol V1/Search Kol V1 |
| `search_kol_v2(keyword, followerRange=..., contentTag=...)` | `GET /api/v1/douyin/xingtu/search_kol_v2` | 高级搜索kol V2/Search Kol Advanced V2 |
## `client.douyin_xingtu_v2`
**Class:** `tikhub.resources.douyin_xingtu_v2.DouyinXingtuV2` (sync) / `AsyncDouyinXingtuV2` (async)
**Endpoints:** 21
| Method | Endpoint | Summary |
|---|---|---|
| `get_author_base_info(o_author_id, platform_source=..., platform_channel=..., recommend=..., need_sec_uid=..., need_linkage_info=...)` | `GET /api/v1/douyin/xingtu_v2/get_author_base_info` | 获取创作者基本信息/Get Author Base Info |
| `get_author_business_card_info(o_author_id)` | `GET /api/v1/douyin/xingtu_v2/get_author_business_card_info` | 获取创作者商业卡片信息/Get Author Business Card Info |
| `get_author_content_hot_keywords(author_id, keyword_type=...)` | `GET /api/v1/douyin/xingtu_v2/get_author_content_hot_keywords` | 获取创作者内容热词/Get Author Content Hot Keywords |
| `get_author_hot_comment_tokens(author_id, num=..., without_emoji=...)` | `GET /api/v1/douyin/xingtu_v2/get_author_hot_comment_tokens` | 获取创作者评论热词/Get Author Hot Comment Tokens |
| `get_author_local_info(o_author_id, platform_source=..., platform_channel=..., time_range=...)` | `GET /api/v1/douyin/xingtu_v2/get_author_local_info` | 获取创作者位置信息/Get Author Local Info |
| `get_author_market_fields(market_scene=...)` | `GET /api/v1/douyin/xingtu_v2/get_author_market_fields` | 获取达人广场筛选字段/Get Author Market Fields |
| `get_author_show_items(o_author_id, platform_source=..., platform_channel=..., limit=..., only_assign=..., flow_type=...)` | `GET /api/v1/douyin/xingtu_v2/get_author_show_items` | 获取创作者视频列表/Get Author Show Items |
| `get_author_spread_info(o_author_id, platform_source=..., platform_channel=..., type=..., flow_type=..., only_assign=..., range=...)` | `GET /api/v1/douyin/xingtu_v2/get_author_spread_info` | 获取创作者传播价值/Get Author Spread Info |
| `get_content_trend_guide()` | `GET /api/v1/douyin/xingtu_v2/get_content_trend_guide` | 获取内容趋势指南/Get Content Trend Guide |
| `get_demander_mcn_list(mcn_name=..., page=..., limit=..., order_by=...)` | `GET /api/v1/douyin/xingtu_v2/get_demander_mcn_list` | 搜索MCN机构列表/Get Demander MCN List |
| `get_excellent_case_category_list(platform_source=...)` | `GET /api/v1/douyin/xingtu_v2/get_excellent_case_category_list` | 获取优秀行业分类列表/Get Excellent Case Category List |
| `get_ip_activity_detail(id)` | `GET /api/v1/douyin/xingtu_v2/get_ip_activity_detail` | 获取星图IP活动详情/Get IP Activity Detail |
| `get_ip_activity_industry_list()` | `GET /api/v1/douyin/xingtu_v2/get_ip_activity_industry_list` | 获取星图IP日历行业列表/Get IP Activity Industry List |
| `get_ip_activity_list(query_start_time, query_end_time, industry_id_list=..., category_list=..., status_list=...)` | `POST /api/v1/douyin/xingtu_v2/get_ip_activity_list` | 获取星图IP日历活动列表/Get IP Activity List |
| `get_playlet_actor_rank_catalog()` | `POST /api/v1/douyin/xingtu_v2/get_playlet_actor_rank_catalog` | 获取短剧演员热榜分类/Get Playlet Actor Rank Catalog |
| `get_playlet_actor_rank_list(category=..., name=..., qualifier=..., period=..., date=..., limit=...)` | `GET /api/v1/douyin/xingtu_v2/get_playlet_actor_rank_list` | 获取短剧演员热榜/Get Playlet Actor Rank List |
| `get_ranking_list_catalog(codes=..., biz_scene=...)` | `GET /api/v1/douyin/xingtu_v2/get_ranking_list_catalog` | 获取星图热榜分类/Get Ranking List Catalog |
| `get_ranking_list_data(code=..., qualifier=..., version=..., period=..., date=..., limit=...)` | `GET /api/v1/douyin/xingtu_v2/get_ranking_list_data` | 获取星图达人商业榜数据/Get Ranking List Data |
| `get_recommend_for_star_authors(author_ids, similar_type=..., page=..., limit=...)` | `POST /api/v1/douyin/xingtu_v2/get_recommend_for_star_authors` | 获取相似创作者推荐/Get Recommend Similar Star Authors |
| `get_resource_list(resource_id)` | `GET /api/v1/douyin/xingtu_v2/get_resource_list` | 获取营销活动案例/Get Resource List |
| `get_user_profile_qrcode(core_user_id=..., sec_uid=...)` | `GET /api/v1/douyin/xingtu_v2/get_user_profile_qrcode` | 获取用户主页二维码/Get User Profile QRCode |
## `client.health_check`
**Class:** `tikhub.resources.health_check.HealthCheck` (sync) / `AsyncHealthCheck` (async)
**Endpoints:** 1
| Method | Endpoint | Summary |
|---|---|---|
| `check()` | `GET /api/v1/health/check` | 检查服务器是否正确响应请求 / Check if the server responds to requests correctly |
## `client.hybrid_parsing`
**Class:** `tikhub.resources.hybrid_parsing.HybridParsing` (sync) / `AsyncHybridParsing` (async)
**Endpoints:** 1
| Method | Endpoint | Summary |
|---|---|---|
| `video_data(url, minimal=..., base64_url=...)` | `GET /api/v1/hybrid/video_data` | 混合解析单一视频接口/Hybrid parsing single video endpoint |
## `client.instagram_v1`
**Class:** `tikhub.resources.instagram_v1.InstagramV1` (sync) / `AsyncInstagramV1` (async)
**Endpoints:** 29
| Method | Endpoint | Summary |
|---|---|---|
| `fetch_cities(country_code, page=...)` | `GET /api/v1/instagram/v1/fetch_cities` | 获取国家城市列表/Get cities by country |
| `fetch_comment_replies(media_id, comment_id, min_id=...)` | `GET /api/v1/instagram/v1/fetch_comment_replies` | 获取评论的子评论列表/Get comment replies |
| `fetch_explore_sections()` | `GET /api/v1/instagram/v1/fetch_explore_sections` | 获取探索页面分类/Get explore page sections |
| `fetch_hashtag_posts(hashtag, end_cursor=...)` | `GET /api/v1/instagram/v1/fetch_hashtag_posts` | 获取话题标签下的帖子/Get posts by hashtag |
| `fetch_location_info(location_id)` | `GET /api/v1/instagram/v1/fetch_location_info` | 获取地点信息/Get location info |
| `fetch_location_posts(location_id, tab=..., end_cursor=...)` | `GET /api/v1/instagram/v1/fetch_location_posts` | 获取地点下的帖子/Get posts by location |
| `fetch_locations(city_id, page=...)` | `GET /api/v1/instagram/v1/fetch_locations` | 获取城市地点列表/Get locations by city |
| `fetch_music_posts(music_id=..., music_url=..., max_id=...)` | `GET /api/v1/instagram/v1/fetch_music_posts` | 获取使用特定音乐的帖子/Get posts using specific music |
| `fetch_post_by_id(post_id)` | `GET /api/v1/instagram/v1/fetch_post_by_id` | 通过ID获取帖子详情/Get post by ID |
| `fetch_post_by_url(post_url)` | `GET /api/v1/instagram/v1/fetch_post_by_url` | 通过URL获取帖子详情/Get post by URL |
| `fetch_post_by_url_v2(post_url)` | `GET /api/v1/instagram/v1/fetch_post_by_url_v2` | 通过URL获取帖子详情 V2/Get post by URL V2 |
| `fetch_post_comments_v2(media_id, sort_order=..., min_id=...)` | `GET /api/v1/instagram/v1/fetch_post_comments_v2` | 获取帖子评论列表V2/Get post comments V2 |
| `fetch_related_profiles(user_id)` | `GET /api/v1/instagram/v1/fetch_related_profiles` | 获取相关用户推荐/Get related profiles |
| `fetch_search(query, select=...)` | `GET /api/v1/instagram/v1/fetch_search` | 搜索用户/话题/地点/Search users/hashtags/places |
| `fetch_section_posts(section_id, count=..., max_id=...)` | `GET /api/v1/instagram/v1/fetch_section_posts` | 获取分类下的帖子/Get posts by section |
| `fetch_user_about_info(user_id)` | `GET /api/v1/instagram/v1/fetch_user_about_info` | 获取用户的About信息/Get user about info |
| `fetch_user_info_by_id(user_id)` | `GET /api/v1/instagram/v1/fetch_user_info_by_id` | 根据用户ID获取用户数据/Get user data by user ID |
| `fetch_user_info_by_id_v2(user_id)` | `GET /api/v1/instagram/v1/fetch_user_info_by_id_v2` | 根据用户ID获取用户数据V2/Get user data by user ID V2 |
| `fetch_user_info_by_username(username)` | `GET /api/v1/instagram/v1/fetch_user_info_by_username` | 根据用户名获取用户数据/Get user data by username |
| `fetch_user_info_by_username_v2(username)` | `GET /api/v1/instagram/v1/fetch_user_info_by_username_v2` | 根据用户名获取用户数据V2/Get user data by username V2 |
| `fetch_user_info_by_username_v3(username)` | `GET /api/v1/instagram/v1/fetch_user_info_by_username_v3` | 根据用户名获取用户数据V3/Get user data by username V3 |
| `fetch_user_posts(user_id, count=..., max_id=...)` | `GET /api/v1/instagram/v1/fetch_user_posts` | 获取用户帖子列表/Get user posts list |
| `fetch_user_posts_v2(user_id, count=..., end_cursor=...)` | `GET /api/v1/instagram/v1/fetch_user_posts_v2` | 获取用户帖子列表V2/Get user posts list V2 |
| `fetch_user_reels(user_id, count=..., max_id=...)` | `GET /api/v1/instagram/v1/fetch_user_reels` | 获取用户Reels列表/Get user Reels list |
| `fetch_user_reposts(user_id, max_id=...)` | `GET /api/v1/instagram/v1/fetch_user_reposts` | 获取用户转发列表/Get user reposts list |
| `fetch_user_tagged_posts(user_id, count=..., end_cursor=...)` | `GET /api/v1/instagram/v1/fetch_user_tagged_posts` | 获取用户被标记的帖子/Get user tagged posts |
| `media_id_to_shortcode(media_id)` | `GET /api/v1/instagram/v1/media_id_to_shortcode` | Media ID转Shortcode/Convert media ID to shortcode |
| `shortcode_to_media_id(shortcode)` | `GET /api/v1/instagram/v1/shortcode_to_media_id` | Shortcode转Media ID/Convert shortcode to media ID |
| `user_id_to_username(user_id)` | `GET /api/v1/instagram/v1/user_id_to_username` | 用户ID转用户信息/Get user info by user ID |
## `client.instagram_v2`
**Class:** `tikhub.resources.instagram_v2.InstagramV2` (sync) / `AsyncInstagramV2` (async)
**Endpoints:** 27
| Method | Endpoint | Summary |
|---|---|---|
| `fetch_comment_replies(code_or_url, comment_id, pagination_token=...)` | `GET /api/v1/instagram/v2/fetch_comment_replies` | 获取评论回复/Get comment replies |
| `fetch_hashtag_posts(keyword, feed_type=..., pagination_token=...)` | `GET /api/v1/instagram/v2/fetch_hashtag_posts` | 获取话题帖子/Get hashtag posts |
| `fetch_highlight_stories(highlight_id)` | `GET /api/v1/instagram/v2/fetch_highlight_stories` | 获取精选故事详情/Get highlight stories |
| `fetch_location_posts(location_id, pagination_token=...)` | `GET /api/v1/instagram/v2/fetch_location_posts` | 获取地点帖子/Get location posts |
| `fetch_music_posts(audio_canonical_id, pagination_token=...)` | `GET /api/v1/instagram/v2/fetch_music_posts` | 获取音乐帖子/Get music posts |
| `fetch_post_comments(code_or_url, sort_by=..., pagination_token=...)` | `GET /api/v1/instagram/v2/fetch_post_comments` | 获取帖子评论/Get post comments |
| `fetch_post_info(code_or_url)` | `GET /api/v1/instagram/v2/fetch_post_info` | 获取帖子详情/Get post info |
| `fetch_post_likes(code_or_url, end_cursor=...)` | `GET /api/v1/instagram/v2/fetch_post_likes` | 获取帖子点赞列表/Get post likes |
| `fetch_similar_users(username=..., user_id=...)` | `GET /api/v1/instagram/v2/fetch_similar_users` | 获取相似用户/Get similar users |
| `fetch_user_followers(username=..., user_id=..., pagination_token=...)` | `GET /api/v1/instagram/v2/fetch_user_followers` | 获取用户粉丝/Get user followers |
| `fetch_user_following(username=..., user_id=..., pagination_token=...)` | `GET /api/v1/instagram/v2/fetch_user_following` | 获取用户关注/Get user following |
| `fetch_user_highlights(username=..., user_id=...)` | `GET /api/v1/instagram/v2/fetch_user_highlights` | 获取用户精选/Get user highlights |
| `fetch_user_info(username=..., user_id=...)` | `GET /api/v1/instagram/v2/fetch_user_info` | 获取用户信息/Get user info |
| `fetch_user_posts(username=..., user_id=..., pagination_token=...)` | `GET /api/v1/instagram/v2/fetch_user_posts` | 获取用户帖子/Get user posts |
| `fetch_user_reels(username=..., user_id=..., pagination_token=...)` | `GET /api/v1/instagram/v2/fetch_user_reels` | 获取用户Reels/Get user reels |
| `fetch_user_stories(username=..., user_id=...)` | `GET /api/v1/instagram/v2/fetch_user_stories` | 获取用户故事/Get user stories |
| `fetch_user_tagged_posts(username=..., user_id=..., pagination_token=...)` | `GET /api/v1/instagram/v2/fetch_user_tagged_posts` | 获取用户被标记的帖子/Get user tagged posts |
| `general_search(keyword, pagination_token=...)` | `GET /api/v1/instagram/v2/general_search` | 综合搜索/General search |
| `media_id_to_shortcode(media_id)` | `GET /api/v1/instagram/v2/media_id_to_shortcode` | Media ID转Shortcode/Convert media ID to shortcode |
| `search_by_coordinates(latitude, longitude)` | `GET /api/v1/instagram/v2/search_by_coordinates` | 根据坐标搜索地点/Search locations by coordinates |
| `search_hashtags(keyword)` | `GET /api/v1/instagram/v2/search_hashtags` | 搜索话题标签/Search hashtags |
| `search_locations(keyword)` | `GET /api/v1/instagram/v2/search_locations` | 搜索地点/Search locations |
| `search_music(keyword)` | `GET /api/v1/instagram/v2/search_music` | 搜索音乐/Search music |
| `search_reels(keyword, pagination_token=...)` | `GET /api/v1/instagram/v2/search_reels` | 搜索Reels/Search reels |
| `search_users(keyword)` | `GET /api/v1/instagram/v2/search_users` | 搜索用户/Search users |
| `shortcode_to_media_id(shortcode)` | `GET /api/v1/instagram/v2/shortcode_to_media_id` | Shortcode转Media ID/Convert shortcode to media ID |
| `user_id_to_username(user_id)` | `GET /api/v1/instagram/v2/user_id_to_username` | 用户ID转用户信息/Get user info by user ID |
## `client.instagram_v3`
**Class:** `tikhub.resources.instagram_v3.InstagramV3` (sync) / `AsyncInstagramV3` (async)
**Endpoints:** 32
| Method | Endpoint | Summary |
|---|---|---|
| `bulk_translate_comments(comment_ids)` | `GET /api/v1/instagram/v3/bulk_translate_comments` | 批量翻译评论/Bulk translate comments |
| `extract_shortcode(url)` | `GET /api/v1/instagram/v3/extract_shortcode` | 从URL提取短码/Extract shortcode from URL |
| `general_search(query, next_max_id=..., rank_token=..., enable_metadata=...)` | `GET /api/v1/instagram/v3/general_search` | 综合搜索(支持分页)/General search (with pagination) |
| `get_comment_replies(media_id, comment_id, min_id=...)` | `GET /api/v1/instagram/v3/get_comment_replies` | 获取评论的子评论/回复/Get comment replies |
| `get_explore(max_id=...)` | `GET /api/v1/instagram/v3/get_explore` | 获取探索页推荐帖子/Get explore feed |
| `get_highlight_stories(highlight_id, reel_ids=..., first=..., last=...)` | `GET /api/v1/instagram/v3/get_highlight_stories` | 获取Highlight精选详情/Get highlight stories |
| `get_location_info(location_id, show_nearby=...)` | `GET /api/v1/instagram/v3/get_location_info` | 获取地点详情/Get location info |
| `get_location_nearby(location_id)` | `GET /api/v1/instagram/v3/get_location_nearby` | 获取地点附近内容/Get nearby location content |
| `get_location_posts(location_id, tab=..., first=..., after=..., page_size_override=...)` | `GET /api/v1/instagram/v3/get_location_posts` | 获取地点相关帖子/Get location posts |
| `get_post_comments(code, min_id=..., sort_order=...)` | `GET /api/v1/instagram/v3/get_post_comments` | 获取帖子评论/Get post comments |
| `get_post_info(media_id)` | `GET /api/v1/instagram/v3/get_post_info` | 获取帖子详情/Get post info (media_id or URL) |
| `get_post_info_by_code(code)` | `GET /api/v1/instagram/v3/get_post_info_by_code` | 获取帖子详情(code)/Get post info by shortcode |
| `get_post_oembed(url, hidecaption=..., maxwidth=...)` | `GET /api/v1/instagram/v3/get_post_oembed` | 获取帖子oEmbed内嵌信息/Get post oEmbed info |
| `get_recommended_reels(first=..., after=...)` | `GET /api/v1/instagram/v3/get_recommended_reels` | 获取Reels推荐列表/Get recommended Reels feed |
| `get_user_about(user_id=..., username=...)` | `GET /api/v1/instagram/v3/get_user_about` | 获取用户账户简介/Get user about info |
| `get_user_brief(user_id, username)` | `GET /api/v1/instagram/v3/get_user_brief` | 获取用户短详情/Get user brief info |
| `get_user_followers(user_id=..., username=..., count=..., max_id=...)` | `GET /api/v1/instagram/v3/get_user_followers` | 获取用户粉丝列表/Get user followers list |
| `get_user_following(user_id=..., username=..., count=..., max_id=...)` | `GET /api/v1/instagram/v3/get_user_following` | 获取用户关注列表/Get user following list |
| `get_user_former_usernames(user_id=..., username=...)` | `GET /api/v1/instagram/v3/get_user_former_usernames` | 获取用户曾用用户名/Get user former usernames |
| `get_user_highlights(user_id=..., username=..., first=..., after=..., before=..., last=...)` | `GET /api/v1/instagram/v3/get_user_highlights` | 获取用户精选Highlights列表/Get user highlights |
| `get_user_id_by_username(username)` | `GET /api/v1/instagram/v3/get_user_id_by_username` | 通过用户名获取用户ID/Get user ID by username |
| `get_user_posts(username, first=..., after=..., before=..., last=..., count=...)` | `GET /api/v1/instagram/v3/get_user_posts` | 获取用户帖子列表/Get user posts |
| `get_user_profile(user_id=..., username=...)` | `GET /api/v1/instagram/v3/get_user_profile` | 获取用户信息/Get user profile |
| `get_user_reels(user_id=..., username=..., first=..., after=..., before=..., last=..., page_size=...)` | `GET /api/v1/instagram/v3/get_user_reels` | 获取用户Reels列表/Get user reels |
| `get_user_stories(user_id=..., username=...)` | `GET /api/v1/instagram/v3/get_user_stories` | 获取用户Stories(快拍)/Get user stories |
| `get_user_tagged_posts(user_id=..., username=..., first=..., after=..., before=..., last=..., count=...)` | `GET /api/v1/instagram/v3/get_user_tagged_posts` | 获取用户被标记的帖子/Get user tagged posts |
| `media_id_to_shortcode(media_id)` | `GET /api/v1/instagram/v3/media_id_to_shortcode` | 媒体ID转短码/Convert media ID to shortcode |
| `search_hashtags(query, rank_token=...)` | `GET /api/v1/instagram/v3/search_hashtags` | 搜索话题标签/Search hashtags |
| `search_places(query, rank_token=...)` | `GET /api/v1/instagram/v3/search_places` | 搜索地点/Search places |
| `search_users(query, rank_token=...)` | `GET /api/v1/instagram/v3/search_users` | 搜索用户/Search users |
| `shortcode_to_media_id(shortcode)` | `GET /api/v1/instagram/v3/shortcode_to_media_id` | 短码转媒体ID/Convert shortcode to media ID |
| `translate_comment(comment_id)` | `GET /api/v1/instagram/v3/translate_comment` | 翻译评论/帖子文本/Translate comment or caption |
## `client.ios_shortcut`
**Class:** `tikhub.resources.ios_shortcut.IosShortcut` (sync) / `AsyncIosShortcut` (async)
**Endpoints:** 1
| Method | Endpoint | Summary |
|---|---|---|
| `shortcut()` | `GET /api/v1/ios_shortcut/shortcut` | 用于iOS快捷指令的版本更新信息/Version update information for iOS shortcuts |
## `client.kuaishou_app`
**Class:** `tikhub.resources.kuaishou_app.KuaishouApp` (sync) / `AsyncKuaishouApp` (async)
**Endpoints:** 20
| Method | Endpoint | Summary |
|---|---|---|
| `fetch_brand_top_list(subTabId=..., subTabName=...)` | `GET /api/v1/kuaishou/app/fetch_brand_top_list` | 快手品牌榜单/Kuaishou brand top list |
| `fetch_hot_board_categories()` | `GET /api/v1/kuaishou/app/fetch_hot_board_categories` | 快手热榜分类/Kuaishou hot categories |
| `fetch_hot_board_detail(boardType=..., boardId=...)` | `GET /api/v1/kuaishou/app/fetch_hot_board_detail` | 快手热榜详情/Kuaishou hot board detail |
| `fetch_hot_search_person()` | `GET /api/v1/kuaishou/app/fetch_hot_search_person` | 快手热搜人物榜单/Kuaishou hot search person board |
| `fetch_live_top_list(subTabId=..., subTabName=...)` | `GET /api/v1/kuaishou/app/fetch_live_top_list` | 快手直播榜单/Kuaishou live top list |
| `fetch_magic_face_hot(magic_face_id, pcursor=..., count=...)` | `GET /api/v1/kuaishou/app/fetch_magic_face_hot` | 获取魔法表情热门视频/Fetch magic face hot videos |
| `fetch_magic_face_usage(magic_face_id)` | `GET /api/v1/kuaishou/app/fetch_magic_face_usage` | 获取魔法表情使用人数/Fetch magic face usage count |
| `fetch_one_user_v2(user_id)` | `GET /api/v1/kuaishou/app/fetch_one_user_v2` | 获取单个用户数据V2/Get single user data V2 |
| `fetch_one_video(photo_id)` | `GET /api/v1/kuaishou/app/fetch_one_video` | 视频详情V1/Video detailsV1 |
| `fetch_one_video_by_url(share_text)` | `GET /api/v1/kuaishou/app/fetch_one_video_by_url` | 根据链接获取单个作品数据/Fetch single video by URL |
| `fetch_one_video_comment(photo_id, pcursor=...)` | `GET /api/v1/kuaishou/app/fetch_one_video_comment` | 获取单个作品评论数据/Get single video comment data |
| `fetch_shopping_top_list(subTabId=..., subTabName=...)` | `GET /api/v1/kuaishou/app/fetch_shopping_top_list` | 快手购物榜单/Kuaishou shopping top list |
| `fetch_user_hot_post(user_id, pcursor=...)` | `GET /api/v1/kuaishou/app/fetch_user_hot_post` | 获取用户热门作品数据/Get user hot post data |
| `fetch_user_live_info(user_id)` | `GET /api/v1/kuaishou/app/fetch_user_live_info` | 获取用户直播信息/Get user live info |
| `fetch_user_post_v2(user_id, pcursor=...)` | `GET /api/v1/kuaishou/app/fetch_user_post_v2` | 用户视频列表V2/User video list V2 |
| `fetch_videos_batch(photo_ids)` | `GET /api/v1/kuaishou/app/fetch_videos_batch` | 快手批量视频查询接口/Kuaishou batch video query API |
| `generate_kuaishou_share_link(shareObjectId)` | `GET /api/v1/kuaishou/app/generate_kuaishou_share_link` | 生成快手分享链接/Generate Kuaishou share link |
| `search_comprehensive(keyword, pcursor=..., sort_type=..., publish_time=..., duration=..., search_scope=...)` | `GET /api/v1/kuaishou/app/search_comprehensive` | 综合搜索/Comprehensive search |
| `search_user_v2(keyword, page=...)` | `GET /api/v1/kuaishou/app/search_user_v2` | 搜索用户V2/Search user V2 |
| `search_video_v2(keyword, page=...)` | `GET /api/v1/kuaishou/app/search_video_v2` | 搜索视频V2/Search video V2 |
## `client.kuaishou_web`
**Class:** `tikhub.resources.kuaishou_web.KuaishouWeb` (sync) / `AsyncKuaishouWeb` (async)
**Endpoints:** 13
| Method | Endpoint | Summary |
|---|---|---|
| `fetch_get_user_id(share_link)` | `GET /api/v1/kuaishou/web/fetch_get_user_id` | 获取用户ID/Fetch user ID |
| `fetch_kuaishou_hot_list_v1()` | `GET /api/v1/kuaishou/web/fetch_kuaishou_hot_list_v1` | 获取快手热榜 V1/Fetch Kuaishou Hot List V1 |
| `fetch_kuaishou_hot_list_v2(board_type=...)` | `GET /api/v1/kuaishou/web/fetch_kuaishou_hot_list_v2` | 获取快手热榜 V2/Fetch Kuaishou Hot List V2 |
| `fetch_one_video(share_text)` | `GET /api/v1/kuaishou/web/fetch_one_video` | 获取单个作品数据 V1/Get single video data V1 |
| `fetch_one_video_by_url(url)` | `GET /api/v1/kuaishou/web/fetch_one_video_by_url` | 链接获取作品数据/Fetch single video by URL |
| `fetch_one_video_comment(photo_id, pcursor=...)` | `GET /api/v1/kuaishou/web/fetch_one_video_comment` | 获取作品一级评论/Fetch video comments |
| `fetch_one_video_sub_comment(photo_id, root_comment_id, pcursor=...)` | `GET /api/v1/kuaishou/web/fetch_one_video_sub_comment` | 获取作品二级评论/Fetch video sub comments |
| `fetch_one_video_v2(photo_id)` | `GET /api/v1/kuaishou/web/fetch_one_video_v2` | 获取单个作品数据 V2/Get single video data V2 |
| `fetch_user_collect(user_id, pcursor=...)` | `GET /api/v1/kuaishou/web/fetch_user_collect` | 获取用户收藏作品/Fetch user collect |
| `fetch_user_info(user_id)` | `GET /api/v1/kuaishou/web/fetch_user_info` | 获取用户信息/Fetch user info |
| `fetch_user_live_replay(user_id, pcursor=...)` | `GET /api/v1/kuaishou/web/fetch_user_live_replay` | 获取用户直播回放/Fetch user live replay |
| `fetch_user_post(user_id, pcursor=...)` | `GET /api/v1/kuaishou/web/fetch_user_post` | 获取用户发布作品/Fetch user posts |
| `generate_share_short_url(photo_id)` | `GET /api/v1/kuaishou/web/generate_share_short_url` | 生成分享短连接/Generate share short URL |
## `client.lemon8_app`
**Class:** `tikhub.resources.lemon8_app.Lemon8App` (sync) / `AsyncLemon8App` (async)
**Endpoints:** 16
| Method | Endpoint | Summary |
|---|---|---|
| `fetch_discover_banners()` | `GET /api/v1/lemon8/app/fetch_discover_banners` | 获取发现页Banner/Get banners of discover page |
| `fetch_discover_tab()` | `GET /api/v1/lemon8/app/fetch_discover_tab` | 获取发现页主体内容/Get main content of discover page |
| `fetch_discover_tab_information_tabs()` | `GET /api/v1/lemon8/app/fetch_discover_tab_information_tabs` | 获取发现页的 Editor's Picks/Get Editor's Picks of discover page |
| `fetch_hot_search_keywords()` | `GET /api/v1/lemon8/app/fetch_hot_search_keywords` | 获取热搜关键词/Get hot search keywords |
| `fetch_post_comment_list(group_id, item_id, media_id, offset=...)` | `GET /api/v1/lemon8/app/fetch_post_comment_list` | 获取指定作品的评论列表/Get comments list of specified post |
| `fetch_post_detail(item_id)` | `GET /api/v1/lemon8/app/fetch_post_detail` | 获取指定作品的信息/Get information of specified post |
| `fetch_search(query, max_cursor=..., filter_type=..., order_by=..., search_tab=...)` | `GET /api/v1/lemon8/app/fetch_search` | 搜索接口/Search API |
| `fetch_topic_info(forum_id)` | `GET /api/v1/lemon8/app/fetch_topic_info` | 获取话题信息/Get topic information |
| `fetch_topic_post_list(category, category_parameter, hashtag_name, max_behot_time=..., sort_type=...)` | `GET /api/v1/lemon8/app/fetch_topic_post_list` | 获取话题作品列表/Get topic post list |
| `fetch_user_follower_list(user_id, cursor=...)` | `GET /api/v1/lemon8/app/fetch_user_follower_list` | 获取指定用户的粉丝列表/Get fans list of specified user |
| `fetch_user_following_list(user_id, cursor=...)` | `GET /api/v1/lemon8/app/fetch_user_following_list` | 获取指定用户的关注列表/Get following list of specified user |
| `fetch_user_profile(user_id)` | `GET /api/v1/lemon8/app/fetch_user_profile` | 获取指定用户的信息/Get information of specified user |
| `get_item_id(share_text)` | `GET /api/v1/lemon8/app/get_item_id` | 通过分享链接获取作品ID/Get post ID through sharing link |
| `get_item_ids(body)` | `POST /api/v1/lemon8/app/get_item_ids` | 通过分享链接批量获取作品ID/Get post IDs in batch through sharing links |
| `get_user_id(share_text)` | `GET /api/v1/lemon8/app/get_user_id` | 通过分享链接获取用户ID/Get user ID through sharing link |
| `get_user_ids(body)` | `POST /api/v1/lemon8/app/get_user_ids` | 通过分享链接批量获取用户ID/Get user IDs in batch through sharing links |
## `client.linkedin_web`
**Class:** `tikhub.resources.linkedin_web.LinkedinWeb` (sync) / `AsyncLinkedinWeb` (async)
**Endpoints:** 25
| Method | Endpoint | Summary |
|---|---|---|
| `get_company_job_count(company_id)` | `GET /api/v1/linkedin/web/get_company_job_count` | 获取公司职位数量/Get company job count |
| `get_company_jobs(company_id, page=..., sort_by=..., date_posted=..., experience_level=..., remote=..., job_type=..., easy_apply=..., under_10_applicants=..., fair_chance_employer=...)` | `GET /api/v1/linkedin/web/get_company_jobs` | 获取公司职位/Get company jobs |
| `get_company_people(company_id, page=...)` | `GET /api/v1/linkedin/web/get_company_people` | 获取公司员工/Get company people |
| `get_company_posts(company_id, page=..., sort_by=...)` | `GET /api/v1/linkedin/web/get_company_posts` | 获取公司帖子/Get company posts |
| `get_company_profile(company=..., company_id=...)` | `GET /api/v1/linkedin/web/get_company_profile` | 获取公司资料/Get company profile |
| `get_job_detail(job_id, include_skills=...)` | `GET /api/v1/linkedin/web/get_job_detail` | 获取职位详情/Get job detail |
| `get_user_about(urn)` | `GET /api/v1/linkedin/web/get_user_about` | 获取用户简介/Get user about |
| `get_user_certifications(urn, page=...)` | `GET /api/v1/linkedin/web/get_user_certifications` | 获取用户认证/Get user certifications |
| `get_user_comments(urn, page=..., pagination_token=...)` | `GET /api/v1/linkedin/web/get_user_comments` | 获取用户评论/Get user comments |
| `get_user_contact(username)` | `GET /api/v1/linkedin/web/get_user_contact` | 获取用户联系信息/Get user contact information |
| `get_user_educations(urn, page=...)` | `GET /api/v1/linkedin/web/get_user_educations` | 获取用户教育背景/Get user educations |
| `get_user_experience(urn, page=...)` | `GET /api/v1/linkedin/web/get_user_experience` | 获取用户工作经历/Get user experience |
| `get_user_follower_and_connection(username)` | `GET /api/v1/linkedin/web/get_user_follower_and_connection` | 获取用户粉丝和连接数/Get user follower and connection |
| `get_user_honors(urn, page=...)` | `GET /api/v1/linkedin/web/get_user_honors` | 获取用户荣誉奖项/Get user honors |
| `get_user_images(urn, page=..., pagination_token=...)` | `GET /api/v1/linkedin/web/get_user_images` | 获取用户图片/Get user images |
| `get_user_interests_companies(urn, page=...)` | `GET /api/v1/linkedin/web/get_user_interests_companies` | 获取用户感兴趣的公司/Get user interests companies |
| `get_user_interests_groups(urn, page=...)` | `GET /api/v1/linkedin/web/get_user_interests_groups` | 获取用户感兴趣的群组/Get user interests groups |
| `get_user_posts(urn, page=..., pagination_token=...)` | `GET /api/v1/linkedin/web/get_user_posts` | 获取用户帖子/Get user posts |
| `get_user_profile(username, include_follower_and_connection=..., include_experiences=..., include_skills=..., include_certifications=..., include_publications=..., include_educations=..., include_volunteers=..., include_honors=..., include_interests=..., include_bio=...)` | `GET /api/v1/linkedin/web/get_user_profile` | 获取用户资料/Get user profile |
| `get_user_publications(urn, page=...)` | `GET /api/v1/linkedin/web/get_user_publications` | 获取用户出版物/Get user publications |
| `get_user_recommendations(urn, page=..., type=..., pagination_token=...)` | `GET /api/v1/linkedin/web/get_user_recommendations` | 获取用户推荐信/Get user recommendations |
| `get_user_skills(urn, page=...)` | `GET /api/v1/linkedin/web/get_user_skills` | 获取用户技能/Get user skills |
| `get_user_videos(urn, page=..., pagination_token=...)` | `GET /api/v1/linkedin/web/get_user_videos` | 获取用户视频/Get user videos |
| `search_jobs(keyword, page=..., sort_by=..., date_posted=..., geocode=..., company=..., experience_level=..., remote=..., job_type=..., easy_apply=..., has_verifications=..., under_10_applicants=..., fair_chance_employer=...)` | `GET /api/v1/linkedin/web/search_jobs` | 搜索职位/Search jobs |
| `search_people(name=..., first_name=..., last_name=..., title=..., company=..., school=..., page=..., geocode_location=..., current_company=..., profile_language=..., industry=..., service_category=...)` | `GET /api/v1/linkedin/web/search_people` | 搜索用户/Search people |
## `client.pipixia_app`
**Class:** `tikhub.resources.pipixia_app.PipixiaApp` (sync) / `AsyncPipixiaApp` (async)
**Endpoints:** 17
| Method | Endpoint | Summary |
|---|---|---|
| `fetch_hashtag_detail(hashtag_id)` | `GET /api/v1/pipixia/app/fetch_hashtag_detail` | 获取话题详情/Get hashtag detail |
| `fetch_hashtag_post_list(hashtag_id, cursor=..., feed_count=..., hashtag_request_type=..., hashtag_sort_type=...)` | `GET /api/v1/pipixia/app/fetch_hashtag_post_list` | 获取话题作品列表/Get hashtag post list |
| `fetch_home_feed(cursor=...)` | `GET /api/v1/pipixia/app/fetch_home_feed` | 获取首页推荐/Get home feed |
| `fetch_home_short_drama_feed(page=...)` | `GET /api/v1/pipixia/app/fetch_home_short_drama_feed` | 获取首页短剧推荐/Get home short drama feed |
| `fetch_hot_search_board_detail(block_type)` | `GET /api/v1/pipixia/app/fetch_hot_search_board_detail` | 获取热搜榜单详情/Get hot search board detail |
| `fetch_hot_search_board_list()` | `GET /api/v1/pipixia/app/fetch_hot_search_board_list` | 获取热搜榜单列表/Get hot search board list |
| `fetch_hot_search_words()` | `GET /api/v1/pipixia/app/fetch_hot_search_words` | 获取热搜词条/Get hot search words |
| `fetch_increase_post_view_count(cell_id, cell_type=...)` | `GET /api/v1/pipixia/app/fetch_increase_post_view_count` | 增加作品浏览数/Increase post view count |
| `fetch_post_comment_list(cell_id, cell_type=..., offset=...)` | `GET /api/v1/pipixia/app/fetch_post_comment_list` | 获取作品评论列表/Get post comment list |
| `fetch_post_detail(cell_id, cell_type=...)` | `GET /api/v1/pipixia/app/fetch_post_detail` | 获取单个作品数据/Get single video data |
| `fetch_post_statistics(cell_id)` | `GET /api/v1/pipixia/app/fetch_post_statistics` | 获取作品统计数据/Get post statistics |
| `fetch_search(keyword, offset=..., search_type=...)` | `GET /api/v1/pipixia/app/fetch_search` | 搜索接口/Search API |
| `fetch_short_url(original_url)` | `GET /api/v1/pipixia/app/fetch_short_url` | 生成短连接/Generate short URL |
| `fetch_user_follower_list(user_id, cursor=...)` | `GET /api/v1/pipixia/app/fetch_user_follower_list` | 获取用户粉丝列表/Get user follower list |
| `fetch_user_following_list(user_id, cursor=...)` | `GET /api/v1/pipixia/app/fetch_user_following_list` | 获取用户关注列表/Get user following list |
| `fetch_user_info(user_id)` | `GET /api/v1/pipixia/app/fetch_user_info` | 获取用户信息/Get user information |
| `fetch_user_post_list(user_id, cursor=..., feed_count=...)` | `GET /api/v1/pipixia/app/fetch_user_post_list` | 获取用户作品列表/Get user post list |
## `client.reddit_app`
**Class:** `tikhub.resources.reddit_app.RedditApp` (sync) / `AsyncRedditApp` (async)
**Endpoints:** 24
| Method | Endpoint | Summary |
|---|---|---|
| `check_subreddit_muted(subreddit_id, need_format=...)` | `GET /api/v1/reddit/app/check_subreddit_muted` | 检查版块是否静音/Check if Subreddit is Muted |
| `fetch_comment_replies(post_id, cursor, sort_type=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_comment_replies` | 获取Reddit APP评论回复(二级评论)/Fetch Reddit APP Comment Replies (Sub-comments) |
| `fetch_community_highlights(subreddit_id, need_format=...)` | `GET /api/v1/reddit/app/fetch_community_highlights` | 获取Reddit APP社区亮点/Fetch Reddit APP Community Highlights |
| `fetch_dynamic_search(query, search_type=..., sort=..., time_range=..., safe_search=..., allow_nsfw=..., after=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_dynamic_search` | 获取Reddit APP动态搜索结果/Fetch Reddit APP Dynamic Search Results |
| `fetch_games_feed(sort=..., time=..., after=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_games_feed` | 获取Reddit APP游戏推荐内容/Fetch Reddit APP Games Feed |
| `fetch_home_feed(sort=..., filter_posts=..., after=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_home_feed` | 获取Reddit APP首页推荐内容/Fetch Reddit APP Home Feed |
| `fetch_news_feed(subtopic_ids=..., after=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_news_feed` | 获取Reddit APP资讯推荐内容/Fetch Reddit APP News Feed |
| `fetch_popular_feed(sort=..., time=..., filter_posts=..., after=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_popular_feed` | 获取Reddit APP流行推荐内容/Fetch Reddit APP Popular Feed |
| `fetch_post_comments(post_id, sort_type=..., after=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_post_comments` | 获取Reddit APP帖子评论/Fetch Reddit APP Post Comments |
| `fetch_post_details(post_id, include_comment_id=..., comment_id=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_post_details` | 获取单个Reddit帖子详情/Fetch Single Reddit Post Details |
| `fetch_post_details_batch(post_ids, include_comment_id=..., comment_id=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_post_details_batch` | 批量获取Reddit帖子详情(最多5条)/Fetch Reddit Post Details in Batch (Max 5) |
| `fetch_post_details_batch_large(post_ids, include_comment_id=..., comment_id=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_post_details_batch_large` | 大批量获取Reddit帖子详情(最多30条)/Fetch Reddit Post Details in Large Batch (Max 30) |
| `fetch_search_typeahead(query, safe_search=..., allow_nsfw=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_search_typeahead` | 获取Reddit APP搜索自动补全建议/Fetch Reddit APP Search Typeahead Suggestions |
| `fetch_subreddit_feed(subreddit_name, sort=..., filter_posts=..., after=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_subreddit_feed` | 获取Reddit APP版块Feed内容/Fetch Reddit APP Subreddit Feed |
| `fetch_subreddit_info(subreddit_name=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_subreddit_info` | 获取Reddit APP版块信息/Fetch Reddit APP Subreddit Info |
| `fetch_subreddit_post_channels(subreddit_name=..., sort=..., range=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_subreddit_post_channels` | 获取Reddit APP版块帖子频道信息/Fetch Reddit APP Subreddit Post Channels |
| `fetch_subreddit_settings(subreddit_id, need_format=...)` | `GET /api/v1/reddit/app/fetch_subreddit_settings` | 获取Reddit APP版块设置/Fetch Reddit APP Subreddit Settings |
| `fetch_subreddit_style(subreddit_name=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_subreddit_style` | 获取Reddit APP版块规则样式信息/Fetch Reddit APP Subreddit Rules and Style Info |
| `fetch_trending_searches(need_format=...)` | `GET /api/v1/reddit/app/fetch_trending_searches` | 获取Reddit APP今日热门搜索/Fetch Reddit APP Trending Searches |
| `fetch_user_active_subreddits(username, need_format=...)` | `GET /api/v1/reddit/app/fetch_user_active_subreddits` | 获取用户活跃的社区列表/Fetch User's Active Subreddits |
| `fetch_user_comments(username, sort=..., page_size=..., after=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_user_comments` | 获取用户评论列表/Fetch User Comments |
| `fetch_user_posts(username, sort=..., after=..., need_format=...)` | `GET /api/v1/reddit/app/fetch_user_posts` | 获取用户发布的帖子列表/Fetch User Posts |
| `fetch_user_profile(username, need_format=...)` | `GET /api/v1/reddit/app/fetch_user_profile` | 获取Reddit APP用户资料信息/Fetch Reddit APP User Profile |
| `fetch_user_trophies(username, need_format=...)` | `GET /api/v1/reddit/app/fetch_user_trophies` | 获取用户公开奖杯/Fetch User Public Trophies |
## `client.sora2`
**Class:** `tikhub.resources.sora2.Sora2` (sync) / `AsyncSora2` (async)
**Endpoints:** 17
| Method | Endpoint | Summary |
|---|---|---|
| `create_video(prompt, orientation=..., media_id=...)` | `POST /api/v1/sora2/create_video` | [已弃用/Deprecated] 文本/图片生成视频/Create video from text or image |
| `get_cameo_leaderboard(cursor=...)` | `GET /api/v1/sora2/get_cameo_leaderboard` | 获取 Cameo 出镜秀达人排行榜/Fetch Cameo leaderboard |
| `get_comment_replies(comment_id, cursor=...)` | `GET /api/v1/sora2/get_comment_replies` | 获取评论的回复/Fetch comment replies |
| `get_feed(cursor=..., eager_views=...)` | `GET /api/v1/sora2/get_feed` | 获取Feed流(热门/推荐视频)/Fetch feed |
| `get_post_comments(post_id, cursor=...)` | `GET /api/v1/sora2/get_post_comments` | 获取作品一级评论/Fetch post comments |
| `get_post_detail(post_id=..., post_url=...)` | `GET /api/v1/sora2/get_post_detail` | 获取单一作品详情/Fetch single post detail |
| `get_post_remix_list(post_id=..., post_url=..., cursor=...)` | `GET /api/v1/sora2/get_post_remix_list` | 获取作品的 Remix 列表/Fetch post remix list |
| `get_task_detail(task_id=..., generation_id=...)` | `GET /api/v1/sora2/get_task_detail` | [已弃用/Deprecated] 获取任务生成的作品详情(无水印版本)/Get task-generated post detail (watermark-free) |
| `get_task_status(task_id)` | `GET /api/v1/sora2/get_task_status` | [已弃用/Deprecated] 查询任务状态/Get task status |
| `get_user_cameo_appearances(user_id, cursor=...)` | `GET /api/v1/sora2/get_user_cameo_appearances` | 获取用户Cameo出镜秀列表/Fetch user cameo appearances |
| `get_user_followers(user_id, cursor=...)` | `GET /api/v1/sora2/get_user_followers` | 获取用户粉丝列表/Fetch user followers |
| `get_user_following(user_id, cursor=...)` | `GET /api/v1/sora2/get_user_following` | 获取用户关注列表/Fetch user following |
| `get_user_posts(user_id, cursor=...)` | `GET /api/v1/sora2/get_user_posts` | 获取用户发布的帖子列表/Fetch user posts |
| `get_user_profile(user_id)` | `GET /api/v1/sora2/get_user_profile` | 获取用户信息档案/Fetch user profile |
| `get_video_download_info(post_id=..., post_url=...)` | `GET /api/v1/sora2/get_video_download_info` | 获取无水印视频下载信息/Fetch none watermark video download info |
| `search_users(username)` | `GET /api/v1/sora2/search_users` | 搜索用户/Search users |
| `upload_image(file)` | `POST /api/v1/sora2/upload_image` | 上传图片获取media_id/Upload image to get media_id |
## `client.temp_mail`
**Class:** `tikhub.resources.temp_mail.TempMail` (sync) / `AsyncTempMail` (async)
**Endpoints:** 3
| Method | Endpoint | Summary |
|---|---|---|
| `get_email_by_id(token, message_id)` | `GET /api/v1/temp_mail/v1/get_email_by_id` | Get Email By Id |
| `get_emails_inbox(token)` | `GET /api/v1/temp_mail/v1/get_emails_inbox` | Get Emails |
| `get_temp_email_address()` | `GET /api/v1/temp_mail/v1/get_temp_email_address` | Get Temp Email |
## `client.threads_web`
**Class:** `tikhub.resources.threads_web.ThreadsWeb` (sync) / `AsyncThreadsWeb` (async)
**Endpoints:** 11
| Method | Endpoint | Summary |
|---|---|---|
| `fetch_post_comments(post_id, end_cursor=...)` | `GET /api/v1/threads/web/fetch_post_comments` | 获取帖子评论/Get post comments |
| `fetch_post_detail(post_id)` | `GET /api/v1/threads/web/fetch_post_detail` | 获取帖子详情/Get post detail |
| `fetch_post_detail_v2(post_id=..., url=...)` | `GET /api/v1/threads/web/fetch_post_detail_v2` | 获取帖子详情 V2(支持链接)/Get post detail V2(supports URL) |
| `fetch_user_info(username)` | `GET /api/v1/threads/web/fetch_user_info` | 获取用户信息/Get user info |
| `fetch_user_info_by_id(user_id)` | `GET /api/v1/threads/web/fetch_user_info_by_id` | 根据用户ID获取用户信息/Get user info by ID |
| `fetch_user_posts(user_id, end_cursor=...)` | `GET /api/v1/threads/web/fetch_user_posts` | 获取用户帖子列表/Get user posts |
| `fetch_user_replies(user_id, end_cursor=...)` | `GET /api/v1/threads/web/fetch_user_replies` | 获取用户回复列表/Get user replies |
| `fetch_user_reposts(user_id, end_cursor=...)` | `GET /api/v1/threads/web/fetch_user_reposts` | 获取用户转发列表/Get user reposts |
| `search_profiles(query)` | `GET /api/v1/threads/web/search_profiles` | 搜索用户档案/Search profiles |
| `search_recent(query, end_cursor=...)` | `GET /api/v1/threads/web/search_recent` | 搜索最新内容/Search recent content |
| `search_top(query, end_cursor=...)` | `GET /api/v1/threads/web/search_top` | 搜索热门内容/Search top content |
## `client.tikhub_downloader`
**Class:** `tikhub.resources.tikhub_downloader.TikhubDownloader` (sync) / `AsyncTikhubDownloader` (async)
**Endpoints:** 2
| Method | Endpoint | Summary |
|---|---|---|
| `redirect_download()` | `GET /api/v1/tikhub/downloader/redirect_download` | 重定向到最新版本的下载链接 / Redirect to the latest version download link |
| `version()` | `GET /api/v1/tikhub/downloader/version` | 检查TikHub下载器的版本更新 / Check for TikHub Downloader version updates |
## `client.tikhub_user`
**Class:** `tikhub.resources.tikhub_user.TikhubUser` (sync) / `AsyncTikhubUser` (async)
**Endpoints:** 6
| Method | Endpoint | Summary |
|---|---|---|
| `calculate_price(endpoint, request_per_day=...)` | `GET /api/v1/tikhub/user/calculate_price` | 计算价格/Calculate price |
| `get_all_endpoints_info()` | `GET /api/v1/tikhub/user/get_all_endpoints_info` | 获取所有端点信息/Get all endpoints information |
| `get_endpoint_info(endpoint)` | `GET /api/v1/tikhub/user/get_endpoint_info` | 获取一个端点的信息/Get information of an endpoint |
| `get_tiered_discount_info()` | `GET /api/v1/tikhub/user/get_tiered_discount_info` | 获取阶梯式折扣百分比信息/Get tiered discount percentage information |
| `get_user_daily_usage()` | `GET /api/v1/tikhub/user/get_user_daily_usage` | 获取用户每日使用情况/Get user daily usage |
| `get_user_info()` | `GET /api/v1/tikhub/user/get_user_info` | 获取TikHub用户信息/Get TikHub user info |
## `client.tiktok_ads`
**Class:** `tikhub.resources.tiktok_ads.TiktokAds` (sync) / `AsyncTiktokAds` (async)
**Endpoints:** 31
| Method | Endpoint | Summary |
|---|---|---|
| `get_ad_interactive_analysis(material_id, metric_type=..., period_type=...)` | `GET /api/v1/tiktok/ads/get_ad_interactive_analysis` | 获取广告互动分析/Get ad interactive analysis |
| `get_ad_keyframe_analysis(material_id, metric=...)` | `GET /api/v1/tiktok/ads/get_ad_keyframe_analysis` | 获取广告关键帧分析/Get ad keyframe analysis |
| `get_ad_percentile(material_id, metric=..., period_type=...)` | `GET /api/v1/tiktok/ads/get_ad_percentile` | 获取广告百分位数据/Get ad percentile data |
| `get_ads_detail(ads_id)` | `GET /api/v1/tiktok/ads/get_ads_detail` | 获取单个广告详情/Get single ad detail |
| `get_creative_patterns(first_industry_id=..., period_type=..., order_field=..., order_type=..., week=..., page=..., limit=...)` | `GET /api/v1/tiktok/ads/get_creative_patterns` | 获取创意模式排行榜/Get creative pattern rankings |
| `get_creator_filters()` | `GET /api/v1/tiktok/ads/get_creator_filters` | 获取创作者筛选器/Get creator filters |
| `get_creator_list(page=..., limit=..., sort_by=..., creator_country=..., audience_country=..., audience_count=..., keyword=...)` | `GET /api/v1/tiktok/ads/get_creator_list` | 获取创作者列表/Get creator list |
| `get_hashtag_creator(hashtag)` | `GET /api/v1/tiktok/ads/get_hashtag_creator` | 获取标签创作者信息/Get hashtag creator info |
| `get_hashtag_filters()` | `GET /api/v1/tiktok/ads/get_hashtag_filters` | 获取标签筛选器/Get hashtag filters |
| `get_hashtag_list(page=..., limit=..., period=..., country_code=..., sort_by=..., industry_id=..., filter_by=...)` | `GET /api/v1/tiktok/ads/get_hashtag_list` | 获取热门标签列表/Get popular hashtags list |
| `get_keyword_details(keyword=..., page=..., limit=..., period=..., country_code=..., order_by=..., order_type=..., industry=..., objective=..., keyword_type=...)` | `GET /api/v1/tiktok/ads/get_keyword_details` | 获取关键词详细信息/Get keyword details |
| `get_keyword_filters()` | `GET /api/v1/tiktok/ads/get_keyword_filters` | 获取关键词筛选器/Get keyword filters |
| `get_keyword_insights(page=..., limit=..., period=..., country_code=..., order_by=..., order_type=..., industry=..., objective=..., keyword_type=..., keyword=...)` | `GET /api/v1/tiktok/ads/get_keyword_insights` | 获取关键词洞察数据/Get keyword insights data |
| `get_keyword_list(keyword=..., period=..., page=..., limit=..., country_code=..., industry=...)` | `GET /api/v1/tiktok/ads/get_keyword_list` | 获取关键词列表/Get keyword list |
| `get_popular_trends(period=..., page=..., limit=..., order_by=..., country_code=...)` | `GET /api/v1/tiktok/ads/get_popular_trends` | 获取流行趋势视频/Get popular trend videos |
| `get_product_detail(id, last=..., ecom_type=..., period_type=..., country_code=...)` | `GET /api/v1/tiktok/ads/get_product_detail` | 获取产品详细信息/Get product detail |
| `get_product_filters()` | `GET /api/v1/tiktok/ads/get_product_filters` | 获取产品筛选器/Get product filters |
| `get_product_metrics(id, last=..., metrics=..., ecom_type=..., period_type=..., country_code=...)` | `GET /api/v1/tiktok/ads/get_product_metrics` | 获取产品指标数据/Get product metrics |
| `get_query_suggestions(count=..., scenario=...)` | `GET /api/v1/tiktok/ads/get_query_suggestions` | 获取查询建议/Get query suggestions |
| `get_recommended_ads(material_id, industry=..., country_code=...)` | `GET /api/v1/tiktok/ads/get_recommended_ads` | 获取推荐广告/Get recommended ads |
| `get_related_keywords(keyword=..., period=..., country_code=..., rank_type=..., content_type=..., page=..., limit=...)` | `GET /api/v1/tiktok/ads/get_related_keywords` | 获取相关关键词/Get related keywords |
| `get_sound_detail(clip_id, period=..., country_code=...)` | `GET /api/v1/tiktok/ads/get_sound_detail` | 获取音乐详情/Get sound detail |
| `get_sound_filters(rank_type=...)` | `GET /api/v1/tiktok/ads/get_sound_filters` | 获取音乐筛选器/Get sound filters |
| `get_sound_rank_list(period=..., page=..., limit=..., rank_type=..., new_on_board=..., commercial_music=..., country_code=...)` | `GET /api/v1/tiktok/ads/get_sound_rank_list` | 获取热门音乐排行榜/Get popular sound rankings |
| `get_sound_recommendations(clip_id, limit=...)` | `GET /api/v1/tiktok/ads/get_sound_recommendations` | 获取音乐推荐/Get sound recommendations |
| `get_top_ads_spotlight(industry=..., page=..., limit=...)` | `GET /api/v1/tiktok/ads/get_top_ads_spotlight` | 获取热门广告聚光灯/Get top ads spotlight |
| `get_top_products(last=..., page=..., limit=..., country_code=..., first_ecom_category_id=..., ecom_type=..., period_type=..., order_by=..., order_type=...)` | `GET /api/v1/tiktok/ads/get_top_products` | 获取热门产品列表/Get top products list |
| `search_ads(objective=..., like=..., period=..., industry=..., keyword=..., page=..., limit=..., order_by=..., country_code=..., ad_format=..., ad_language=..., search_id=...)` | `GET /api/v1/tiktok/ads/search_ads` | 搜索广告/Search ads |
| `search_creators(keyword, page=..., limit=..., sort_by=..., creator_country=...)` | `GET /api/v1/tiktok/ads/search_creators` | 搜索创作者/Search creators |
| `search_sound(keyword, period=..., page=..., limit=..., rank_type=..., new_on_board=..., commercial_music=..., country_code=...)` | `GET /api/v1/tiktok/ads/search_sound` | 搜索音乐/Search sounds |
| `search_sound_hint(keyword, period=..., page=..., limit=..., rank_type=..., country_code=..., filter_by_checked=..., commercial_music=...)` | `GET /api/v1/tiktok/ads/search_sound_hint` | 搜索音乐提示/Search sound hints |
## `client.tiktok_analytics`
**Class:** `tikhub.resources.tiktok_analytics.TiktokAnalytics` (sync) / `AsyncTiktokAnalytics` (async)
**Endpoints:** 4
| Method | Endpoint | Summary |
|---|---|---|
| `detect_fake_views(item_id, content_category=...)` | `GET /api/v1/tiktok/analytics/detect_fake_views` | 检测视频虚假流量分析/Detect fake views in video |
| `fetch_comment_keywords(item_id)` | `GET /api/v1/tiktok/analytics/fetch_comment_keywords` | 获取视频评论关键词分析/Get comment keywords analysis |
| `fetch_creator_info_and_milestones(user_id)` | `GET /api/v1/tiktok/analytics/fetch_creator_info_and_milestones` | 获取创作者信息和里程碑数据/Get creator info and milestones |
| `fetch_video_metrics(item_id)` | `GET /api/v1/tiktok/analytics/fetch_video_metrics` | 获取作品的统计数据/Get video metrics |
## `client.tiktok_app_v3`
**Class:** `tikhub.resources.tiktok_app_v3.TiktokAppV3` (sync) / `AsyncTiktokAppV3` (async)
**Endpoints:** 75
| Method | Endpoint | Summary |
|---|---|---|
| `TTencrypt_algorithm(url=..., data=..., device_info=...)` | `POST /api/v1/tiktok/app/v3/TTencrypt_algorithm` | TikTok APP加密算法/TikTok APP encryption algorithm |
| `add_video_play_count(aweme_type, item_id)` | `GET /api/v1/tiktok/app/v3/add_video_play_count` | 根据视频ID来增加作品的播放数/Increase the number of plays of the work according to the video ID |
| `check_live_room_online(room_id)` | `GET /api/v1/tiktok/app/v3/check_live_room_online` | 检测直播间是否在线/Check if live room is online |
| `check_live_room_online_batch(room_ids=...)` | `POST /api/v1/tiktok/app/v3/check_live_room_online_batch` | 批量检测直播间是否在线/Batch check if live rooms are online |
| `encrypt_decrypt_login_request(username=..., password=..., mode=...)` | `POST /api/v1/tiktok/app/v3/encrypt_decrypt_login_request` | 加密或解密 TikTok APP 登录请求体/Encrypt or Decrypt TikTok APP login request body |
| `fetch_content_translate(trg_lang=..., src_content=...)` | `POST /api/v1/tiktok/app/v3/fetch_content_translate` | 获取内容翻译数据/Get content translation data |
| `fetch_creator_info(creator_uid)` | `GET /api/v1/tiktok/app/v3/fetch_creator_info` | 获取带货创作者信息/Get shopping creator information |
| `fetch_creator_search_insights(offset=..., limit=..., tab=..., language_filters=..., category_filters=..., creator_source=..., force_refresh=...)` | `GET /api/v1/tiktok/app/v3/fetch_creator_search_insights` | 创作者搜索洞察/Creator Search Insights |
| `fetch_creator_search_insights_detail(query_id_str, time_range=..., start_date=..., end_date=..., dimension_list=...)` | `GET /api/v1/tiktok/app/v3/fetch_creator_search_insights_detail` | 创作者搜索洞察详情/Creator Search Insights Detail |
| `fetch_creator_search_insights_trend(query_id_str, from_tab_path=..., query_analysis_required=...)` | `GET /api/v1/tiktok/app/v3/fetch_creator_search_insights_trend` | 创作者搜索洞察趋势/Creator Search Insights Trend |
| `fetch_creator_search_insights_videos(keyword, offset=..., count=...)` | `GET /api/v1/tiktok/app/v3/fetch_creator_search_insights_videos` | 创作者搜索洞察相关视频/Creator Search Insights Videos |
| `fetch_creator_showcase_product_list(kol_id, count=..., next_scroll_param=...)` | `GET /api/v1/tiktok/app/v3/fetch_creator_showcase_product_list` | 获取创作者橱窗商品列表/Get creator showcase product list |
| `fetch_general_search_result(keyword, offset=..., count=..., sort_type=..., publish_time=...)` | `GET /api/v1/tiktok/app/v3/fetch_general_search_result` | 获取指定关键词的综合搜索结果/Get comprehensive search results of specified keywords |
| `fetch_hashtag_detail(ch_id)` | `GET /api/v1/tiktok/app/v3/fetch_hashtag_detail` | 获取指定话题的详情数据/Get details of specified hashtag |
| `fetch_hashtag_search_result(keyword, offset=..., count=...)` | `GET /api/v1/tiktok/app/v3/fetch_hashtag_search_result` | 获取指定关键词的话题搜索结果/Get hashtag search results of specified keywords |
| `fetch_hashtag_video_list(ch_id, cursor=..., count=...)` | `GET /api/v1/tiktok/app/v3/fetch_hashtag_video_list` | 获取指定话题的作品数据/Get video list of specified hashtag |
| `fetch_home_feed(cookie=...)` | `POST /api/v1/tiktok/app/v3/fetch_home_feed` | 获取主页视频推荐数据/Get home feed(recommend) video data |
| `fetch_live_daily_rank(anchor_id=..., room_id=..., rank_type=..., region_type=..., gap_interval=..., cookie=...)` | `GET /api/v1/tiktok/app/v3/fetch_live_daily_rank` | 获取直播每日榜单数据/Get live daily rank data |
| `fetch_live_ranking_list(room_id, anchor_id)` | `GET /api/v1/tiktok/app/v3/fetch_live_ranking_list` | 获取直播间排行榜数据/Get live room ranking list |
| `fetch_live_room_info(room_id)` | `GET /api/v1/tiktok/app/v3/fetch_live_room_info` | 获取指定直播间的数据/Get data of specified live room |
| `fetch_live_room_product_list(room_id, author_id, page_size=..., offset=..., region=..., cookie=...)` | `GET /api/v1/tiktok/app/v3/fetch_live_room_product_list` | 获取直播间商品列表数据/Get live room product list data |
| `fetch_live_room_product_list_v2(room_id, author_id, page_size=..., offset=..., region=..., cookie=...)` | `GET /api/v1/tiktok/app/v3/fetch_live_room_product_list_v2` | 获取直播间商品列表数据 V2 /Get live room product list data V2 |
| `fetch_live_search_result(keyword, offset=..., count=..., region=...)` | `GET /api/v1/tiktok/app/v3/fetch_live_search_result` | 获取指定关键词的直播搜索结果/Get live search results of specified keywords |
| `fetch_location_search(keyword, offset=..., count=...)` | `GET /api/v1/tiktok/app/v3/fetch_location_search` | 获取地点搜索结果/Get location search results |
| `fetch_multi_video(body)` | `POST /api/v1/tiktok/app/v3/fetch_multi_video` | 批量获取视频信息/Batch Get Video Information |
| `fetch_multi_video_v2(body)` | `POST /api/v1/tiktok/app/v3/fetch_multi_video_v2` | 批量获取视频信息 V2/Batch Get Video Information V2 |
| `fetch_music_chart_list(scene=..., cursor=..., count=...)` | `GET /api/v1/tiktok/app/v3/fetch_music_chart_list` | 音乐排行榜/Music Chart List |
| `fetch_music_detail(music_id)` | `GET /api/v1/tiktok/app/v3/fetch_music_detail` | 获取指定音乐的详情数据/Get details of specified music |
| `fetch_music_search_result(keyword, offset=..., count=..., filter_by=..., sort_type=..., region=...)` | `GET /api/v1/tiktok/app/v3/fetch_music_search_result` | 获取指定关键词的音乐搜索结果/Get music search results of specified keywords |
| `fetch_music_video_list(music_id, cursor=..., count=...)` | `GET /api/v1/tiktok/app/v3/fetch_music_video_list` | 获取指定音乐的视频列表数据/Get video list of specified music |
| `fetch_one_video(aweme_id)` | `GET /api/v1/tiktok/app/v3/fetch_one_video` | 获取单个作品数据/Get single video data |
| `fetch_one_video_by_share_url(share_url)` | `GET /api/v1/tiktok/app/v3/fetch_one_video_by_share_url` | 根据分享链接获取单个作品数据/Get single video data by sharing link |
| `fetch_one_video_by_share_url_v2(share_url)` | `GET /api/v1/tiktok/app/v3/fetch_one_video_by_share_url_v2` | 根据分享链接获取单个作品数据/Get single video data by sharing link |
| `fetch_one_video_v2(aweme_id)` | `GET /api/v1/tiktok/app/v3/fetch_one_video_v2` | 获取单个作品数据 V2/Get single video data V2 |
| `fetch_one_video_v3(aweme_id, region=...)` | `GET /api/v1/tiktok/app/v3/fetch_one_video_v3` | 获取单个作品数据 V3(支持国家参数)/Get single video data V3 (support country parameter) |
| `fetch_product_detail(product_id)` | `GET /api/v1/tiktok/app/v3/fetch_product_detail` | 获取商品详情数据(即将弃用,使用 fetch_product_detail_v2 代替)/Get product detail data (will be deprecated, use fetch_product_detail_v2 in |
| `fetch_product_detail_v2(product_id)` | `GET /api/v1/tiktok/app/v3/fetch_product_detail_v2` | 获取商品详情数据V2/Get product detail data V2 |
| `fetch_product_detail_v3(product_id, region=...)` | `GET /api/v1/tiktok/app/v3/fetch_product_detail_v3` | 获取商品详情数据V3 / Get product detail data V3 |
| `fetch_product_detail_v4(product_id, region=...)` | `GET /api/v1/tiktok/app/v3/fetch_product_detail_v4` | 获取商品详情数据V4 / Get product detail data V4 |
| `fetch_product_id_by_share_link(share_link)` | `GET /api/v1/tiktok/app/v3/fetch_product_id_by_share_link` | 通过分享链接获取商品ID/Get Product ID by Share Link |
| `fetch_product_review(product_id, cursor=..., size=..., filter_id=..., sort_type=...)` | `GET /api/v1/tiktok/app/v3/fetch_product_review` | 获取商品评价数据/Get product review data |
| `fetch_product_search(keyword, cursor=..., count=..., sort_type=..., customer_review_four_star=..., have_discount=..., min_price=..., max_price=...)` | `GET /api/v1/tiktok/app/v3/fetch_product_search` | 获取商品搜索结果/Get product search results |
| `fetch_share_qr_code(object_id, schema_type=...)` | `GET /api/v1/tiktok/app/v3/fetch_share_qr_code` | 获取分享二维码/Get share QR code |
| `fetch_share_short_link(url)` | `GET /api/v1/tiktok/app/v3/fetch_share_short_link` | 获取分享短链接/Get share short link |
| `fetch_shop_home(page_id, seller_id)` | `GET /api/v1/tiktok/app/v3/fetch_shop_home` | 获取商家主页数据/Get shop home page data |
| `fetch_shop_home_page_list(seller_id)` | `GET /api/v1/tiktok/app/v3/fetch_shop_home_page_list` | 获取商家主页Page列表数据/Get shop home page list data |
| `fetch_shop_id_by_share_link(share_link)` | `GET /api/v1/tiktok/app/v3/fetch_shop_id_by_share_link` | 通过分享链接获取店铺ID/Get Shop ID by Share Link |
| `fetch_shop_info(shop_id)` | `GET /api/v1/tiktok/app/v3/fetch_shop_info` | 获取商家信息数据/Get shop information data |
| `fetch_shop_product_category(seller_id)` | `GET /api/v1/tiktok/app/v3/fetch_shop_product_category` | 获取商家产品分类数据/Get shop product category data |
| `fetch_shop_product_list(seller_id, scroll_params=..., page_size=..., sort_field=..., sort_order=...)` | `GET /api/v1/tiktok/app/v3/fetch_shop_product_list` | 获取商家商品列表数据/Get shop product list data |
| `fetch_shop_product_list_v2(seller_id, scroll_params=..., page_size=..., sort_field=..., sort_order=...)` | `GET /api/v1/tiktok/app/v3/fetch_shop_product_list_v2` | 获取商家商品列表数据 V2/Get shop product list data V2 |
| `fetch_shop_product_recommend(seller_id, scroll_param=..., page_size=...)` | `GET /api/v1/tiktok/app/v3/fetch_shop_product_recommend` | 获取商家商品推荐数据/Get shop product recommend data |
| `fetch_similar_user_recommendations(sec_uid, page_token=...)` | `GET /api/v1/tiktok/app/v3/fetch_similar_user_recommendations` | 获取类似用户推荐/Similar User Recommendations |
| `fetch_user_country_by_username(username)` | `GET /api/v1/tiktok/app/v3/fetch_user_country_by_username` | 通过用户名获取用户账号国家地区/Get user account country by username |
| `fetch_user_follower_list(user_id=..., sec_user_id=..., count=..., min_time=..., page_token=...)` | `GET /api/v1/tiktok/app/v3/fetch_user_follower_list` | 获取指定用户的粉丝列表数据/Get follower list of specified user |
| `fetch_user_following_list(user_id=..., sec_user_id=..., count=..., min_time=..., page_token=...)` | `GET /api/v1/tiktok/app/v3/fetch_user_following_list` | 获取指定用户的关注列表数据/Get following list of specified user |
| `fetch_user_like_videos(sec_user_id, max_cursor=..., counts=...)` | `GET /api/v1/tiktok/app/v3/fetch_user_like_videos` | 获取用户喜欢作品数据/Get user like video data |
| `fetch_user_music_list(sec_uid, cursor=..., count=...)` | `GET /api/v1/tiktok/app/v3/fetch_user_music_list` | 获取用户音乐列表数据/Get user music list data |
| `fetch_user_post_videos(sec_user_id=..., unique_id=..., max_cursor=..., count=..., sort_type=...)` | `GET /api/v1/tiktok/app/v3/fetch_user_post_videos` | 获取用户主页作品数据 V1/Get user homepage video data V1 |
| `fetch_user_post_videos_v2(sec_user_id=..., unique_id=..., max_cursor=..., count=..., sort_type=...)` | `GET /api/v1/tiktok/app/v3/fetch_user_post_videos_v2` | 获取用户主页作品数据 V2/Get user homepage video data V2 |
| `fetch_user_post_videos_v3(sec_user_id=..., unique_id=..., max_cursor=..., count=..., sort_type=...)` | `GET /api/v1/tiktok/app/v3/fetch_user_post_videos_v3` | 获取用户主页作品数据 V3(精简数据-更快速)/Get user homepage video data V3 (simplified data - faster) |
| `fetch_user_repost_videos(user_id, offset=..., count=...)` | `GET /api/v1/tiktok/app/v3/fetch_user_repost_videos` | 获取用户转发的作品数据/Get user repost video data |
| `fetch_user_search_result(keyword, offset=..., count=..., user_search_follower_count=..., user_search_profile_type=..., user_search_other_pref=...)` | `GET /api/v1/tiktok/app/v3/fetch_user_search_result` | 获取指定关键词的用户搜索结果/Get user search results of specified keywords |
| `fetch_video_comment_replies(item_id, comment_id, cursor=..., count=...)` | `GET /api/v1/tiktok/app/v3/fetch_video_comment_replies` | 获取指定视频的评论回复数据/Get comment replies data of specified video |
| `fetch_video_comments(aweme_id, cursor=..., count=...)` | `GET /api/v1/tiktok/app/v3/fetch_video_comments` | 获取单个视频评论数据/Get single video comments data |
| `fetch_video_search_result(keyword, offset=..., count=..., sort_type=..., publish_time=..., region=...)` | `GET /api/v1/tiktok/app/v3/fetch_video_search_result` | 获取指定关键词的视频搜索结果/Get video search results of specified keywords |
| `fetch_webcast_user_info(user_id=..., sec_user_id=...)` | `GET /api/v1/tiktok/app/v3/fetch_webcast_user_info` | 获取指定 Webcast 用户的信息/Get information of specified Webcast user |
| `get_user_id_and_sec_user_id_by_username(username)` | `GET /api/v1/tiktok/app/v3/get_user_id_and_sec_user_id_by_username` | 使用用户名获取用户 user_id 和 sec_user_id/Get user_id and sec_user_id by Username |
| `handler_user_profile(user_id=..., sec_user_id=..., unique_id=...)` | `GET /api/v1/tiktok/app/v3/handler_user_profile` | 获取指定用户的信息/Get information of specified user |
| `open_tiktok_app_to_keyword_search(keyword)` | `GET /api/v1/tiktok/app/v3/open_tiktok_app_to_keyword_search` | 生成TikTok分享链接,唤起TikTok APP,跳转指定关键词搜索结果/Generate TikTok share link, call TikTok APP, and jump to the specified keyword sea |
| `open_tiktok_app_to_send_private_message(uid)` | `GET /api/v1/tiktok/app/v3/open_tiktok_app_to_send_private_message` | 生成TikTok分享链接,唤起TikTok APP,给指定用户发送私信/Generate TikTok share link, call TikTok APP, and send private messages to specified |
| `open_tiktok_app_to_user_profile(uid)` | `GET /api/v1/tiktok/app/v3/open_tiktok_app_to_user_profile` | 生成TikTok分享链接,唤起TikTok APP,跳转指定用户主页/Generate TikTok share link, call TikTok APP, and jump to the specified user profile |
| `open_tiktok_app_to_video_detail(aweme_id)` | `GET /api/v1/tiktok/app/v3/open_tiktok_app_to_video_detail` | 生成TikTok分享链接,唤起TikTok APP,跳转指定作品详情页/Generate TikTok share link, call TikTok APP, and jump to the specified video details |
| `search_follower_list(user_id, keyword)` | `GET /api/v1/tiktok/app/v3/search_follower_list` | 搜索粉丝列表/Search follower list |
| `search_following_list(user_id, keyword)` | `GET /api/v1/tiktok/app/v3/search_following_list` | 搜索关注列表/Search following list |
## `client.tiktok_creator`
**Class:** `tikhub.resources.tiktok_creator.TiktokCreator` (sync) / `AsyncTiktokCreator` (async)
**Endpoints:** 14
| Method | Endpoint | Summary |
|---|---|---|
| `get_account_health_status(cookie=..., proxy=...)` | `POST /api/v1/tiktok/creator/get_account_health_status` | 获取创作者账号健康状态/Get Creator Account Health Status |
| `get_account_insights_overview(cookie=..., proxy=..., start_date=...)` | `POST /api/v1/tiktok/creator/get_account_insights_overview` | 获取创作者账号概览/Get Creator Account Overview |
| `get_account_violation_list(cookie=..., proxy=..., page=...)` | `POST /api/v1/tiktok/creator/get_account_violation_list` | 获取创作者账号违规记录列表/Get Creator Account Violation Record List |
| `get_creator_account_info(cookie=..., proxy=...)` | `POST /api/v1/tiktok/creator/get_creator_account_info` | 获取创作者账号信息/Get Creator Account Info |
| `get_live_analytics_summary(cookie=..., proxy=..., start_date=...)` | `POST /api/v1/tiktok/creator/get_live_analytics_summary` | 获取创作者直播概览/Get Creator Live Overview |
| `get_product_analytics_list(cookie=..., proxy=..., start_date=..., end_date=..., page=...)` | `POST /api/v1/tiktok/creator/get_product_analytics_list` | 获取创作者商品列表分析/Get Creator Product List Analytics |
| `get_product_related_videos(item_id, product_id, cookie=..., proxy=..., start_date=...)` | `POST /api/v1/tiktok/creator/get_product_related_videos` | 获取同款商品关联视频/Get Product Related Videos |
| `get_showcase_product_list(cookie=..., proxy=..., count=..., offset=...)` | `POST /api/v1/tiktok/creator/get_showcase_product_list` | 获取橱窗商品列表/Get Showcase Product List |
| `get_video_analytics_summary(cookie=..., proxy=...)` | `POST /api/v1/tiktok/creator/get_video_analytics_summary` | 获取创作者视频概览/Get Creator Video Overview |
| `get_video_associated_product_list(item_ids, cookie=..., proxy=..., start_date=...)` | `POST /api/v1/tiktok/creator/get_video_associated_product_list` | 获取视频关联商品列表/Get Video Associated Product List |
| `get_video_audience_stats(item_id, cookie=..., proxy=..., start_date=...)` | `POST /api/v1/tiktok/creator/get_video_audience_stats` | 获取视频受众分析数据/Get Video Audience Analysis Data |
| `get_video_detailed_stats(item_id, cookie=..., proxy=..., start_date=...)` | `POST /api/v1/tiktok/creator/get_video_detailed_stats` | 获取视频详细分段统计数据/Get Video Detailed Statistics |
| `get_video_list_analytics(cookie=..., proxy=..., start_date=..., page=..., rules=...)` | `POST /api/v1/tiktok/creator/get_video_list_analytics` | 获取创作者视频列表分析/Get Creator Video List Analytics |
| `get_video_to_product_stats(item_id, product_id, cookie=..., proxy=..., start_date=...)` | `POST /api/v1/tiktok/creator/get_video_to_product_stats` | 获取视频与商品关联统计数据/Get Video-Product Association Statistics |
## `client.tiktok_interaction`
**Class:** `tikhub.resources.tiktok_interaction.TiktokInteraction` (sync) / `AsyncTiktokInteraction` (async)
**Endpoints:** 7
| Method | Endpoint | Summary |
|---|---|---|
| `apply(api_key, invite_code)` | `GET /api/v1/tiktok/interaction/apply` | 申请使用TikTok交互API权限(Scope)/Apply for TikTok Interaction API permission (Scope) |
| `collect(aweme_id=..., cookie=..., device_id=..., iid=..., proxy=...)` | `POST /api/v1/tiktok/interaction/collect` | 收藏/Collect |
| `follow(user_id=..., sec_user_id=..., cookie=..., device_id=..., iid=..., proxy=...)` | `POST /api/v1/tiktok/interaction/follow` | 关注/Follow |
| `forward(aweme_id=..., cookie=..., device_id=..., iid=..., proxy=...)` | `POST /api/v1/tiktok/interaction/forward` | 转发/Forward |
| `like(aweme_id=..., cookie=..., device_id=..., iid=..., proxy=...)` | `POST /api/v1/tiktok/interaction/like` | 点赞/Like |
| `post_comment(aweme_id=..., text=..., cookie=..., device_id=..., iid=..., proxy=...)` | `POST /api/v1/tiktok/interaction/post_comment` | 发送评论/Post comment |
| `reply_comment(aweme_id=..., reply_id=..., text=..., cookie=..., device_id=..., iid=..., proxy=...)` | `POST /api/v1/tiktok/interaction/reply_comment` | 回复评论/Reply to comment |
## `client.tiktok_shop_web`
**Class:** `tikhub.resources.tiktok_shop_web.TiktokShopWeb` (sync) / `AsyncTiktokShopWeb` (async)
**Endpoints:** 15
| Method | Endpoint | Summary |
|---|---|---|
| `fetch_hot_selling_products_list(region=..., count=...)` | `GET /api/v1/tiktok/shop/web/fetch_hot_selling_products_list` | 获取热卖商品列表/Get hot selling products list |
| `fetch_product_detail(product_id, seller_id=..., region=...)` | `GET /api/v1/tiktok/shop/web/fetch_product_detail` | 获取商品详情V1(桌面端-数据完整)/Get product detail V1(Full data) |
| `fetch_product_detail_v2(product_id, seller_id=..., region=...)` | `GET /api/v1/tiktok/shop/web/fetch_product_detail_v2` | 获取商品详情V2(移动端-数据少)/Get product detail V2 (Less Data) |
| `fetch_product_detail_v3(product_id, region=...)` | `GET /api/v1/tiktok/shop/web/fetch_product_detail_v3` | 获取商品详情V3(移动端-数据完整)/Get product detail V3 (Full Data) |
| `fetch_product_reviews_v1(product_id, sort_type=..., filter_id=..., offset=...)` | `GET /api/v1/tiktok/shop/web/fetch_product_reviews_v1` | 获取商品评论V1/Get product reviews V1 |
| `fetch_product_reviews_v2(product_id, page_start=..., sort_rule=..., filter_type=..., filter_value=..., region=...)` | `GET /api/v1/tiktok/shop/web/fetch_product_reviews_v2` | 获取商品评论V2/Get product reviews V2 |
| `fetch_products_by_category_id(category_id, offset=..., region=...)` | `GET /api/v1/tiktok/shop/web/fetch_products_by_category_id` | 根据分类ID获取商品列表/Get products by category ID |
| `fetch_products_category_list(region=...)` | `GET /api/v1/tiktok/shop/web/fetch_products_category_list` | 获取商品分类列表/Get product category list |
| `fetch_search_products_list(search_word, offset=..., page_token=..., region=...)` | `GET /api/v1/tiktok/shop/web/fetch_search_products_list` | 搜索商品列表V1/Search products list V1 |
| `fetch_search_products_list_v2(search_word, offset=..., page_token=..., region=...)` | `GET /api/v1/tiktok/shop/web/fetch_search_products_list_v2` | 搜索商品列表V2(移动端)/Search products list V2 (Mobile) |
| `fetch_search_products_list_v3(keyword, offset=..., region=..., sort_by=..., filters_data=...)` | `GET /api/v1/tiktok/shop/web/fetch_search_products_list_v3` | 搜索商品列表V3/Search products list V3 |
| `fetch_sea
gitextract_qrj0e6h8/
├── .github/
│ └── workflows/
│ ├── ci.yml
│ └── release.yml
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── README_CN.md
├── README_ES.md
├── README_FR.md
├── README_JP.md
├── docs/
│ ├── async.md
│ ├── authentication.md
│ ├── changelog.md
│ ├── cli.md
│ ├── errors.md
│ ├── index.md
│ ├── logging.md
│ ├── migrating-from-v2.md
│ ├── naming.md
│ ├── pagination.md
│ ├── quickstart.md
│ ├── reference.md
│ └── retries.md
├── examples/
│ ├── README.md
│ ├── bilibili_app.py
│ ├── bilibili_web.py
│ ├── demo.py
│ ├── douyin_app_v3.py
│ ├── douyin_billboard.py
│ ├── douyin_creator.py
│ ├── douyin_creator_v2.py
│ ├── douyin_search.py
│ ├── douyin_web.py
│ ├── douyin_xingtu.py
│ ├── douyin_xingtu_v2.py
│ ├── health_check.py
│ ├── hybrid_parsing.py
│ ├── instagram_v1.py
│ ├── instagram_v2.py
│ ├── instagram_v3.py
│ ├── ios_shortcut.py
│ ├── kuaishou_app.py
│ ├── kuaishou_web.py
│ ├── lemon8_app.py
│ ├── linkedin_web.py
│ ├── pipixia_app.py
│ ├── quickstart.py
│ ├── reddit_app.py
│ ├── sora2.py
│ ├── temp_mail.py
│ ├── threads_web.py
│ ├── tikhub_downloader.py
│ ├── tikhub_user.py
│ ├── tiktok_ads.py
│ ├── tiktok_analytics.py
│ ├── tiktok_app_v3.py
│ ├── tiktok_creator.py
│ ├── tiktok_shop_web.py
│ ├── tiktok_web.py
│ ├── toutiao_app.py
│ ├── toutiao_web.py
│ ├── twitter_web.py
│ ├── wechat_channels.py
│ ├── wechat_media_platform_web.py
│ ├── weibo_app.py
│ ├── weibo_web.py
│ ├── weibo_web_v2.py
│ ├── xiaohongshu_app.py
│ ├── xiaohongshu_app_v2.py
│ ├── xiaohongshu_web.py
│ ├── xiaohongshu_web_v2.py
│ ├── xiaohongshu_web_v3.py
│ ├── xigua_app_v2.py
│ ├── youtube_web.py
│ ├── youtube_web_v2.py
│ └── zhihu_web.py
├── mkdocs.yml
├── pyproject.toml
├── scripts/
│ ├── generate_docs.py
│ ├── generate_examples.py
│ ├── generate_resources.py
│ ├── refresh_spec.py
│ ├── test_all_endpoints.py
│ └── verify_coverage.py
├── spec/
│ └── openapi.json
├── src/
│ └── tikhub/
│ ├── __init__.py
│ ├── _auth.py
│ ├── _base_client.py
│ ├── _errors.py
│ ├── _logging.py
│ ├── _pagination.py
│ ├── _rate_limit.py
│ ├── _retries.py
│ ├── _types.py
│ ├── _version.py
│ ├── async_client.py
│ ├── cli/
│ │ ├── __init__.py
│ │ ├── __main__.py
│ │ └── main.py
│ ├── client.py
│ ├── models/
│ │ ├── __init__.py
│ │ └── _common.py
│ ├── py.typed
│ └── resources/
│ ├── __init__.py
│ ├── _base.py
│ ├── bilibili_app.py
│ ├── bilibili_web.py
│ ├── demo.py
│ ├── douyin_app_v3.py
│ ├── douyin_billboard.py
│ ├── douyin_creator.py
│ ├── douyin_creator_v2.py
│ ├── douyin_search.py
│ ├── douyin_web.py
│ ├── douyin_xingtu.py
│ ├── douyin_xingtu_v2.py
│ ├── health_check.py
│ ├── hybrid_parsing.py
│ ├── instagram_v1.py
│ ├── instagram_v2.py
│ ├── instagram_v3.py
│ ├── ios_shortcut.py
│ ├── kuaishou_app.py
│ ├── kuaishou_web.py
│ ├── lemon8_app.py
│ ├── linkedin_web.py
│ ├── pipixia_app.py
│ ├── reddit_app.py
│ ├── sora2.py
│ ├── temp_mail.py
│ ├── threads_web.py
│ ├── tikhub_downloader.py
│ ├── tikhub_user.py
│ ├── tiktok_ads.py
│ ├── tiktok_analytics.py
│ ├── tiktok_app_v3.py
│ ├── tiktok_creator.py
│ ├── tiktok_interaction.py
│ ├── tiktok_shop_web.py
│ ├── tiktok_web.py
│ ├── toutiao_app.py
│ ├── toutiao_web.py
│ ├── twitter_web.py
│ ├── wechat_channels.py
│ ├── wechat_media_platform_web.py
│ ├── weibo_app.py
│ ├── weibo_web.py
│ ├── weibo_web_v2.py
│ ├── xiaohongshu_app.py
│ ├── xiaohongshu_app_v2.py
│ ├── xiaohongshu_web.py
│ ├── xiaohongshu_web_v2.py
│ ├── xiaohongshu_web_v3.py
│ ├── xigua_app_v2.py
│ ├── youtube_web.py
│ ├── youtube_web_v2.py
│ └── zhihu_web.py
└── tests/
├── __init__.py
├── conftest.py
└── unit/
├── __init__.py
├── test_cli.py
├── test_client_construction.py
├── test_errors.py
├── test_generated_resources.py
├── test_health_check.py
├── test_pagination.py
└── test_retries.py
SYMBOL INDEX (2422 symbols across 130 files)
FILE: examples/bilibili_app.py
function main (line 21) | async def main():
FILE: examples/bilibili_web.py
function main (line 21) | async def main():
FILE: examples/demo.py
function main (line 21) | async def main():
FILE: examples/douyin_app_v3.py
function main (line 21) | async def main():
FILE: examples/douyin_billboard.py
function main (line 21) | async def main():
FILE: examples/douyin_creator.py
function main (line 21) | async def main():
FILE: examples/douyin_creator_v2.py
function main (line 21) | async def main():
FILE: examples/douyin_search.py
function main (line 21) | async def main():
FILE: examples/douyin_web.py
function main (line 21) | async def main():
FILE: examples/douyin_xingtu.py
function main (line 21) | async def main():
FILE: examples/douyin_xingtu_v2.py
function main (line 21) | async def main():
FILE: examples/health_check.py
function main (line 21) | async def main():
FILE: examples/hybrid_parsing.py
function main (line 21) | async def main():
FILE: examples/instagram_v1.py
function main (line 21) | async def main():
FILE: examples/instagram_v2.py
function main (line 21) | async def main():
FILE: examples/instagram_v3.py
function main (line 21) | async def main():
FILE: examples/ios_shortcut.py
function main (line 21) | async def main():
FILE: examples/kuaishou_app.py
function main (line 21) | async def main():
FILE: examples/kuaishou_web.py
function main (line 21) | async def main():
FILE: examples/lemon8_app.py
function main (line 21) | async def main():
FILE: examples/linkedin_web.py
function main (line 21) | async def main():
FILE: examples/pipixia_app.py
function main (line 21) | async def main():
FILE: examples/quickstart.py
function show (line 38) | def show(label: str, value: object) -> None:
function main (line 50) | def main() -> int:
FILE: examples/reddit_app.py
function main (line 21) | async def main():
FILE: examples/sora2.py
function main (line 21) | async def main():
FILE: examples/temp_mail.py
function main (line 21) | async def main():
FILE: examples/threads_web.py
function main (line 21) | async def main():
FILE: examples/tikhub_downloader.py
function main (line 21) | async def main():
FILE: examples/tikhub_user.py
function main (line 21) | async def main():
FILE: examples/tiktok_ads.py
function main (line 21) | async def main():
FILE: examples/tiktok_analytics.py
function main (line 21) | async def main():
FILE: examples/tiktok_app_v3.py
function main (line 21) | async def main():
FILE: examples/tiktok_creator.py
function main (line 21) | async def main():
FILE: examples/tiktok_shop_web.py
function main (line 21) | async def main():
FILE: examples/tiktok_web.py
function main (line 21) | async def main():
FILE: examples/toutiao_app.py
function main (line 21) | async def main():
FILE: examples/toutiao_web.py
function main (line 21) | async def main():
FILE: examples/twitter_web.py
function main (line 21) | async def main():
FILE: examples/wechat_channels.py
function main (line 21) | async def main():
FILE: examples/wechat_media_platform_web.py
function main (line 21) | async def main():
FILE: examples/weibo_app.py
function main (line 21) | async def main():
FILE: examples/weibo_web.py
function main (line 21) | async def main():
FILE: examples/weibo_web_v2.py
function main (line 21) | async def main():
FILE: examples/xiaohongshu_app.py
function main (line 21) | async def main():
FILE: examples/xiaohongshu_app_v2.py
function main (line 21) | async def main():
FILE: examples/xiaohongshu_web.py
function main (line 21) | async def main():
FILE: examples/xiaohongshu_web_v2.py
function main (line 21) | async def main():
FILE: examples/xiaohongshu_web_v3.py
function main (line 21) | async def main():
FILE: examples/xigua_app_v2.py
function main (line 21) | async def main():
FILE: examples/youtube_web.py
function main (line 21) | async def main():
FILE: examples/youtube_web_v2.py
function main (line 21) | async def main():
FILE: examples/zhihu_web.py
function main (line 21) | async def main():
FILE: scripts/generate_docs.py
function main (line 29) | def main() -> int:
function _method_count (line 99) | def _method_count(resources: list[tuple[str, object]]) -> int:
function _method_signature (line 109) | def _method_signature(fn: object) -> str:
FILE: scripts/generate_examples.py
function tag_to_attr (line 54) | def tag_to_attr(tag: str) -> str:
function example_for (line 60) | def example_for(schema: dict[str, Any] | None) -> Any:
function param_example (line 94) | def param_example(param: dict[str, Any]) -> Any:
function collect_call_kwargs (line 114) | def collect_call_kwargs(op: dict[str, Any], spec: dict[str, Any]) -> tup...
function build_endpoint_map (line 165) | def build_endpoint_map() -> dict[tuple[str, str], tuple[str, str]]:
function py_literal (line 196) | def py_literal(value: Any) -> str:
function render_example_file (line 201) | def render_example_file(
function main (line 277) | def main() -> int:
FILE: scripts/generate_resources.py
function load_spec (line 52) | def load_spec() -> dict[str, Any]:
function tag_to_attr (line 57) | def tag_to_attr(tag: str) -> str:
function attr_to_class (line 64) | def attr_to_class(attr: str) -> str:
function py_type (line 69) | def py_type(schema: dict[str, Any] | None) -> str:
function basename (line 91) | def basename(path: str) -> str:
function collect_operations (line 95) | def collect_operations(spec: dict[str, Any]) -> dict[str, list[dict[str,...
function assign_method_names (line 138) | def assign_method_names(ops: list[dict[str, Any]]) -> None:
function collect_parameters (line 168) | def collect_parameters(
function _safe_param_name (line 238) | def _safe_param_name(name: str) -> str:
function render_method (line 251) | def render_method(entry: dict[str, Any], *, is_async: bool, spec: dict[s...
function render_resource_file (line 352) | def render_resource_file(tag: str, attr: str, ops: list[dict[str, Any]],...
function render_client_module (line 410) | def render_client_module(
function main (line 519) | def main() -> None:
FILE: scripts/refresh_spec.py
function _endpoints (line 25) | def _endpoints(spec: dict) -> set[tuple[str, str]]:
function main (line 34) | def main() -> int:
FILE: scripts/test_all_endpoints.py
function load_spec (line 70) | def load_spec() -> dict[str, Any]:
function example_for (line 74) | def example_for(schema: dict[str, Any] | None) -> Any:
function build_kwargs (line 112) | def build_kwargs(op: dict[str, Any], spec: dict[str, Any]) -> tuple[dict...
function build_endpoint_map (line 162) | def build_endpoint_map() -> dict[tuple[str, str], tuple[str, str]]:
function run_one (line 191) | async def run_one(
function run_all (line 269) | async def run_all(targets: list[dict[str, Any]], api_key: str) -> list[d...
function write_report (line 305) | def write_report(results: list[dict[str, Any]], skipped: list[dict[str, ...
function main (line 373) | def main() -> int:
FILE: scripts/verify_coverage.py
function spec_endpoints (line 26) | def spec_endpoints() -> set[tuple[str, str]]:
function sdk_endpoints (line 37) | def sdk_endpoints() -> set[tuple[str, str]]:
function main (line 66) | def main() -> int:
FILE: src/tikhub/_auth.py
class BearerAuth (line 10) | class BearerAuth(httpx.Auth):
method __init__ (line 20) | def __init__(self, token: str) -> None:
method auth_flow (line 25) | def auth_flow(
FILE: src/tikhub/_base_client.py
function _resolve_api_key (line 42) | def _resolve_api_key(explicit: str | None) -> str:
function _resolve_base_url (line 53) | def _resolve_base_url(explicit: str | None) -> str:
function _build_user_agent (line 57) | def _build_user_agent(explicit: str | None) -> str:
function _raise_for_status (line 63) | def _raise_for_status(
function _format_error_message (line 102) | def _format_error_message(response: httpx.Response, body: Any) -> str:
class BaseClient (line 118) | class BaseClient:
method __init__ (line 121) | def __init__(
method _request (line 160) | def _request(
method _join (line 233) | def _join(self, path: str) -> str:
method _decode (line 240) | def _decode(self, response: httpx.Response) -> Any:
method close (line 250) | def close(self) -> None:
method __enter__ (line 254) | def __enter__(self: _SyncSelf) -> _SyncSelf:
method __exit__ (line 257) | def __exit__(self, *exc: Any) -> None:
class AsyncBaseClient (line 266) | class AsyncBaseClient:
method __init__ (line 269) | def __init__(
method _request (line 306) | async def _request(
method _join (line 377) | def _join(self, path: str) -> str:
method _decode (line 384) | def _decode(self, response: httpx.Response) -> Any:
method aclose (line 389) | async def aclose(self) -> None:
method __aenter__ (line 393) | async def __aenter__(self: _AsyncSelf) -> _AsyncSelf:
method __aexit__ (line 396) | async def __aexit__(self, *exc: Any) -> None:
function _safe_json (line 402) | def _safe_json(response: httpx.Response) -> Any:
FILE: src/tikhub/_errors.py
function _redact_headers (line 37) | def _redact_headers(headers: Mapping[str, str] | None) -> dict[str, str]:
class TikHubError (line 45) | class TikHubError(Exception):
class TikHubConfigError (line 49) | class TikHubConfigError(TikHubError):
class TikHubConnectionError (line 53) | class TikHubConnectionError(TikHubError):
method __init__ (line 56) | def __init__(self, message: str, *, cause: BaseException | None = None...
class TikHubTimeoutError (line 61) | class TikHubTimeoutError(TikHubConnectionError):
class TikHubProxyError (line 65) | class TikHubProxyError(TikHubConnectionError):
class TikHubHTTPError (line 69) | class TikHubHTTPError(TikHubError):
method __init__ (line 75) | def __init__(
method __str__ (line 98) | def __str__(self) -> str:
method __repr__ (line 102) | def __repr__(self) -> str:
class TikHubBadRequestError (line 117) | class TikHubBadRequestError(TikHubHTTPError):
class TikHubAuthError (line 121) | class TikHubAuthError(TikHubHTTPError):
class TikHubPermissionError (line 125) | class TikHubPermissionError(TikHubHTTPError):
class TikHubNotFoundError (line 129) | class TikHubNotFoundError(TikHubHTTPError):
class TikHubRateLimitError (line 133) | class TikHubRateLimitError(TikHubHTTPError):
method __init__ (line 136) | def __init__(self, *args: Any, retry_after: float | None = None, **kwa...
class TikHubServerError (line 141) | class TikHubServerError(TikHubHTTPError):
class TikHubUpstreamError (line 145) | class TikHubUpstreamError(TikHubHTTPError):
class TikHubValidationError (line 149) | class TikHubValidationError(TikHubError):
method __init__ (line 152) | def __init__(self, message: str, *, raw: Any = None, cause: BaseExcept...
class TikHubFeatureRemovedError (line 159) | class TikHubFeatureRemovedError(TikHubError):
function http_error_for_status (line 177) | def http_error_for_status(status: int) -> type[TikHubHTTPError]:
function from_httpx_request_error (line 188) | def from_httpx_request_error(exc: httpx.RequestError) -> TikHubConnectio...
FILE: src/tikhub/_pagination.py
class _PaginatorBase (line 31) | class _PaginatorBase(Generic[T]):
method __init__ (line 38) | def __init__(self) -> None:
method _advance (line 45) | def _advance(self) -> list[T]: # pragma: no cover - subclass impl
method __iter__ (line 48) | def __iter__(self) -> Iterator[T]:
method first (line 52) | def first(self, n: int) -> list[T]:
method _aadvance (line 65) | async def _aadvance(self) -> list[T]: # pragma: no cover - subclass impl
method __aiter__ (line 68) | def __aiter__(self) -> AsyncIterator[T]:
method _aiter (line 71) | async def _aiter(self) -> AsyncIterator[T]:
method afirst (line 77) | async def afirst(self, n: int) -> list[T]:
class Page (line 95) | class Page(Generic[T]):
method __init__ (line 100) | def __init__(
class CursorPaginator (line 112) | class CursorPaginator(_PaginatorBase[T]):
method __init__ (line 115) | def __init__(
method _advance (line 129) | def _advance(self) -> list[T]:
method _aadvance (line 137) | async def _aadvance(self) -> list[T]:
class PagePaginator (line 146) | class PagePaginator(CursorPaginator[T]):
method __init__ (line 149) | def __init__(
class OffsetPaginator (line 161) | class OffsetPaginator(CursorPaginator[T]):
method __init__ (line 164) | def __init__(
FILE: src/tikhub/_rate_limit.py
function parse_retry_after (line 9) | def parse_retry_after(headers: Mapping[str, str]) -> float | None:
FILE: src/tikhub/_retries.py
class RetryPolicy (line 28) | class RetryPolicy:
method should_retry (line 42) | def should_retry(self, exc: BaseException, attempt: int) -> bool:
method sleep_for (line 56) | def sleep_for(self, exc: BaseException, attempt: int) -> float:
FILE: src/tikhub/_types.py
class _NotGivenType (line 8) | class _NotGivenType:
method __new__ (line 17) | def __new__(cls) -> _NotGivenType:
method __repr__ (line 22) | def __repr__(self) -> str:
method __bool__ (line 25) | def __bool__(self) -> bool:
FILE: src/tikhub/async_client.py
class AsyncTikHub (line 70) | class AsyncTikHub(AsyncBaseClient):
method __init__ (line 86) | def __init__(
method __repr__ (line 165) | def __repr__(self) -> str:
FILE: src/tikhub/cli/main.py
function _print_json (line 28) | def _print_json(value: Any) -> None:
function _make_client (line 32) | def _make_client() -> TikHub:
function _run (line 40) | def _run(callable_: Callable[..., Any], *args: Any, **kwargs: Any) -> Any:
function _version_callback (line 48) | def _version_callback(value: bool) -> None:
function _root (line 55) | def _root(
function health (line 72) | def health() -> None:
function fetch (line 80) | def fetch(
function user_info (line 90) | def user_info() -> None:
function user_usage (line 98) | def user_usage() -> None:
function main (line 105) | def main() -> None: # pragma: no cover - thin wrapper
FILE: src/tikhub/client.py
class TikHub (line 70) | class TikHub(BaseClient):
method __init__ (line 84) | def __init__(
method __repr__ (line 163) | def __repr__(self) -> str:
FILE: src/tikhub/models/_common.py
class _OpenModel (line 14) | class _OpenModel(BaseModel):
class ApiResponse (line 20) | class ApiResponse(_OpenModel, Generic[T]):
class Pagination (line 38) | class Pagination(_OpenModel):
FILE: src/tikhub/resources/_base.py
class SyncResource (line 16) | class SyncResource:
method __init__ (line 19) | def __init__(self, client: BaseClient) -> None:
class AsyncResource (line 23) | class AsyncResource:
method __init__ (line 26) | def __init__(self, client: AsyncBaseClient) -> None:
FILE: src/tikhub/resources/bilibili_app.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class BilibiliApp (line 26) | class BilibiliApp(SyncResource):
method fetch_one_video (line 29) | def fetch_one_video(
method fetch_video_comments (line 45) | def fetch_video_comments(
method fetch_reply_detail (line 65) | def fetch_reply_detail(
method fetch_user_videos (line 87) | def fetch_user_videos(
method fetch_user_info (line 107) | def fetch_user_info(
method fetch_home_feed (line 121) | def fetch_home_feed(
method fetch_popular_feed (line 139) | def fetch_popular_feed(
method fetch_search_all (line 155) | def fetch_search_all(
method fetch_search_by_type (line 175) | def fetch_search_by_type(
method fetch_cinema_tab (line 197) | def fetch_cinema_tab(
method fetch_bangumi_tab (line 206) | def fetch_bangumi_tab(
class AsyncBilibiliApp (line 216) | class AsyncBilibiliApp(AsyncResource):
method fetch_one_video (line 219) | async def fetch_one_video(
method fetch_video_comments (line 235) | async def fetch_video_comments(
method fetch_reply_detail (line 255) | async def fetch_reply_detail(
method fetch_user_videos (line 277) | async def fetch_user_videos(
method fetch_user_info (line 297) | async def fetch_user_info(
method fetch_home_feed (line 311) | async def fetch_home_feed(
method fetch_popular_feed (line 329) | async def fetch_popular_feed(
method fetch_search_all (line 345) | async def fetch_search_all(
method fetch_search_by_type (line 365) | async def fetch_search_by_type(
method fetch_cinema_tab (line 387) | async def fetch_cinema_tab(
method fetch_bangumi_tab (line 396) | async def fetch_bangumi_tab(
FILE: src/tikhub/resources/bilibili_web.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class BilibiliWeb (line 26) | class BilibiliWeb(SyncResource):
method fetch_one_video (line 29) | def fetch_one_video(
method fetch_one_video_v2 (line 43) | def fetch_one_video_v2(
method fetch_one_video_v3 (line 59) | def fetch_one_video_v3(
method fetch_video_detail (line 73) | def fetch_video_detail(
method fetch_video_play_info (line 87) | def fetch_video_play_info(
method fetch_video_subtitle (line 101) | def fetch_video_subtitle(
method fetch_hot_search (line 117) | def fetch_hot_search(
method fetch_general_search (line 131) | def fetch_general_search(
method fetch_video_playurl (line 157) | def fetch_video_playurl(
method fetch_vip_video_playurl (line 173) | def fetch_vip_video_playurl(
method fetch_user_post_videos (line 191) | def fetch_user_post_videos(
method fetch_collect_folders (line 209) | def fetch_collect_folders(
method fetch_user_collection_videos (line 223) | def fetch_user_collection_videos(
method fetch_user_profile (line 239) | def fetch_user_profile(
method fetch_user_up_stat (line 253) | def fetch_user_up_stat(
method fetch_user_relation_stat (line 267) | def fetch_user_relation_stat(
method fetch_com_popular (line 281) | def fetch_com_popular(
method fetch_video_comments (line 295) | def fetch_video_comments(
method fetch_comment_reply (line 311) | def fetch_comment_reply(
method fetch_user_dynamic (line 329) | def fetch_user_dynamic(
method fetch_dynamic_detail (line 345) | def fetch_dynamic_detail(
method fetch_dynamic_detail_v2 (line 359) | def fetch_dynamic_detail_v2(
method fetch_video_danmaku (line 373) | def fetch_video_danmaku(
method fetch_live_room_detail (line 387) | def fetch_live_room_detail(
method fetch_live_videos (line 401) | def fetch_live_videos(
method fetch_live_streamers (line 415) | def fetch_live_streamers(
method fetch_all_live_areas (line 431) | def fetch_all_live_areas(
method bv_to_aid (line 440) | def bv_to_aid(
method fetch_video_parts (line 454) | def fetch_video_parts(
method fetch_get_user_id (line 468) | def fetch_get_user_id(
class AsyncBilibiliWeb (line 483) | class AsyncBilibiliWeb(AsyncResource):
method fetch_one_video (line 486) | async def fetch_one_video(
method fetch_one_video_v2 (line 500) | async def fetch_one_video_v2(
method fetch_one_video_v3 (line 516) | async def fetch_one_video_v3(
method fetch_video_detail (line 530) | async def fetch_video_detail(
method fetch_video_play_info (line 544) | async def fetch_video_play_info(
method fetch_video_subtitle (line 558) | async def fetch_video_subtitle(
method fetch_hot_search (line 574) | async def fetch_hot_search(
method fetch_general_search (line 588) | async def fetch_general_search(
method fetch_video_playurl (line 614) | async def fetch_video_playurl(
method fetch_vip_video_playurl (line 630) | async def fetch_vip_video_playurl(
method fetch_user_post_videos (line 648) | async def fetch_user_post_videos(
method fetch_collect_folders (line 666) | async def fetch_collect_folders(
method fetch_user_collection_videos (line 680) | async def fetch_user_collection_videos(
method fetch_user_profile (line 696) | async def fetch_user_profile(
method fetch_user_up_stat (line 710) | async def fetch_user_up_stat(
method fetch_user_relation_stat (line 724) | async def fetch_user_relation_stat(
method fetch_com_popular (line 738) | async def fetch_com_popular(
method fetch_video_comments (line 752) | async def fetch_video_comments(
method fetch_comment_reply (line 768) | async def fetch_comment_reply(
method fetch_user_dynamic (line 786) | async def fetch_user_dynamic(
method fetch_dynamic_detail (line 802) | async def fetch_dynamic_detail(
method fetch_dynamic_detail_v2 (line 816) | async def fetch_dynamic_detail_v2(
method fetch_video_danmaku (line 830) | async def fetch_video_danmaku(
method fetch_live_room_detail (line 844) | async def fetch_live_room_detail(
method fetch_live_videos (line 858) | async def fetch_live_videos(
method fetch_live_streamers (line 872) | async def fetch_live_streamers(
method fetch_all_live_areas (line 888) | async def fetch_all_live_areas(
method bv_to_aid (line 897) | async def bv_to_aid(
method fetch_video_parts (line 911) | async def fetch_video_parts(
method fetch_get_user_id (line 925) | async def fetch_get_user_id(
FILE: src/tikhub/resources/demo.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class Demo (line 26) | class Demo(SyncResource):
method cache_status (line 29) | def cache_status(
method douyin_web_fetch_one_video (line 38) | def douyin_web_fetch_one_video(
method douyin_app_fetch_one_video (line 47) | def douyin_app_fetch_one_video(
method general_search (line 56) | def general_search(
method kuaishou_web_fetch_one_video (line 65) | def kuaishou_web_fetch_one_video(
method fetch_user_profile (line 74) | def fetch_user_profile(
method tiktok_app_fetch_one_video (line 83) | def tiktok_app_fetch_one_video(
method fetch_user_info (line 92) | def fetch_user_info(
method article_extract (line 101) | def article_extract(
class AsyncDemo (line 111) | class AsyncDemo(AsyncResource):
method cache_status (line 114) | async def cache_status(
method douyin_web_fetch_one_video (line 123) | async def douyin_web_fetch_one_video(
method douyin_app_fetch_one_video (line 132) | async def douyin_app_fetch_one_video(
method general_search (line 141) | async def general_search(
method kuaishou_web_fetch_one_video (line 150) | async def kuaishou_web_fetch_one_video(
method fetch_user_profile (line 159) | async def fetch_user_profile(
method tiktok_app_fetch_one_video (line 168) | async def tiktok_app_fetch_one_video(
method fetch_user_info (line 177) | async def fetch_user_info(
method article_extract (line 186) | async def article_extract(
FILE: src/tikhub/resources/douyin_app_v3.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class DouyinAppV3 (line 26) | class DouyinAppV3(SyncResource):
method fetch_one_video (line 29) | def fetch_one_video(
method fetch_one_video_v2 (line 43) | def fetch_one_video_v2(
method fetch_one_video_v3 (line 57) | def fetch_one_video_v3(
method fetch_share_info_by_share_code (line 71) | def fetch_share_info_by_share_code(
method fetch_multi_video (line 85) | def fetch_multi_video(
method fetch_multi_video_v2 (line 97) | def fetch_multi_video_v2(
method fetch_one_video_by_share_url (line 109) | def fetch_one_video_by_share_url(
method fetch_video_high_quality_play_url (line 123) | def fetch_video_high_quality_play_url(
method fetch_multi_video_high_quality_play_url (line 139) | def fetch_multi_video_high_quality_play_url(
method fetch_video_statistics (line 153) | def fetch_video_statistics(
method fetch_multi_video_statistics (line 167) | def fetch_multi_video_statistics(
method add_video_play_count (line 181) | def add_video_play_count(
method handler_user_profile (line 199) | def handler_user_profile(
method fetch_user_fans_list (line 213) | def fetch_user_fans_list(
method fetch_user_following_list (line 231) | def fetch_user_following_list(
method fetch_user_post_videos (line 251) | def fetch_user_post_videos(
method fetch_user_like_videos (line 271) | def fetch_user_like_videos(
method fetch_video_comments (line 289) | def fetch_video_comments(
method fetch_video_comment_replies (line 307) | def fetch_video_comment_replies(
method fetch_video_mix_detail (line 327) | def fetch_video_mix_detail(
method fetch_video_mix_post_list (line 341) | def fetch_video_mix_post_list(
method fetch_user_series_list (line 359) | def fetch_user_series_list(
method fetch_series_video_list (line 377) | def fetch_series_video_list(
method fetch_series_detail (line 393) | def fetch_series_detail(
method fetch_general_search_result (line 407) | def fetch_general_search_result(
method fetch_video_search_result (line 435) | def fetch_video_search_result(
method fetch_video_search_result_v2 (line 461) | def fetch_video_search_result_v2(
method fetch_user_search_result (line 487) | def fetch_user_search_result(
method fetch_live_search_result (line 511) | def fetch_live_search_result(
method fetch_music_search_result (line 531) | def fetch_music_search_result(
method fetch_hashtag_search_result (line 551) | def fetch_hashtag_search_result(
method fetch_music_detail (line 571) | def fetch_music_detail(
method fetch_music_video_list (line 585) | def fetch_music_video_list(
method fetch_hashtag_detail (line 603) | def fetch_hashtag_detail(
method fetch_hashtag_video_list (line 617) | def fetch_hashtag_video_list(
method fetch_hot_search_list (line 637) | def fetch_hot_search_list(
method fetch_live_hot_search_list (line 653) | def fetch_live_hot_search_list(
method fetch_music_hot_search_list (line 662) | def fetch_music_hot_search_list(
method fetch_brand_hot_search_list (line 678) | def fetch_brand_hot_search_list(
method fetch_brand_hot_search_list_detail (line 687) | def fetch_brand_hot_search_list_detail(
method generate_douyin_short_url (line 701) | def generate_douyin_short_url(
method generate_douyin_video_share_qrcode (line 715) | def generate_douyin_video_share_qrcode(
method register_device (line 729) | def register_device(
method open_douyin_app_to_video_detail (line 743) | def open_douyin_app_to_video_detail(
method open_douyin_app_to_user_profile (line 757) | def open_douyin_app_to_user_profile(
method open_douyin_app_to_keyword_search (line 773) | def open_douyin_app_to_keyword_search(
method open_douyin_app_to_send_private_message (line 787) | def open_douyin_app_to_send_private_message(
class AsyncDouyinAppV3 (line 804) | class AsyncDouyinAppV3(AsyncResource):
method fetch_one_video (line 807) | async def fetch_one_video(
method fetch_one_video_v2 (line 821) | async def fetch_one_video_v2(
method fetch_one_video_v3 (line 835) | async def fetch_one_video_v3(
method fetch_share_info_by_share_code (line 849) | async def fetch_share_info_by_share_code(
method fetch_multi_video (line 863) | async def fetch_multi_video(
method fetch_multi_video_v2 (line 875) | async def fetch_multi_video_v2(
method fetch_one_video_by_share_url (line 887) | async def fetch_one_video_by_share_url(
method fetch_video_high_quality_play_url (line 901) | async def fetch_video_high_quality_play_url(
method fetch_multi_video_high_quality_play_url (line 917) | async def fetch_multi_video_high_quality_play_url(
method fetch_video_statistics (line 931) | async def fetch_video_statistics(
method fetch_multi_video_statistics (line 945) | async def fetch_multi_video_statistics(
method add_video_play_count (line 959) | async def add_video_play_count(
method handler_user_profile (line 977) | async def handler_user_profile(
method fetch_user_fans_list (line 991) | async def fetch_user_fans_list(
method fetch_user_following_list (line 1009) | async def fetch_user_following_list(
method fetch_user_post_videos (line 1029) | async def fetch_user_post_videos(
method fetch_user_like_videos (line 1049) | async def fetch_user_like_videos(
method fetch_video_comments (line 1067) | async def fetch_video_comments(
method fetch_video_comment_replies (line 1085) | async def fetch_video_comment_replies(
method fetch_video_mix_detail (line 1105) | async def fetch_video_mix_detail(
method fetch_video_mix_post_list (line 1119) | async def fetch_video_mix_post_list(
method fetch_user_series_list (line 1137) | async def fetch_user_series_list(
method fetch_series_video_list (line 1155) | async def fetch_series_video_list(
method fetch_series_detail (line 1171) | async def fetch_series_detail(
method fetch_general_search_result (line 1185) | async def fetch_general_search_result(
method fetch_video_search_result (line 1213) | async def fetch_video_search_result(
method fetch_video_search_result_v2 (line 1239) | async def fetch_video_search_result_v2(
method fetch_user_search_result (line 1265) | async def fetch_user_search_result(
method fetch_live_search_result (line 1289) | async def fetch_live_search_result(
method fetch_music_search_result (line 1309) | async def fetch_music_search_result(
method fetch_hashtag_search_result (line 1329) | async def fetch_hashtag_search_result(
method fetch_music_detail (line 1349) | async def fetch_music_detail(
method fetch_music_video_list (line 1363) | async def fetch_music_video_list(
method fetch_hashtag_detail (line 1381) | async def fetch_hashtag_detail(
method fetch_hashtag_video_list (line 1395) | async def fetch_hashtag_video_list(
method fetch_hot_search_list (line 1415) | async def fetch_hot_search_list(
method fetch_live_hot_search_list (line 1431) | async def fetch_live_hot_search_list(
method fetch_music_hot_search_list (line 1440) | async def fetch_music_hot_search_list(
method fetch_brand_hot_search_list (line 1456) | async def fetch_brand_hot_search_list(
method fetch_brand_hot_search_list_detail (line 1465) | async def fetch_brand_hot_search_list_detail(
method generate_douyin_short_url (line 1479) | async def generate_douyin_short_url(
method generate_douyin_video_share_qrcode (line 1493) | async def generate_douyin_video_share_qrcode(
method register_device (line 1507) | async def register_device(
method open_douyin_app_to_video_detail (line 1521) | async def open_douyin_app_to_video_detail(
method open_douyin_app_to_user_profile (line 1535) | async def open_douyin_app_to_user_profile(
method open_douyin_app_to_keyword_search (line 1551) | async def open_douyin_app_to_keyword_search(
method open_douyin_app_to_send_private_message (line 1565) | async def open_douyin_app_to_send_private_message(
FILE: src/tikhub/resources/douyin_billboard.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class DouyinBillboard (line 26) | class DouyinBillboard(SyncResource):
method fetch_city_list (line 29) | def fetch_city_list(
method fetch_content_tag (line 38) | def fetch_content_tag(
method fetch_hot_category_list (line 47) | def fetch_hot_category_list(
method fetch_hot_rise_list (line 69) | def fetch_hot_rise_list(
method fetch_hot_city_list (line 91) | def fetch_hot_city_list(
method fetch_hot_challenge_list (line 115) | def fetch_hot_challenge_list(
method fetch_hot_total_list (line 133) | def fetch_hot_total_list(
method fetch_hot_calendar_list (line 161) | def fetch_hot_calendar_list(
method fetch_hot_calendar_detail (line 181) | def fetch_hot_calendar_detail(
method fetch_hot_user_portrait_list (line 195) | def fetch_hot_user_portrait_list(
method fetch_hot_comment_word_list (line 211) | def fetch_hot_comment_word_list(
method fetch_hot_item_trends_list (line 225) | def fetch_hot_item_trends_list(
method fetch_hot_account_list (line 243) | def fetch_hot_account_list(
method fetch_hot_account_search_list (line 263) | def fetch_hot_account_search_list(
method fetch_hot_account_trends_list (line 279) | def fetch_hot_account_trends_list(
method fetch_hot_account_item_analysis_list (line 297) | def fetch_hot_account_item_analysis_list(
method fetch_hot_account_fans_portrait_list (line 311) | def fetch_hot_account_fans_portrait_list(
method fetch_hot_account_fans_interest_account_list (line 327) | def fetch_hot_account_fans_interest_account_list(
method fetch_hot_account_fans_interest_topic_list (line 341) | def fetch_hot_account_fans_interest_topic_list(
method fetch_hot_account_fans_interest_search_list (line 355) | def fetch_hot_account_fans_interest_search_list(
method fetch_hot_total_video_list (line 369) | def fetch_hot_total_video_list(
method fetch_hot_total_low_fan_list (line 391) | def fetch_hot_total_low_fan_list(
method fetch_hot_total_high_play_list (line 411) | def fetch_hot_total_high_play_list(
method fetch_hot_total_high_like_list (line 431) | def fetch_hot_total_high_like_list(
method fetch_hot_total_high_fan_list (line 451) | def fetch_hot_total_high_fan_list(
method fetch_hot_total_topic_list (line 471) | def fetch_hot_total_topic_list(
method fetch_hot_total_high_topic_list (line 491) | def fetch_hot_total_high_topic_list(
method fetch_hot_total_search_list (line 511) | def fetch_hot_total_search_list(
method fetch_hot_total_high_search_list (line 531) | def fetch_hot_total_high_search_list(
method fetch_hot_total_hot_word_list (line 551) | def fetch_hot_total_hot_word_list(
method fetch_hot_total_hot_word_detail_list (line 571) | def fetch_hot_total_hot_word_detail_list(
class AsyncDouyinBillboard (line 590) | class AsyncDouyinBillboard(AsyncResource):
method fetch_city_list (line 593) | async def fetch_city_list(
method fetch_content_tag (line 602) | async def fetch_content_tag(
method fetch_hot_category_list (line 611) | async def fetch_hot_category_list(
method fetch_hot_rise_list (line 633) | async def fetch_hot_rise_list(
method fetch_hot_city_list (line 655) | async def fetch_hot_city_list(
method fetch_hot_challenge_list (line 679) | async def fetch_hot_challenge_list(
method fetch_hot_total_list (line 697) | async def fetch_hot_total_list(
method fetch_hot_calendar_list (line 725) | async def fetch_hot_calendar_list(
method fetch_hot_calendar_detail (line 745) | async def fetch_hot_calendar_detail(
method fetch_hot_user_portrait_list (line 759) | async def fetch_hot_user_portrait_list(
method fetch_hot_comment_word_list (line 775) | async def fetch_hot_comment_word_list(
method fetch_hot_item_trends_list (line 789) | async def fetch_hot_item_trends_list(
method fetch_hot_account_list (line 807) | async def fetch_hot_account_list(
method fetch_hot_account_search_list (line 827) | async def fetch_hot_account_search_list(
method fetch_hot_account_trends_list (line 843) | async def fetch_hot_account_trends_list(
method fetch_hot_account_item_analysis_list (line 861) | async def fetch_hot_account_item_analysis_list(
method fetch_hot_account_fans_portrait_list (line 875) | async def fetch_hot_account_fans_portrait_list(
method fetch_hot_account_fans_interest_account_list (line 891) | async def fetch_hot_account_fans_interest_account_list(
method fetch_hot_account_fans_interest_topic_list (line 905) | async def fetch_hot_account_fans_interest_topic_list(
method fetch_hot_account_fans_interest_search_list (line 919) | async def fetch_hot_account_fans_interest_search_list(
method fetch_hot_total_video_list (line 933) | async def fetch_hot_total_video_list(
method fetch_hot_total_low_fan_list (line 955) | async def fetch_hot_total_low_fan_list(
method fetch_hot_total_high_play_list (line 975) | async def fetch_hot_total_high_play_list(
method fetch_hot_total_high_like_list (line 995) | async def fetch_hot_total_high_like_list(
method fetch_hot_total_high_fan_list (line 1015) | async def fetch_hot_total_high_fan_list(
method fetch_hot_total_topic_list (line 1035) | async def fetch_hot_total_topic_list(
method fetch_hot_total_high_topic_list (line 1055) | async def fetch_hot_total_high_topic_list(
method fetch_hot_total_search_list (line 1075) | async def fetch_hot_total_search_list(
method fetch_hot_total_high_search_list (line 1095) | async def fetch_hot_total_high_search_list(
method fetch_hot_total_hot_word_list (line 1115) | async def fetch_hot_total_hot_word_list(
method fetch_hot_total_hot_word_detail_list (line 1135) | async def fetch_hot_total_hot_word_detail_list(
FILE: src/tikhub/resources/douyin_creator.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class DouyinCreator (line 26) | class DouyinCreator(SyncResource):
method fetch_creator_activity_list (line 29) | def fetch_creator_activity_list(
method fetch_creator_activity_detail (line 45) | def fetch_creator_activity_detail(
method fetch_creator_material_center_config (line 59) | def fetch_creator_material_center_config(
method fetch_creator_material_center_billboard (line 68) | def fetch_creator_material_center_billboard(
method fetch_creator_hot_spot_billboard (line 86) | def fetch_creator_hot_spot_billboard(
method fetch_creator_hot_topic_billboard (line 104) | def fetch_creator_hot_topic_billboard(
method fetch_creator_hot_props_billboard (line 122) | def fetch_creator_hot_props_billboard(
method fetch_creator_hot_challenge_billboard (line 140) | def fetch_creator_hot_challenge_billboard(
method fetch_creator_hot_music_billboard (line 149) | def fetch_creator_hot_music_billboard(
method fetch_creator_hot_course (line 167) | def fetch_creator_hot_course(
method fetch_creator_content_category (line 187) | def fetch_creator_content_category(
method fetch_creator_content_course (line 196) | def fetch_creator_content_course(
method fetch_video_danmaku_list (line 216) | def fetch_video_danmaku_list(
method fetch_user_search (line 238) | def fetch_user_search(
method fetch_mission_task_list (line 252) | def fetch_mission_task_list(
method fetch_industry_category_config (line 288) | def fetch_industry_category_config(
class AsyncDouyinCreator (line 298) | class AsyncDouyinCreator(AsyncResource):
method fetch_creator_activity_list (line 301) | async def fetch_creator_activity_list(
method fetch_creator_activity_detail (line 317) | async def fetch_creator_activity_detail(
method fetch_creator_material_center_config (line 331) | async def fetch_creator_material_center_config(
method fetch_creator_material_center_billboard (line 340) | async def fetch_creator_material_center_billboard(
method fetch_creator_hot_spot_billboard (line 358) | async def fetch_creator_hot_spot_billboard(
method fetch_creator_hot_topic_billboard (line 376) | async def fetch_creator_hot_topic_billboard(
method fetch_creator_hot_props_billboard (line 394) | async def fetch_creator_hot_props_billboard(
method fetch_creator_hot_challenge_billboard (line 412) | async def fetch_creator_hot_challenge_billboard(
method fetch_creator_hot_music_billboard (line 421) | async def fetch_creator_hot_music_billboard(
method fetch_creator_hot_course (line 439) | async def fetch_creator_hot_course(
method fetch_creator_content_category (line 459) | async def fetch_creator_content_category(
method fetch_creator_content_course (line 468) | async def fetch_creator_content_course(
method fetch_video_danmaku_list (line 488) | async def fetch_video_danmaku_list(
method fetch_user_search (line 510) | async def fetch_user_search(
method fetch_mission_task_list (line 524) | async def fetch_mission_task_list(
method fetch_industry_category_config (line 560) | async def fetch_industry_category_config(
FILE: src/tikhub/resources/douyin_creator_v2.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class DouyinCreatorV2 (line 26) | class DouyinCreatorV2(SyncResource):
method fetch_item_overview_data (line 29) | def fetch_item_overview_data(
method fetch_item_play_source (line 47) | def fetch_item_play_source(
method fetch_item_search_keyword (line 63) | def fetch_item_search_keyword(
method fetch_item_watch_trend (line 79) | def fetch_item_watch_trend(
method fetch_item_danmaku_analysis (line 97) | def fetch_item_danmaku_analysis(
method fetch_item_audience_portrait (line 113) | def fetch_item_audience_portrait(
method fetch_item_audience_others (line 129) | def fetch_item_audience_others(
method fetch_item_analysis_involved_vertical (line 145) | def fetch_item_analysis_involved_vertical(
method fetch_item_analysis_overview (line 163) | def fetch_item_analysis_overview(
method fetch_item_analysis_item_performance (line 185) | def fetch_item_analysis_item_performance(
method fetch_item_list (line 209) | def fetch_item_list(
method fetch_item_list_download (line 239) | def fetch_item_list_download(
method fetch_live_room_history_list (line 261) | def fetch_live_room_history_list(
method fetch_author_diagnosis (line 285) | def fetch_author_diagnosis(
class AsyncDouyinCreatorV2 (line 300) | class AsyncDouyinCreatorV2(AsyncResource):
method fetch_item_overview_data (line 303) | async def fetch_item_overview_data(
method fetch_item_play_source (line 321) | async def fetch_item_play_source(
method fetch_item_search_keyword (line 337) | async def fetch_item_search_keyword(
method fetch_item_watch_trend (line 353) | async def fetch_item_watch_trend(
method fetch_item_danmaku_analysis (line 371) | async def fetch_item_danmaku_analysis(
method fetch_item_audience_portrait (line 387) | async def fetch_item_audience_portrait(
method fetch_item_audience_others (line 403) | async def fetch_item_audience_others(
method fetch_item_analysis_involved_vertical (line 419) | async def fetch_item_analysis_involved_vertical(
method fetch_item_analysis_overview (line 437) | async def fetch_item_analysis_overview(
method fetch_item_analysis_item_performance (line 459) | async def fetch_item_analysis_item_performance(
method fetch_item_list (line 483) | async def fetch_item_list(
method fetch_item_list_download (line 513) | async def fetch_item_list_download(
method fetch_live_room_history_list (line 535) | async def fetch_live_room_history_list(
method fetch_author_diagnosis (line 559) | async def fetch_author_diagnosis(
FILE: src/tikhub/resources/douyin_search.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class DouyinSearch (line 26) | class DouyinSearch(SyncResource):
method fetch_general_search_v1 (line 29) | def fetch_general_search_v1(
method fetch_general_search_v2 (line 57) | def fetch_general_search_v2(
method fetch_search_suggest (line 85) | def fetch_search_suggest(
method fetch_video_search_v1 (line 99) | def fetch_video_search_v1(
method fetch_video_search_v2 (line 127) | def fetch_video_search_v2(
method fetch_multi_search (line 155) | def fetch_multi_search(
method fetch_user_search (line 183) | def fetch_user_search(
method fetch_user_search_v2 (line 205) | def fetch_user_search_v2(
method fetch_image_search (line 221) | def fetch_image_search(
method fetch_image_search_v3 (line 249) | def fetch_image_search_v3(
method fetch_live_search_v1 (line 267) | def fetch_live_search_v1(
method fetch_challenge_search_v1 (line 295) | def fetch_challenge_search_v1(
method fetch_challenge_search_v2 (line 323) | def fetch_challenge_search_v2(
method fetch_challenge_suggest (line 351) | def fetch_challenge_suggest(
method fetch_experience_search (line 365) | def fetch_experience_search(
method fetch_music_search (line 393) | def fetch_music_search(
method fetch_discuss_search (line 421) | def fetch_discuss_search(
method fetch_school_search (line 449) | def fetch_school_search(
method fetch_vision_search (line 463) | def fetch_vision_search(
class AsyncDouyinSearch (line 492) | class AsyncDouyinSearch(AsyncResource):
method fetch_general_search_v1 (line 495) | async def fetch_general_search_v1(
method fetch_general_search_v2 (line 523) | async def fetch_general_search_v2(
method fetch_search_suggest (line 551) | async def fetch_search_suggest(
method fetch_video_search_v1 (line 565) | async def fetch_video_search_v1(
method fetch_video_search_v2 (line 593) | async def fetch_video_search_v2(
method fetch_multi_search (line 621) | async def fetch_multi_search(
method fetch_user_search (line 649) | async def fetch_user_search(
method fetch_user_search_v2 (line 671) | async def fetch_user_search_v2(
method fetch_image_search (line 687) | async def fetch_image_search(
method fetch_image_search_v3 (line 715) | async def fetch_image_search_v3(
method fetch_live_search_v1 (line 733) | async def fetch_live_search_v1(
method fetch_challenge_search_v1 (line 761) | async def fetch_challenge_search_v1(
method fetch_challenge_search_v2 (line 789) | async def fetch_challenge_search_v2(
method fetch_challenge_suggest (line 817) | async def fetch_challenge_suggest(
method fetch_experience_search (line 831) | async def fetch_experience_search(
method fetch_music_search (line 859) | async def fetch_music_search(
method fetch_discuss_search (line 887) | async def fetch_discuss_search(
method fetch_school_search (line 915) | async def fetch_school_search(
method fetch_vision_search (line 929) | async def fetch_vision_search(
FILE: src/tikhub/resources/douyin_web.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class DouyinWeb (line 26) | class DouyinWeb(SyncResource):
method fetch_one_video (line 29) | def fetch_one_video(
method fetch_one_video_v2 (line 45) | def fetch_one_video_v2(
method fetch_one_video_by_share_url (line 59) | def fetch_one_video_by_share_url(
method fetch_video_high_quality_play_url (line 73) | def fetch_video_high_quality_play_url(
method fetch_multi_video_high_quality_play_url (line 89) | def fetch_multi_video_high_quality_play_url(
method fetch_multi_video (line 103) | def fetch_multi_video(
method fetch_one_video_danmaku (line 115) | def fetch_one_video_danmaku(
method fetch_home_feed (line 135) | def fetch_home_feed(
method fetch_related_posts (line 151) | def fetch_related_posts(
method fetch_user_post_videos (line 169) | def fetch_user_post_videos(
method fetch_user_like_videos (line 191) | def fetch_user_like_videos(
method fetch_user_collection_videos (line 211) | def fetch_user_collection_videos(
method fetch_user_collects (line 229) | def fetch_user_collects(
method fetch_user_collects_videos (line 247) | def fetch_user_collects_videos(
method fetch_user_mix_videos (line 265) | def fetch_user_mix_videos(
method fetch_user_live_videos (line 283) | def fetch_user_live_videos(
method fetch_user_live_videos_by_sec_uid (line 297) | def fetch_user_live_videos_by_sec_uid(
method fetch_user_live_videos_by_room_id (line 311) | def fetch_user_live_videos_by_room_id(
method fetch_user_live_videos_by_room_id_v2 (line 327) | def fetch_user_live_videos_by_room_id_v2(
method fetch_live_gift_ranking (line 341) | def fetch_live_gift_ranking(
method fetch_live_room_product_result (line 357) | def fetch_live_room_product_result(
method fetch_product_detail (line 377) | def fetch_product_detail(
method fetch_product_sku_list (line 399) | def fetch_product_sku_list(
method fetch_product_coupon (line 415) | def fetch_product_coupon(
method fetch_product_review_score (line 437) | def fetch_product_review_score(
method fetch_product_review_list (line 453) | def fetch_product_review_list(
method fetch_user_profile_by_uid (line 475) | def fetch_user_profile_by_uid(
method fetch_batch_user_profile_v1 (line 489) | def fetch_batch_user_profile_v1(
method fetch_batch_user_profile_v2 (line 503) | def fetch_batch_user_profile_v2(
method fetch_user_live_info_by_uid (line 517) | def fetch_user_live_info_by_uid(
method fetch_user_profile_by_short_id (line 531) | def fetch_user_profile_by_short_id(
method handler_shorten_url (line 545) | def handler_shorten_url(
method handler_user_profile (line 559) | def handler_user_profile(
method handler_user_profile_v2 (line 573) | def handler_user_profile_v2(
method encrypt_uid_to_sec_user_id (line 587) | def encrypt_uid_to_sec_user_id(
method handler_user_profile_v3 (line 601) | def handler_user_profile_v3(
method handler_user_profile_v4 (line 615) | def handler_user_profile_v4(
method fetch_user_fans_list (line 629) | def fetch_user_fans_list(
method fetch_user_following_list (line 649) | def fetch_user_following_list(
method fetch_video_comments (line 669) | def fetch_video_comments(
method fetch_video_comment_replies (line 687) | def fetch_video_comment_replies(
method fetch_general_search_result (line 707) | def fetch_general_search_result(
method fetch_video_search_result (line 739) | def fetch_video_search_result(
method fetch_video_search_result_v2 (line 767) | def fetch_video_search_result_v2(
method fetch_user_search_result (line 793) | def fetch_user_search_result(
method fetch_user_search_result_v2 (line 819) | def fetch_user_search_result_v2(
method fetch_user_search_result_v3 (line 837) | def fetch_user_search_result_v3(
method fetch_live_search_result (line 859) | def fetch_live_search_result(
method fetch_search_challenge (line 881) | def fetch_search_challenge(
method fetch_challenge_posts (line 903) | def fetch_challenge_posts(
method fetch_hot_search_result (line 925) | def fetch_hot_search_result(
method fetch_video_channel_result (line 934) | def fetch_video_channel_result(
method fetch_douyin_web_guest_cookie (line 952) | def fetch_douyin_web_guest_cookie(
method generate_real_msToken (line 966) | def generate_real_msToken(
method generate_ttwid (line 975) | def generate_ttwid(
method fetch_query_user (line 989) | def fetch_query_user(
method generate_verify_fp (line 1001) | def generate_verify_fp(
method generate_s_v_web_id (line 1010) | def generate_s_v_web_id(
method generate_wss_xb_signature (line 1019) | def generate_wss_xb_signature(
method generate_x_bogus (line 1037) | def generate_x_bogus(
method generate_a_bogus (line 1053) | def generate_a_bogus(
method get_sec_user_id (line 1077) | def get_sec_user_id(
method get_all_sec_user_id (line 1091) | def get_all_sec_user_id(
method get_aweme_id (line 1103) | def get_aweme_id(
method get_all_aweme_id (line 1117) | def get_all_aweme_id(
method get_webcast_id (line 1129) | def get_webcast_id(
method get_all_webcast_id (line 1143) | def get_all_webcast_id(
method webcast_id_2_room_id (line 1155) | def webcast_id_2_room_id(
method douyin_live_room (line 1169) | def douyin_live_room(
method fetch_live_im_fetch (line 1185) | def fetch_live_im_fetch(
method fetch_series_aweme (line 1201) | def fetch_series_aweme(
method fetch_knowledge_aweme (line 1221) | def fetch_knowledge_aweme(
method fetch_game_aweme (line 1239) | def fetch_game_aweme(
method fetch_cartoon_aweme (line 1257) | def fetch_cartoon_aweme(
method fetch_music_aweme (line 1275) | def fetch_music_aweme(
method fetch_food_aweme (line 1293) | def fetch_food_aweme(
class AsyncDouyinWeb (line 1312) | class AsyncDouyinWeb(AsyncResource):
method fetch_one_video (line 1315) | async def fetch_one_video(
method fetch_one_video_v2 (line 1331) | async def fetch_one_video_v2(
method fetch_one_video_by_share_url (line 1345) | async def fetch_one_video_by_share_url(
method fetch_video_high_quality_play_url (line 1359) | async def fetch_video_high_quality_play_url(
method fetch_multi_video_high_quality_play_url (line 1375) | async def fetch_multi_video_high_quality_play_url(
method fetch_multi_video (line 1389) | async def fetch_multi_video(
method fetch_one_video_danmaku (line 1401) | async def fetch_one_video_danmaku(
method fetch_home_feed (line 1421) | async def fetch_home_feed(
method fetch_related_posts (line 1437) | async def fetch_related_posts(
method fetch_user_post_videos (line 1455) | async def fetch_user_post_videos(
method fetch_user_like_videos (line 1477) | async def fetch_user_like_videos(
method fetch_user_collection_videos (line 1497) | async def fetch_user_collection_videos(
method fetch_user_collects (line 1515) | async def fetch_user_collects(
method fetch_user_collects_videos (line 1533) | async def fetch_user_collects_videos(
method fetch_user_mix_videos (line 1551) | async def fetch_user_mix_videos(
method fetch_user_live_videos (line 1569) | async def fetch_user_live_videos(
method fetch_user_live_videos_by_sec_uid (line 1583) | async def fetch_user_live_videos_by_sec_uid(
method fetch_user_live_videos_by_room_id (line 1597) | async def fetch_user_live_videos_by_room_id(
method fetch_user_live_videos_by_room_id_v2 (line 1613) | async def fetch_user_live_videos_by_room_id_v2(
method fetch_live_gift_ranking (line 1627) | async def fetch_live_gift_ranking(
method fetch_live_room_product_result (line 1643) | async def fetch_live_room_product_result(
method fetch_product_detail (line 1663) | async def fetch_product_detail(
method fetch_product_sku_list (line 1685) | async def fetch_product_sku_list(
method fetch_product_coupon (line 1701) | async def fetch_product_coupon(
method fetch_product_review_score (line 1723) | async def fetch_product_review_score(
method fetch_product_review_list (line 1739) | async def fetch_product_review_list(
method fetch_user_profile_by_uid (line 1761) | async def fetch_user_profile_by_uid(
method fetch_batch_user_profile_v1 (line 1775) | async def fetch_batch_user_profile_v1(
method fetch_batch_user_profile_v2 (line 1789) | async def fetch_batch_user_profile_v2(
method fetch_user_live_info_by_uid (line 1803) | async def fetch_user_live_info_by_uid(
method fetch_user_profile_by_short_id (line 1817) | async def fetch_user_profile_by_short_id(
method handler_shorten_url (line 1831) | async def handler_shorten_url(
method handler_user_profile (line 1845) | async def handler_user_profile(
method handler_user_profile_v2 (line 1859) | async def handler_user_profile_v2(
method encrypt_uid_to_sec_user_id (line 1873) | async def encrypt_uid_to_sec_user_id(
method handler_user_profile_v3 (line 1887) | async def handler_user_profile_v3(
method handler_user_profile_v4 (line 1901) | async def handler_user_profile_v4(
method fetch_user_fans_list (line 1915) | async def fetch_user_fans_list(
method fetch_user_following_list (line 1935) | async def fetch_user_following_list(
method fetch_video_comments (line 1955) | async def fetch_video_comments(
method fetch_video_comment_replies (line 1973) | async def fetch_video_comment_replies(
method fetch_general_search_result (line 1993) | async def fetch_general_search_result(
method fetch_video_search_result (line 2025) | async def fetch_video_search_result(
method fetch_video_search_result_v2 (line 2053) | async def fetch_video_search_result_v2(
method fetch_user_search_result (line 2079) | async def fetch_user_search_result(
method fetch_user_search_result_v2 (line 2105) | async def fetch_user_search_result_v2(
method fetch_user_search_result_v3 (line 2123) | async def fetch_user_search_result_v3(
method fetch_live_search_result (line 2145) | async def fetch_live_search_result(
method fetch_search_challenge (line 2167) | async def fetch_search_challenge(
method fetch_challenge_posts (line 2189) | async def fetch_challenge_posts(
method fetch_hot_search_result (line 2211) | async def fetch_hot_search_result(
method fetch_video_channel_result (line 2220) | async def fetch_video_channel_result(
method fetch_douyin_web_guest_cookie (line 2238) | async def fetch_douyin_web_guest_cookie(
method generate_real_msToken (line 2252) | async def generate_real_msToken(
method generate_ttwid (line 2261) | async def generate_ttwid(
method fetch_query_user (line 2275) | async def fetch_query_user(
method generate_verify_fp (line 2287) | async def generate_verify_fp(
method generate_s_v_web_id (line 2296) | async def generate_s_v_web_id(
method generate_wss_xb_signature (line 2305) | async def generate_wss_xb_signature(
method generate_x_bogus (line 2323) | async def generate_x_bogus(
method generate_a_bogus (line 2339) | async def generate_a_bogus(
method get_sec_user_id (line 2363) | async def get_sec_user_id(
method get_all_sec_user_id (line 2377) | async def get_all_sec_user_id(
method get_aweme_id (line 2389) | async def get_aweme_id(
method get_all_aweme_id (line 2403) | async def get_all_aweme_id(
method get_webcast_id (line 2415) | async def get_webcast_id(
method get_all_webcast_id (line 2429) | async def get_all_webcast_id(
method webcast_id_2_room_id (line 2441) | async def webcast_id_2_room_id(
method douyin_live_room (line 2455) | async def douyin_live_room(
method fetch_live_im_fetch (line 2471) | async def fetch_live_im_fetch(
method fetch_series_aweme (line 2487) | async def fetch_series_aweme(
method fetch_knowledge_aweme (line 2507) | async def fetch_knowledge_aweme(
method fetch_game_aweme (line 2525) | async def fetch_game_aweme(
method fetch_cartoon_aweme (line 2543) | async def fetch_cartoon_aweme(
method fetch_music_aweme (line 2561) | async def fetch_music_aweme(
method fetch_food_aweme (line 2579) | async def fetch_food_aweme(
FILE: src/tikhub/resources/douyin_xingtu.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class DouyinXingtu (line 26) | class DouyinXingtu(SyncResource):
method get_sign_image (line 29) | def get_sign_image(
method get_xingtu_kolid_by_uid (line 47) | def get_xingtu_kolid_by_uid(
method get_xingtu_kolid_by_sec_user_id (line 61) | def get_xingtu_kolid_by_sec_user_id(
method get_xingtu_kolid_by_unique_id (line 75) | def get_xingtu_kolid_by_unique_id(
method kol_base_info_v1 (line 89) | def kol_base_info_v1(
method kol_audience_portrait_v1 (line 105) | def kol_audience_portrait_v1(
method kol_fans_portrait_v1 (line 119) | def kol_fans_portrait_v1(
method kol_service_price_v1 (line 135) | def kol_service_price_v1(
method kol_data_overview_v1 (line 151) | def kol_data_overview_v1(
method search_kol_v1 (line 173) | def search_kol_v1(
method search_kol_v2 (line 191) | def search_kol_v2(
method kol_conversion_ability_analysis_v1 (line 209) | def kol_conversion_ability_analysis_v1(
method kol_video_performance_v1 (line 225) | def kol_video_performance_v1(
method kol_xingtu_index_v1 (line 241) | def kol_xingtu_index_v1(
method kol_convert_video_display_v1 (line 255) | def kol_convert_video_display_v1(
method kol_link_struct_v1 (line 273) | def kol_link_struct_v1(
method kol_touch_distribution_v1 (line 287) | def kol_touch_distribution_v1(
method kol_cp_info_v1 (line 301) | def kol_cp_info_v1(
method kol_rec_videos_v1 (line 315) | def kol_rec_videos_v1(
method kol_daily_fans_v1 (line 329) | def kol_daily_fans_v1(
method author_hot_comment_tokens_v1 (line 347) | def author_hot_comment_tokens_v1(
method author_content_hot_comment_keywords_v1 (line 361) | def author_content_hot_comment_keywords_v1(
class AsyncDouyinXingtu (line 376) | class AsyncDouyinXingtu(AsyncResource):
method get_sign_image (line 379) | async def get_sign_image(
method get_xingtu_kolid_by_uid (line 397) | async def get_xingtu_kolid_by_uid(
method get_xingtu_kolid_by_sec_user_id (line 411) | async def get_xingtu_kolid_by_sec_user_id(
method get_xingtu_kolid_by_unique_id (line 425) | async def get_xingtu_kolid_by_unique_id(
method kol_base_info_v1 (line 439) | async def kol_base_info_v1(
method kol_audience_portrait_v1 (line 455) | async def kol_audience_portrait_v1(
method kol_fans_portrait_v1 (line 469) | async def kol_fans_portrait_v1(
method kol_service_price_v1 (line 485) | async def kol_service_price_v1(
method kol_data_overview_v1 (line 501) | async def kol_data_overview_v1(
method search_kol_v1 (line 523) | async def search_kol_v1(
method search_kol_v2 (line 541) | async def search_kol_v2(
method kol_conversion_ability_analysis_v1 (line 559) | async def kol_conversion_ability_analysis_v1(
method kol_video_performance_v1 (line 575) | async def kol_video_performance_v1(
method kol_xingtu_index_v1 (line 591) | async def kol_xingtu_index_v1(
method kol_convert_video_display_v1 (line 605) | async def kol_convert_video_display_v1(
method kol_link_struct_v1 (line 623) | async def kol_link_struct_v1(
method kol_touch_distribution_v1 (line 637) | async def kol_touch_distribution_v1(
method kol_cp_info_v1 (line 651) | async def kol_cp_info_v1(
method kol_rec_videos_v1 (line 665) | async def kol_rec_videos_v1(
method kol_daily_fans_v1 (line 679) | async def kol_daily_fans_v1(
method author_hot_comment_tokens_v1 (line 697) | async def author_hot_comment_tokens_v1(
method author_content_hot_comment_keywords_v1 (line 711) | async def author_content_hot_comment_keywords_v1(
FILE: src/tikhub/resources/douyin_xingtu_v2.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class DouyinXingtuV2 (line 26) | class DouyinXingtuV2(SyncResource):
method get_ranking_list_catalog (line 29) | def get_ranking_list_catalog(
method get_ranking_list_data (line 45) | def get_ranking_list_data(
method get_playlet_actor_rank_catalog (line 69) | def get_playlet_actor_rank_catalog(
method get_playlet_actor_rank_list (line 78) | def get_playlet_actor_rank_list(
method get_author_market_fields (line 102) | def get_author_market_fields(
method get_author_base_info (line 116) | def get_author_base_info(
method get_author_business_card_info (line 140) | def get_author_business_card_info(
method get_author_local_info (line 154) | def get_author_local_info(
method get_author_show_items (line 174) | def get_author_show_items(
method get_author_hot_comment_tokens (line 198) | def get_author_hot_comment_tokens(
method get_author_content_hot_keywords (line 216) | def get_author_content_hot_keywords(
method get_recommend_for_star_authors (line 232) | def get_recommend_for_star_authors(
method get_excellent_case_category_list (line 252) | def get_excellent_case_category_list(
method get_author_spread_info (line 266) | def get_author_spread_info(
method get_user_profile_qrcode (line 292) | def get_user_profile_qrcode(
method get_content_trend_guide (line 308) | def get_content_trend_guide(
method get_ip_activity_industry_list (line 317) | def get_ip_activity_industry_list(
method get_ip_activity_list (line 326) | def get_ip_activity_list(
method get_ip_activity_detail (line 348) | def get_ip_activity_detail(
method get_resource_list (line 362) | def get_resource_list(
method get_demander_mcn_list (line 376) | def get_demander_mcn_list(
class AsyncDouyinXingtuV2 (line 397) | class AsyncDouyinXingtuV2(AsyncResource):
method get_ranking_list_catalog (line 400) | async def get_ranking_list_catalog(
method get_ranking_list_data (line 416) | async def get_ranking_list_data(
method get_playlet_actor_rank_catalog (line 440) | async def get_playlet_actor_rank_catalog(
method get_playlet_actor_rank_list (line 449) | async def get_playlet_actor_rank_list(
method get_author_market_fields (line 473) | async def get_author_market_fields(
method get_author_base_info (line 487) | async def get_author_base_info(
method get_author_business_card_info (line 511) | async def get_author_business_card_info(
method get_author_local_info (line 525) | async def get_author_local_info(
method get_author_show_items (line 545) | async def get_author_show_items(
method get_author_hot_comment_tokens (line 569) | async def get_author_hot_comment_tokens(
method get_author_content_hot_keywords (line 587) | async def get_author_content_hot_keywords(
method get_recommend_for_star_authors (line 603) | async def get_recommend_for_star_authors(
method get_excellent_case_category_list (line 623) | async def get_excellent_case_category_list(
method get_author_spread_info (line 637) | async def get_author_spread_info(
method get_user_profile_qrcode (line 663) | async def get_user_profile_qrcode(
method get_content_trend_guide (line 679) | async def get_content_trend_guide(
method get_ip_activity_industry_list (line 688) | async def get_ip_activity_industry_list(
method get_ip_activity_list (line 697) | async def get_ip_activity_list(
method get_ip_activity_detail (line 719) | async def get_ip_activity_detail(
method get_resource_list (line 733) | async def get_resource_list(
method get_demander_mcn_list (line 747) | async def get_demander_mcn_list(
FILE: src/tikhub/resources/health_check.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class HealthCheck (line 26) | class HealthCheck(SyncResource):
method check (line 29) | def check(
class AsyncHealthCheck (line 39) | class AsyncHealthCheck(AsyncResource):
method check (line 42) | async def check(
FILE: src/tikhub/resources/hybrid_parsing.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class HybridParsing (line 26) | class HybridParsing(SyncResource):
method video_data (line 29) | def video_data(
class AsyncHybridParsing (line 48) | class AsyncHybridParsing(AsyncResource):
method video_data (line 51) | async def video_data(
FILE: src/tikhub/resources/instagram_v1.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class InstagramV1 (line 26) | class InstagramV1(SyncResource):
method shortcode_to_media_id (line 29) | def shortcode_to_media_id(
method media_id_to_shortcode (line 43) | def media_id_to_shortcode(
method user_id_to_username (line 57) | def user_id_to_username(
method fetch_user_info_by_username (line 71) | def fetch_user_info_by_username(
method fetch_user_info_by_username_v2 (line 85) | def fetch_user_info_by_username_v2(
method fetch_user_info_by_username_v3 (line 99) | def fetch_user_info_by_username_v3(
method fetch_user_info_by_id (line 113) | def fetch_user_info_by_id(
method fetch_user_info_by_id_v2 (line 127) | def fetch_user_info_by_id_v2(
method fetch_user_about_info (line 141) | def fetch_user_about_info(
method fetch_user_posts (line 155) | def fetch_user_posts(
method fetch_user_posts_v2 (line 173) | def fetch_user_posts_v2(
method fetch_user_reels (line 191) | def fetch_user_reels(
method fetch_user_reposts (line 209) | def fetch_user_reposts(
method fetch_user_tagged_posts (line 225) | def fetch_user_tagged_posts(
method fetch_related_profiles (line 243) | def fetch_related_profiles(
method fetch_search (line 257) | def fetch_search(
method fetch_post_by_url (line 273) | def fetch_post_by_url(
method fetch_post_by_url_v2 (line 287) | def fetch_post_by_url_v2(
method fetch_post_by_id (line 301) | def fetch_post_by_id(
method fetch_post_comments_v2 (line 315) | def fetch_post_comments_v2(
method fetch_comment_replies (line 333) | def fetch_comment_replies(
method fetch_music_posts (line 351) | def fetch_music_posts(
method fetch_hashtag_posts (line 369) | def fetch_hashtag_posts(
method fetch_location_info (line 385) | def fetch_location_info(
method fetch_location_posts (line 399) | def fetch_location_posts(
method fetch_cities (line 417) | def fetch_cities(
method fetch_locations (line 433) | def fetch_locations(
method fetch_explore_sections (line 449) | def fetch_explore_sections(
method fetch_section_posts (line 458) | def fetch_section_posts(
class AsyncInstagramV1 (line 477) | class AsyncInstagramV1(AsyncResource):
method shortcode_to_media_id (line 480) | async def shortcode_to_media_id(
method media_id_to_shortcode (line 494) | async def media_id_to_shortcode(
method user_id_to_username (line 508) | async def user_id_to_username(
method fetch_user_info_by_username (line 522) | async def fetch_user_info_by_username(
method fetch_user_info_by_username_v2 (line 536) | async def fetch_user_info_by_username_v2(
method fetch_user_info_by_username_v3 (line 550) | async def fetch_user_info_by_username_v3(
method fetch_user_info_by_id (line 564) | async def fetch_user_info_by_id(
method fetch_user_info_by_id_v2 (line 578) | async def fetch_user_info_by_id_v2(
method fetch_user_about_info (line 592) | async def fetch_user_about_info(
method fetch_user_posts (line 606) | async def fetch_user_posts(
method fetch_user_posts_v2 (line 624) | async def fetch_user_posts_v2(
method fetch_user_reels (line 642) | async def fetch_user_reels(
method fetch_user_reposts (line 660) | async def fetch_user_reposts(
method fetch_user_tagged_posts (line 676) | async def fetch_user_tagged_posts(
method fetch_related_profiles (line 694) | async def fetch_related_profiles(
method fetch_search (line 708) | async def fetch_search(
method fetch_post_by_url (line 724) | async def fetch_post_by_url(
method fetch_post_by_url_v2 (line 738) | async def fetch_post_by_url_v2(
method fetch_post_by_id (line 752) | async def fetch_post_by_id(
method fetch_post_comments_v2 (line 766) | async def fetch_post_comments_v2(
method fetch_comment_replies (line 784) | async def fetch_comment_replies(
method fetch_music_posts (line 802) | async def fetch_music_posts(
method fetch_hashtag_posts (line 820) | async def fetch_hashtag_posts(
method fetch_location_info (line 836) | async def fetch_location_info(
method fetch_location_posts (line 850) | async def fetch_location_posts(
method fetch_cities (line 868) | async def fetch_cities(
method fetch_locations (line 884) | async def fetch_locations(
method fetch_explore_sections (line 900) | async def fetch_explore_sections(
method fetch_section_posts (line 909) | async def fetch_section_posts(
FILE: src/tikhub/resources/instagram_v2.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class InstagramV2 (line 26) | class InstagramV2(SyncResource):
method shortcode_to_media_id (line 29) | def shortcode_to_media_id(
method media_id_to_shortcode (line 43) | def media_id_to_shortcode(
method user_id_to_username (line 57) | def user_id_to_username(
method fetch_user_info (line 71) | def fetch_user_info(
method fetch_user_posts (line 87) | def fetch_user_posts(
method fetch_user_reels (line 105) | def fetch_user_reels(
method fetch_user_followers (line 123) | def fetch_user_followers(
method fetch_user_following (line 141) | def fetch_user_following(
method fetch_user_stories (line 159) | def fetch_user_stories(
method fetch_user_highlights (line 175) | def fetch_user_highlights(
method fetch_highlight_stories (line 191) | def fetch_highlight_stories(
method fetch_user_tagged_posts (line 205) | def fetch_user_tagged_posts(
method fetch_similar_users (line 223) | def fetch_similar_users(
method search_users (line 239) | def search_users(
method general_search (line 253) | def general_search(
method search_reels (line 269) | def search_reels(
method search_music (line 285) | def search_music(
method search_hashtags (line 299) | def search_hashtags(
method search_locations (line 313) | def search_locations(
method search_by_coordinates (line 327) | def search_by_coordinates(
method fetch_post_info (line 343) | def fetch_post_info(
method fetch_post_likes (line 357) | def fetch_post_likes(
method fetch_post_comments (line 373) | def fetch_post_comments(
method fetch_comment_replies (line 391) | def fetch_comment_replies(
method fetch_music_posts (line 409) | def fetch_music_posts(
method fetch_location_posts (line 425) | def fetch_location_posts(
method fetch_hashtag_posts (line 441) | def fetch_hashtag_posts(
class AsyncInstagramV2 (line 460) | class AsyncInstagramV2(AsyncResource):
method shortcode_to_media_id (line 463) | async def shortcode_to_media_id(
method media_id_to_shortcode (line 477) | async def media_id_to_shortcode(
method user_id_to_username (line 491) | async def user_id_to_username(
method fetch_user_info (line 505) | async def fetch_user_info(
method fetch_user_posts (line 521) | async def fetch_user_posts(
method fetch_user_reels (line 539) | async def fetch_user_reels(
method fetch_user_followers (line 557) | async def fetch_user_followers(
method fetch_user_following (line 575) | async def fetch_user_following(
method fetch_user_stories (line 593) | async def fetch_user_stories(
method fetch_user_highlights (line 609) | async def fetch_user_highlights(
method fetch_highlight_stories (line 625) | async def fetch_highlight_stories(
method fetch_user_tagged_posts (line 639) | async def fetch_user_tagged_posts(
method fetch_similar_users (line 657) | async def fetch_similar_users(
method search_users (line 673) | async def search_users(
method general_search (line 687) | async def general_search(
method search_reels (line 703) | async def search_reels(
method search_music (line 719) | async def search_music(
method search_hashtags (line 733) | async def search_hashtags(
method search_locations (line 747) | async def search_locations(
method search_by_coordinates (line 761) | async def search_by_coordinates(
method fetch_post_info (line 777) | async def fetch_post_info(
method fetch_post_likes (line 791) | async def fetch_post_likes(
method fetch_post_comments (line 807) | async def fetch_post_comments(
method fetch_comment_replies (line 825) | async def fetch_comment_replies(
method fetch_music_posts (line 843) | async def fetch_music_posts(
method fetch_location_posts (line 859) | async def fetch_location_posts(
method fetch_hashtag_posts (line 875) | async def fetch_hashtag_posts(
FILE: src/tikhub/resources/instagram_v3.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class InstagramV3 (line 26) | class InstagramV3(SyncResource):
method search_users (line 29) | def search_users(
method search_hashtags (line 45) | def search_hashtags(
method search_places (line 61) | def search_places(
method general_search (line 79) | def general_search(
method get_user_id_by_username (line 99) | def get_user_id_by_username(
method get_user_profile (line 113) | def get_user_profile(
method get_user_brief (line 129) | def get_user_brief(
method get_user_posts (line 145) | def get_user_posts(
method get_user_tagged_posts (line 169) | def get_user_tagged_posts(
method get_user_reels (line 195) | def get_user_reels(
method get_user_highlights (line 221) | def get_user_highlights(
method get_highlight_stories (line 245) | def get_highlight_stories(
method get_user_about (line 265) | def get_user_about(
method get_user_former_usernames (line 281) | def get_user_former_usernames(
method get_user_stories (line 297) | def get_user_stories(
method get_recommended_reels (line 313) | def get_recommended_reels(
method get_post_info (line 329) | def get_post_info(
method get_post_info_by_code (line 343) | def get_post_info_by_code(
method get_post_comments (line 357) | def get_post_comments(
method get_comment_replies (line 375) | def get_comment_replies(
method get_post_oembed (line 393) | def get_post_oembed(
method translate_comment (line 411) | def translate_comment(
method bulk_translate_comments (line 425) | def bulk_translate_comments(
method get_explore (line 439) | def get_explore(
method get_user_following (line 453) | def get_user_following(
method get_user_followers (line 473) | def get_user_followers(
method get_location_info (line 493) | def get_location_info(
method get_location_posts (line 509) | def get_location_posts(
method get_location_nearby (line 531) | def get_location_nearby(
method shortcode_to_media_id (line 545) | def shortcode_to_media_id(
method media_id_to_shortcode (line 559) | def media_id_to_shortcode(
method extract_shortcode (line 573) | def extract_shortcode(
class AsyncInstagramV3 (line 588) | class AsyncInstagramV3(AsyncResource):
method search_users (line 591) | async def search_users(
method search_hashtags (line 607) | async def search_hashtags(
method search_places (line 623) | async def search_places(
method general_search (line 641) | async def general_search(
method get_user_id_by_username (line 661) | async def get_user_id_by_username(
method get_user_profile (line 675) | async def get_user_profile(
method get_user_brief (line 691) | async def get_user_brief(
method get_user_posts (line 707) | async def get_user_posts(
method get_user_tagged_posts (line 731) | async def get_user_tagged_posts(
method get_user_reels (line 757) | async def get_user_reels(
method get_user_highlights (line 783) | async def get_user_highlights(
method get_highlight_stories (line 807) | async def get_highlight_stories(
method get_user_about (line 827) | async def get_user_about(
method get_user_former_usernames (line 843) | async def get_user_former_usernames(
method get_user_stories (line 859) | async def get_user_stories(
method get_recommended_reels (line 875) | async def get_recommended_reels(
method get_post_info (line 891) | async def get_post_info(
method get_post_info_by_code (line 905) | async def get_post_info_by_code(
method get_post_comments (line 919) | async def get_post_comments(
method get_comment_replies (line 937) | async def get_comment_replies(
method get_post_oembed (line 955) | async def get_post_oembed(
method translate_comment (line 973) | async def translate_comment(
method bulk_translate_comments (line 987) | async def bulk_translate_comments(
method get_explore (line 1001) | async def get_explore(
method get_user_following (line 1015) | async def get_user_following(
method get_user_followers (line 1035) | async def get_user_followers(
method get_location_info (line 1055) | async def get_location_info(
method get_location_posts (line 1071) | async def get_location_posts(
method get_location_nearby (line 1093) | async def get_location_nearby(
method shortcode_to_media_id (line 1107) | async def shortcode_to_media_id(
method media_id_to_shortcode (line 1121) | async def media_id_to_shortcode(
method extract_shortcode (line 1135) | async def extract_shortcode(
FILE: src/tikhub/resources/ios_shortcut.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class IosShortcut (line 26) | class IosShortcut(SyncResource):
method shortcut (line 29) | def shortcut(
class AsyncIosShortcut (line 39) | class AsyncIosShortcut(AsyncResource):
method shortcut (line 42) | async def shortcut(
FILE: src/tikhub/resources/kuaishou_app.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class KuaishouApp (line 26) | class KuaishouApp(SyncResource):
method fetch_one_video (line 29) | def fetch_one_video(
method fetch_videos_batch (line 43) | def fetch_videos_batch(
method fetch_one_video_by_url (line 57) | def fetch_one_video_by_url(
method fetch_one_video_comment (line 71) | def fetch_one_video_comment(
method fetch_one_user_v2 (line 87) | def fetch_one_user_v2(
method fetch_user_live_info (line 101) | def fetch_user_live_info(
method fetch_user_hot_post (line 115) | def fetch_user_hot_post(
method fetch_user_post_v2 (line 131) | def fetch_user_post_v2(
method search_comprehensive (line 147) | def search_comprehensive(
method search_video_v2 (line 171) | def search_video_v2(
method search_user_v2 (line 187) | def search_user_v2(
method fetch_hot_board_categories (line 203) | def fetch_hot_board_categories(
method fetch_hot_board_detail (line 212) | def fetch_hot_board_detail(
method fetch_hot_search_person (line 228) | def fetch_hot_search_person(
method fetch_live_top_list (line 237) | def fetch_live_top_list(
method fetch_shopping_top_list (line 253) | def fetch_shopping_top_list(
method fetch_brand_top_list (line 269) | def fetch_brand_top_list(
method generate_kuaishou_share_link (line 285) | def generate_kuaishou_share_link(
method fetch_magic_face_usage (line 299) | def fetch_magic_face_usage(
method fetch_magic_face_hot (line 313) | def fetch_magic_face_hot(
class AsyncKuaishouApp (line 332) | class AsyncKuaishouApp(AsyncResource):
method fetch_one_video (line 335) | async def fetch_one_video(
method fetch_videos_batch (line 349) | async def fetch_videos_batch(
method fetch_one_video_by_url (line 363) | async def fetch_one_video_by_url(
method fetch_one_video_comment (line 377) | async def fetch_one_video_comment(
method fetch_one_user_v2 (line 393) | async def fetch_one_user_v2(
method fetch_user_live_info (line 407) | async def fetch_user_live_info(
method fetch_user_hot_post (line 421) | async def fetch_user_hot_post(
method fetch_user_post_v2 (line 437) | async def fetch_user_post_v2(
method search_comprehensive (line 453) | async def search_comprehensive(
method search_video_v2 (line 477) | async def search_video_v2(
method search_user_v2 (line 493) | async def search_user_v2(
method fetch_hot_board_categories (line 509) | async def fetch_hot_board_categories(
method fetch_hot_board_detail (line 518) | async def fetch_hot_board_detail(
method fetch_hot_search_person (line 534) | async def fetch_hot_search_person(
method fetch_live_top_list (line 543) | async def fetch_live_top_list(
method fetch_shopping_top_list (line 559) | async def fetch_shopping_top_list(
method fetch_brand_top_list (line 575) | async def fetch_brand_top_list(
method generate_kuaishou_share_link (line 591) | async def generate_kuaishou_share_link(
method fetch_magic_face_usage (line 605) | async def fetch_magic_face_usage(
method fetch_magic_face_hot (line 619) | async def fetch_magic_face_hot(
FILE: src/tikhub/resources/kuaishou_web.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class KuaishouWeb (line 26) | class KuaishouWeb(SyncResource):
method fetch_one_video (line 29) | def fetch_one_video(
method fetch_one_video_v2 (line 43) | def fetch_one_video_v2(
method fetch_one_video_by_url (line 57) | def fetch_one_video_by_url(
method fetch_one_video_comment (line 71) | def fetch_one_video_comment(
method fetch_one_video_sub_comment (line 87) | def fetch_one_video_sub_comment(
method generate_share_short_url (line 105) | def generate_share_short_url(
method fetch_user_info (line 119) | def fetch_user_info(
method fetch_user_post (line 133) | def fetch_user_post(
method fetch_user_live_replay (line 149) | def fetch_user_live_replay(
method fetch_user_collect (line 165) | def fetch_user_collect(
method fetch_kuaishou_hot_list_v1 (line 181) | def fetch_kuaishou_hot_list_v1(
method fetch_kuaishou_hot_list_v2 (line 190) | def fetch_kuaishou_hot_list_v2(
method fetch_get_user_id (line 204) | def fetch_get_user_id(
class AsyncKuaishouWeb (line 219) | class AsyncKuaishouWeb(AsyncResource):
method fetch_one_video (line 222) | async def fetch_one_video(
method fetch_one_video_v2 (line 236) | async def fetch_one_video_v2(
method fetch_one_video_by_url (line 250) | async def fetch_one_video_by_url(
method fetch_one_video_comment (line 264) | async def fetch_one_video_comment(
method fetch_one_video_sub_comment (line 280) | async def fetch_one_video_sub_comment(
method generate_share_short_url (line 298) | async def generate_share_short_url(
method fetch_user_info (line 312) | async def fetch_user_info(
method fetch_user_post (line 326) | async def fetch_user_post(
method fetch_user_live_replay (line 342) | async def fetch_user_live_replay(
method fetch_user_collect (line 358) | async def fetch_user_collect(
method fetch_kuaishou_hot_list_v1 (line 374) | async def fetch_kuaishou_hot_list_v1(
method fetch_kuaishou_hot_list_v2 (line 383) | async def fetch_kuaishou_hot_list_v2(
method fetch_get_user_id (line 397) | async def fetch_get_user_id(
FILE: src/tikhub/resources/lemon8_app.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class Lemon8App (line 26) | class Lemon8App(SyncResource):
method fetch_user_profile (line 29) | def fetch_user_profile(
method fetch_post_detail (line 43) | def fetch_post_detail(
method fetch_user_follower_list (line 57) | def fetch_user_follower_list(
method fetch_user_following_list (line 73) | def fetch_user_following_list(
method fetch_post_comment_list (line 89) | def fetch_post_comment_list(
method fetch_discover_banners (line 109) | def fetch_discover_banners(
method fetch_discover_tab (line 118) | def fetch_discover_tab(
method fetch_discover_tab_information_tabs (line 127) | def fetch_discover_tab_information_tabs(
method fetch_hot_search_keywords (line 136) | def fetch_hot_search_keywords(
method fetch_topic_info (line 145) | def fetch_topic_info(
method fetch_topic_post_list (line 159) | def fetch_topic_post_list(
method fetch_search (line 181) | def fetch_search(
method get_item_id (line 203) | def get_item_id(
method get_user_id (line 217) | def get_user_id(
method get_item_ids (line 231) | def get_item_ids(
method get_user_ids (line 243) | def get_user_ids(
class AsyncLemon8App (line 256) | class AsyncLemon8App(AsyncResource):
method fetch_user_profile (line 259) | async def fetch_user_profile(
method fetch_post_detail (line 273) | async def fetch_post_detail(
method fetch_user_follower_list (line 287) | async def fetch_user_follower_list(
method fetch_user_following_list (line 303) | async def fetch_user_following_list(
method fetch_post_comment_list (line 319) | async def fetch_post_comment_list(
method fetch_discover_banners (line 339) | async def fetch_discover_banners(
method fetch_discover_tab (line 348) | async def fetch_discover_tab(
method fetch_discover_tab_information_tabs (line 357) | async def fetch_discover_tab_information_tabs(
method fetch_hot_search_keywords (line 366) | async def fetch_hot_search_keywords(
method fetch_topic_info (line 375) | async def fetch_topic_info(
method fetch_topic_post_list (line 389) | async def fetch_topic_post_list(
method fetch_search (line 411) | async def fetch_search(
method get_item_id (line 433) | async def get_item_id(
method get_user_id (line 447) | async def get_user_id(
method get_item_ids (line 461) | async def get_item_ids(
method get_user_ids (line 473) | async def get_user_ids(
FILE: src/tikhub/resources/linkedin_web.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class LinkedinWeb (line 26) | class LinkedinWeb(SyncResource):
method get_user_profile (line 29) | def get_user_profile(
method get_user_posts (line 63) | def get_user_posts(
method get_user_comments (line 81) | def get_user_comments(
method get_user_contact (line 99) | def get_user_contact(
method get_user_recommendations (line 113) | def get_user_recommendations(
method get_user_videos (line 133) | def get_user_videos(
method get_user_images (line 151) | def get_user_images(
method get_company_profile (line 169) | def get_company_profile(
method get_company_people (line 185) | def get_company_people(
method get_company_posts (line 201) | def get_company_posts(
method get_company_jobs (line 219) | def get_company_jobs(
method get_company_job_count (line 251) | def get_company_job_count(
method get_user_about (line 265) | def get_user_about(
method get_user_follower_and_connection (line 279) | def get_user_follower_and_connection(
method get_user_experience (line 293) | def get_user_experience(
method get_user_skills (line 309) | def get_user_skills(
method get_user_educations (line 325) | def get_user_educations(
method get_user_publications (line 341) | def get_user_publications(
method get_user_certifications (line 357) | def get_user_certifications(
method get_user_honors (line 373) | def get_user_honors(
method get_user_interests_groups (line 389) | def get_user_interests_groups(
method get_user_interests_companies (line 405) | def get_user_interests_companies(
method get_job_detail (line 421) | def get_job_detail(
method search_jobs (line 437) | def search_jobs(
method search_people (line 475) | def search_people(
class AsyncLinkedinWeb (line 512) | class AsyncLinkedinWeb(AsyncResource):
method get_user_profile (line 515) | async def get_user_profile(
method get_user_posts (line 549) | async def get_user_posts(
method get_user_comments (line 567) | async def get_user_comments(
method get_user_contact (line 585) | async def get_user_contact(
method get_user_recommendations (line 599) | async def get_user_recommendations(
method get_user_videos (line 619) | async def get_user_videos(
method get_user_images (line 637) | async def get_user_images(
method get_company_profile (line 655) | async def get_company_profile(
method get_company_people (line 671) | async def get_company_people(
method get_company_posts (line 687) | async def get_company_posts(
method get_company_jobs (line 705) | async def get_company_jobs(
method get_company_job_count (line 737) | async def get_company_job_count(
method get_user_about (line 751) | async def get_user_about(
method get_user_follower_and_connection (line 765) | async def get_user_follower_and_connection(
method get_user_experience (line 779) | async def get_user_experience(
method get_user_skills (line 795) | async def get_user_skills(
method get_user_educations (line 811) | async def get_user_educations(
method get_user_publications (line 827) | async def get_user_publications(
method get_user_certifications (line 843) | async def get_user_certifications(
method get_user_honors (line 859) | async def get_user_honors(
method get_user_interests_groups (line 875) | async def get_user_interests_groups(
method get_user_interests_companies (line 891) | async def get_user_interests_companies(
method get_job_detail (line 907) | async def get_job_detail(
method search_jobs (line 923) | async def search_jobs(
method search_people (line 961) | async def search_people(
FILE: src/tikhub/resources/pipixia_app.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class PipixiaApp (line 26) | class PipixiaApp(SyncResource):
method fetch_post_detail (line 29) | def fetch_post_detail(
method fetch_increase_post_view_count (line 45) | def fetch_increase_post_view_count(
method fetch_post_statistics (line 61) | def fetch_post_statistics(
method fetch_user_info (line 75) | def fetch_user_info(
method fetch_user_post_list (line 89) | def fetch_user_post_list(
method fetch_user_follower_list (line 107) | def fetch_user_follower_list(
method fetch_user_following_list (line 123) | def fetch_user_following_list(
method fetch_post_comment_list (line 139) | def fetch_post_comment_list(
method fetch_short_url (line 157) | def fetch_short_url(
method fetch_home_feed (line 171) | def fetch_home_feed(
method fetch_hot_search_words (line 185) | def fetch_hot_search_words(
method fetch_hot_search_board_list (line 194) | def fetch_hot_search_board_list(
method fetch_hot_search_board_detail (line 203) | def fetch_hot_search_board_detail(
method fetch_search (line 217) | def fetch_search(
method fetch_hashtag_detail (line 235) | def fetch_hashtag_detail(
method fetch_hashtag_post_list (line 249) | def fetch_hashtag_post_list(
method fetch_home_short_drama_feed (line 271) | def fetch_home_short_drama_feed(
class AsyncPipixiaApp (line 286) | class AsyncPipixiaApp(AsyncResource):
method fetch_post_detail (line 289) | async def fetch_post_detail(
method fetch_increase_post_view_count (line 305) | async def fetch_increase_post_view_count(
method fetch_post_statistics (line 321) | async def fetch_post_statistics(
method fetch_user_info (line 335) | async def fetch_user_info(
method fetch_user_post_list (line 349) | async def fetch_user_post_list(
method fetch_user_follower_list (line 367) | async def fetch_user_follower_list(
method fetch_user_following_list (line 383) | async def fetch_user_following_list(
method fetch_post_comment_list (line 399) | async def fetch_post_comment_list(
method fetch_short_url (line 417) | async def fetch_short_url(
method fetch_home_feed (line 431) | async def fetch_home_feed(
method fetch_hot_search_words (line 445) | async def fetch_hot_search_words(
method fetch_hot_search_board_list (line 454) | async def fetch_hot_search_board_list(
method fetch_hot_search_board_detail (line 463) | async def fetch_hot_search_board_detail(
method fetch_search (line 477) | async def fetch_search(
method fetch_hashtag_detail (line 495) | async def fetch_hashtag_detail(
method fetch_hashtag_post_list (line 509) | async def fetch_hashtag_post_list(
method fetch_home_short_drama_feed (line 531) | async def fetch_home_short_drama_feed(
FILE: src/tikhub/resources/reddit_app.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class RedditApp (line 26) | class RedditApp(SyncResource):
method fetch_home_feed (line 29) | def fetch_home_feed(
method fetch_popular_feed (line 49) | def fetch_popular_feed(
method fetch_games_feed (line 71) | def fetch_games_feed(
method fetch_news_feed (line 91) | def fetch_news_feed(
method fetch_post_details (line 109) | def fetch_post_details(
method fetch_post_details_batch (line 129) | def fetch_post_details_batch(
method fetch_post_details_batch_large (line 149) | def fetch_post_details_batch_large(
method fetch_post_comments (line 169) | def fetch_post_comments(
method fetch_comment_replies (line 189) | def fetch_comment_replies(
method fetch_subreddit_style (line 209) | def fetch_subreddit_style(
method fetch_subreddit_post_channels (line 225) | def fetch_subreddit_post_channels(
method fetch_subreddit_info (line 245) | def fetch_subreddit_info(
method fetch_subreddit_settings (line 261) | def fetch_subreddit_settings(
method fetch_search_typeahead (line 277) | def fetch_search_typeahead(
method fetch_dynamic_search (line 297) | def fetch_dynamic_search(
method fetch_community_highlights (line 325) | def fetch_community_highlights(
method fetch_trending_searches (line 341) | def fetch_trending_searches(
method fetch_user_profile (line 355) | def fetch_user_profile(
method fetch_user_active_subreddits (line 371) | def fetch_user_active_subreddits(
method fetch_user_comments (line 387) | def fetch_user_comments(
method fetch_user_posts (line 409) | def fetch_user_posts(
method fetch_subreddit_feed (line 429) | def fetch_subreddit_feed(
method check_subreddit_muted (line 451) | def check_subreddit_muted(
method fetch_user_trophies (line 467) | def fetch_user_trophies(
class AsyncRedditApp (line 484) | class AsyncRedditApp(AsyncResource):
method fetch_home_feed (line 487) | async def fetch_home_feed(
method fetch_popular_feed (line 507) | async def fetch_popular_feed(
method fetch_games_feed (line 529) | async def fetch_games_feed(
method fetch_news_feed (line 549) | async def fetch_news_feed(
method fetch_post_details (line 567) | async def fetch_post_details(
method fetch_post_details_batch (line 587) | async def fetch_post_details_batch(
method fetch_post_details_batch_large (line 607) | async def fetch_post_details_batch_large(
method fetch_post_comments (line 627) | async def fetch_post_comments(
method fetch_comment_replies (line 647) | async def fetch_comment_replies(
method fetch_subreddit_style (line 667) | async def fetch_subreddit_style(
method fetch_subreddit_post_channels (line 683) | async def fetch_subreddit_post_channels(
method fetch_subreddit_info (line 703) | async def fetch_subreddit_info(
method fetch_subreddit_settings (line 719) | async def fetch_subreddit_settings(
method fetch_search_typeahead (line 735) | async def fetch_search_typeahead(
method fetch_dynamic_search (line 755) | async def fetch_dynamic_search(
method fetch_community_highlights (line 783) | async def fetch_community_highlights(
method fetch_trending_searches (line 799) | async def fetch_trending_searches(
method fetch_user_profile (line 813) | async def fetch_user_profile(
method fetch_user_active_subreddits (line 829) | async def fetch_user_active_subreddits(
method fetch_user_comments (line 845) | async def fetch_user_comments(
method fetch_user_posts (line 867) | async def fetch_user_posts(
method fetch_subreddit_feed (line 887) | async def fetch_subreddit_feed(
method check_subreddit_muted (line 909) | async def check_subreddit_muted(
method fetch_user_trophies (line 925) | async def fetch_user_trophies(
FILE: src/tikhub/resources/sora2.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class Sora2 (line 26) | class Sora2(SyncResource):
method get_post_detail (line 29) | def get_post_detail(
method get_post_remix_list (line 45) | def get_post_remix_list(
method get_video_download_info (line 63) | def get_video_download_info(
method get_post_comments (line 79) | def get_post_comments(
method get_comment_replies (line 95) | def get_comment_replies(
method get_user_profile (line 111) | def get_user_profile(
method get_user_posts (line 125) | def get_user_posts(
method get_cameo_leaderboard (line 141) | def get_cameo_leaderboard(
method get_user_cameo_appearances (line 155) | def get_user_cameo_appearances(
method get_user_followers (line 171) | def get_user_followers(
method get_user_following (line 187) | def get_user_following(
method get_feed (line 203) | def get_feed(
method search_users (line 219) | def search_users(
method upload_image (line 233) | def upload_image(
method create_video (line 247) | def create_video(
method get_task_status (line 267) | def get_task_status(
method get_task_detail (line 283) | def get_task_detail(
class AsyncSora2 (line 302) | class AsyncSora2(AsyncResource):
method get_post_detail (line 305) | async def get_post_detail(
method get_post_remix_list (line 321) | async def get_post_remix_list(
method get_video_download_info (line 339) | async def get_video_download_info(
method get_post_comments (line 355) | async def get_post_comments(
method get_comment_replies (line 371) | async def get_comment_replies(
method get_user_profile (line 387) | async def get_user_profile(
method get_user_posts (line 401) | async def get_user_posts(
method get_cameo_leaderboard (line 417) | async def get_cameo_leaderboard(
method get_user_cameo_appearances (line 431) | async def get_user_cameo_appearances(
method get_user_followers (line 447) | async def get_user_followers(
method get_user_following (line 463) | async def get_user_following(
method get_feed (line 479) | async def get_feed(
method search_users (line 495) | async def search_users(
method upload_image (line 509) | async def upload_image(
method create_video (line 523) | async def create_video(
method get_task_status (line 543) | async def get_task_status(
method get_task_detail (line 559) | async def get_task_detail(
FILE: src/tikhub/resources/temp_mail.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class TempMail (line 26) | class TempMail(SyncResource):
method get_temp_email_address (line 29) | def get_temp_email_address(
method get_emails_inbox (line 38) | def get_emails_inbox(
method get_email_by_id (line 52) | def get_email_by_id(
class AsyncTempMail (line 69) | class AsyncTempMail(AsyncResource):
method get_temp_email_address (line 72) | async def get_temp_email_address(
method get_emails_inbox (line 81) | async def get_emails_inbox(
method get_email_by_id (line 95) | async def get_email_by_id(
FILE: src/tikhub/resources/threads_web.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class ThreadsWeb (line 26) | class ThreadsWeb(SyncResource):
method fetch_user_info (line 29) | def fetch_user_info(
method fetch_user_info_by_id (line 43) | def fetch_user_info_by_id(
method fetch_user_posts (line 57) | def fetch_user_posts(
method fetch_user_reposts (line 73) | def fetch_user_reposts(
method fetch_user_replies (line 89) | def fetch_user_replies(
method fetch_post_detail (line 105) | def fetch_post_detail(
method fetch_post_detail_v2 (line 119) | def fetch_post_detail_v2(
method fetch_post_comments (line 135) | def fetch_post_comments(
method search_top (line 151) | def search_top(
method search_recent (line 167) | def search_recent(
method search_profiles (line 183) | def search_profiles(
class AsyncThreadsWeb (line 198) | class AsyncThreadsWeb(AsyncResource):
method fetch_user_info (line 201) | async def fetch_user_info(
method fetch_user_info_by_id (line 215) | async def fetch_user_info_by_id(
method fetch_user_posts (line 229) | async def fetch_user_posts(
method fetch_user_reposts (line 245) | async def fetch_user_reposts(
method fetch_user_replies (line 261) | async def fetch_user_replies(
method fetch_post_detail (line 277) | async def fetch_post_detail(
method fetch_post_detail_v2 (line 291) | async def fetch_post_detail_v2(
method fetch_post_comments (line 307) | async def fetch_post_comments(
method search_top (line 323) | async def search_top(
method search_recent (line 339) | async def search_recent(
method search_profiles (line 355) | async def search_profiles(
FILE: src/tikhub/resources/tikhub_downloader.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class TikhubDownloader (line 26) | class TikhubDownloader(SyncResource):
method version (line 29) | def version(
method redirect_download (line 38) | def redirect_download(
class AsyncTikhubDownloader (line 48) | class AsyncTikhubDownloader(AsyncResource):
method version (line 51) | async def version(
method redirect_download (line 60) | async def redirect_download(
FILE: src/tikhub/resources/tikhub_user.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class TikhubUser (line 26) | class TikhubUser(SyncResource):
method get_user_info (line 29) | def get_user_info(
method get_user_daily_usage (line 38) | def get_user_daily_usage(
method calculate_price (line 47) | def calculate_price(
method get_tiered_discount_info (line 63) | def get_tiered_discount_info(
method get_endpoint_info (line 72) | def get_endpoint_info(
method get_all_endpoints_info (line 86) | def get_all_endpoints_info(
class AsyncTikhubUser (line 96) | class AsyncTikhubUser(AsyncResource):
method get_user_info (line 99) | async def get_user_info(
method get_user_daily_usage (line 108) | async def get_user_daily_usage(
method calculate_price (line 117) | async def calculate_price(
method get_tiered_discount_info (line 133) | async def get_tiered_discount_info(
method get_endpoint_info (line 142) | async def get_endpoint_info(
method get_all_endpoints_info (line 156) | async def get_all_endpoints_info(
FILE: src/tikhub/resources/tiktok_ads.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class TiktokAds (line 26) | class TiktokAds(SyncResource):
method get_ads_detail (line 29) | def get_ads_detail(
method search_ads (line 43) | def search_ads(
method get_keyword_insights (line 79) | def get_keyword_insights(
method get_top_products (line 111) | def get_top_products(
method get_hashtag_list (line 141) | def get_hashtag_list(
method get_sound_rank_list (line 167) | def get_sound_rank_list(
method get_keyword_list (line 193) | def get_keyword_list(
method get_top_ads_spotlight (line 217) | def get_top_ads_spotlight(
method get_ad_keyframe_analysis (line 235) | def get_ad_keyframe_analysis(
method get_ad_percentile (line 251) | def get_ad_percentile(
method get_ad_interactive_analysis (line 269) | def get_ad_interactive_analysis(
method get_recommended_ads (line 287) | def get_recommended_ads(
method get_query_suggestions (line 305) | def get_query_suggestions(
method get_keyword_filters (line 321) | def get_keyword_filters(
method get_related_keywords (line 330) | def get_related_keywords(
method get_keyword_details (line 356) | def get_keyword_details(
method get_creative_patterns (line 388) | def get_creative_patterns(
method get_product_filters (line 414) | def get_product_filters(
method get_product_metrics (line 423) | def get_product_metrics(
method get_product_detail (line 447) | def get_product_detail(
method get_hashtag_filters (line 469) | def get_hashtag_filters(
method get_hashtag_creator (line 478) | def get_hashtag_creator(
method get_sound_filters (line 492) | def get_sound_filters(
method get_sound_detail (line 506) | def get_sound_detail(
method search_sound_hint (line 524) | def search_sound_hint(
method search_sound (line 552) | def search_sound(
method get_sound_recommendations (line 580) | def get_sound_recommendations(
method get_creator_filters (line 596) | def get_creator_filters(
method get_creator_list (line 605) | def get_creator_list(
method search_creators (line 631) | def search_creators(
method get_popular_trends (line 653) | def get_popular_trends(
class AsyncTiktokAds (line 676) | class AsyncTiktokAds(AsyncResource):
method get_ads_detail (line 679) | async def get_ads_detail(
method search_ads (line 693) | async def search_ads(
method get_keyword_insights (line 729) | async def get_keyword_insights(
method get_top_products (line 761) | async def get_top_products(
method get_hashtag_list (line 791) | async def get_hashtag_list(
method get_sound_rank_list (line 817) | async def get_sound_rank_list(
method get_keyword_list (line 843) | async def get_keyword_list(
method get_top_ads_spotlight (line 867) | async def get_top_ads_spotlight(
method get_ad_keyframe_analysis (line 885) | async def get_ad_keyframe_analysis(
method get_ad_percentile (line 901) | async def get_ad_percentile(
method get_ad_interactive_analysis (line 919) | async def get_ad_interactive_analysis(
method get_recommended_ads (line 937) | async def get_recommended_ads(
method get_query_suggestions (line 955) | async def get_query_suggestions(
method get_keyword_filters (line 971) | async def get_keyword_filters(
method get_related_keywords (line 980) | async def get_related_keywords(
method get_keyword_details (line 1006) | async def get_keyword_details(
method get_creative_patterns (line 1038) | async def get_creative_patterns(
method get_product_filters (line 1064) | async def get_product_filters(
method get_product_metrics (line 1073) | async def get_product_metrics(
method get_product_detail (line 1097) | async def get_product_detail(
method get_hashtag_filters (line 1119) | async def get_hashtag_filters(
method get_hashtag_creator (line 1128) | async def get_hashtag_creator(
method get_sound_filters (line 1142) | async def get_sound_filters(
method get_sound_detail (line 1156) | async def get_sound_detail(
method search_sound_hint (line 1174) | async def search_sound_hint(
method search_sound (line 1202) | async def search_sound(
method get_sound_recommendations (line 1230) | async def get_sound_recommendations(
method get_creator_filters (line 1246) | async def get_creator_filters(
method get_creator_list (line 1255) | async def get_creator_list(
method search_creators (line 1281) | async def search_creators(
method get_popular_trends (line 1303) | async def get_popular_trends(
FILE: src/tikhub/resources/tiktok_analytics.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class TiktokAnalytics (line 26) | class TiktokAnalytics(SyncResource):
method fetch_video_metrics (line 29) | def fetch_video_metrics(
method detect_fake_views (line 43) | def detect_fake_views(
method fetch_comment_keywords (line 59) | def fetch_comment_keywords(
method fetch_creator_info_and_milestones (line 73) | def fetch_creator_info_and_milestones(
class AsyncTiktokAnalytics (line 88) | class AsyncTiktokAnalytics(AsyncResource):
method fetch_video_metrics (line 91) | async def fetch_video_metrics(
method detect_fake_views (line 105) | async def detect_fake_views(
method fetch_comment_keywords (line 121) | async def fetch_comment_keywords(
method fetch_creator_info_and_milestones (line 135) | async def fetch_creator_info_and_milestones(
FILE: src/tikhub/resources/tiktok_app_v3.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class TiktokAppV3 (line 26) | class TiktokAppV3(SyncResource):
method fetch_one_video (line 29) | def fetch_one_video(
method fetch_one_video_v2 (line 43) | def fetch_one_video_v2(
method fetch_one_video_v3 (line 57) | def fetch_one_video_v3(
method fetch_multi_video (line 73) | def fetch_multi_video(
method fetch_multi_video_v2 (line 85) | def fetch_multi_video_v2(
method fetch_one_video_by_share_url_v2 (line 97) | def fetch_one_video_by_share_url_v2(
method fetch_one_video_by_share_url (line 111) | def fetch_one_video_by_share_url(
method get_user_id_and_sec_user_id_by_username (line 125) | def get_user_id_and_sec_user_id_by_username(
method handler_user_profile (line 139) | def handler_user_profile(
method fetch_webcast_user_info (line 157) | def fetch_webcast_user_info(
method fetch_user_country_by_username (line 173) | def fetch_user_country_by_username(
method fetch_similar_user_recommendations (line 187) | def fetch_similar_user_recommendations(
method fetch_user_repost_videos (line 203) | def fetch_user_repost_videos(
method fetch_user_post_videos (line 221) | def fetch_user_post_videos(
method fetch_user_post_videos_v2 (line 243) | def fetch_user_post_videos_v2(
method fetch_user_post_videos_v3 (line 265) | def fetch_user_post_videos_v3(
method fetch_user_like_videos (line 287) | def fetch_user_like_videos(
method fetch_video_comments (line 305) | def fetch_video_comments(
method fetch_video_comment_replies (line 323) | def fetch_video_comment_replies(
method fetch_general_search_result (line 343) | def fetch_general_search_result(
method fetch_video_search_result (line 365) | def fetch_video_search_result(
method fetch_user_search_result (line 389) | def fetch_user_search_result(
method fetch_music_search_result (line 413) | def fetch_music_search_result(
method fetch_hashtag_search_result (line 437) | def fetch_hashtag_search_result(
method fetch_live_search_result (line 455) | def fetch_live_search_result(
method fetch_location_search (line 475) | def fetch_location_search(
method fetch_music_detail (line 493) | def fetch_music_detail(
method fetch_music_video_list (line 507) | def fetch_music_video_list(
method fetch_hashtag_detail (line 525) | def fetch_hashtag_detail(
method fetch_hashtag_video_list (line 539) | def fetch_hashtag_video_list(
method fetch_user_follower_list (line 557) | def fetch_user_follower_list(
method fetch_user_following_list (line 579) | def fetch_user_following_list(
method fetch_creator_search_insights (line 601) | def fetch_creator_search_insights(
method fetch_creator_search_insights_detail (line 627) | def fetch_creator_search_insights_detail(
method fetch_creator_search_insights_trend (line 649) | def fetch_creator_search_insights_trend(
method fetch_creator_search_insights_videos (line 667) | def fetch_creator_search_insights_videos(
method fetch_music_chart_list (line 685) | def fetch_music_chart_list(
method search_follower_list (line 703) | def search_follower_list(
method search_following_list (line 719) | def search_following_list(
method fetch_live_room_info (line 735) | def fetch_live_room_info(
method fetch_live_ranking_list (line 749) | def fetch_live_ranking_list(
method check_live_room_online (line 765) | def check_live_room_online(
method check_live_room_online_batch (line 779) | def check_live_room_online_batch(
method fetch_share_short_link (line 793) | def fetch_share_short_link(
method fetch_share_qr_code (line 807) | def fetch_share_qr_code(
method fetch_product_search (line 823) | def fetch_product_search(
method fetch_creator_info (line 851) | def fetch_creator_info(
method fetch_creator_showcase_product_list (line 865) | def fetch_creator_showcase_product_list(
method fetch_shop_id_by_share_link (line 883) | def fetch_shop_id_by_share_link(
method fetch_product_id_by_share_link (line 897) | def fetch_product_id_by_share_link(
method fetch_product_detail (line 911) | def fetch_product_detail(
method fetch_product_detail_v2 (line 925) | def fetch_product_detail_v2(
method fetch_product_detail_v3 (line 939) | def fetch_product_detail_v3(
method fetch_product_detail_v4 (line 955) | def fetch_product_detail_v4(
method fetch_product_review (line 971) | def fetch_product_review(
method fetch_shop_home_page_list (line 993) | def fetch_shop_home_page_list(
method fetch_shop_home (line 1007) | def fetch_shop_home(
method fetch_shop_product_recommend (line 1023) | def fetch_shop_product_recommend(
method fetch_shop_product_list (line 1041) | def fetch_shop_product_list(
method fetch_shop_product_list_v2 (line 1063) | def fetch_shop_product_list_v2(
method fetch_shop_info (line 1085) | def fetch_shop_info(
method fetch_shop_product_category (line 1099) | def fetch_shop_product_category(
method fetch_live_daily_rank (line 1113) | def fetch_live_daily_rank(
method fetch_user_music_list (line 1137) | def fetch_user_music_list(
method fetch_content_translate (line 1155) | def fetch_content_translate(
method fetch_home_feed (line 1171) | def fetch_home_feed(
method TTencrypt_algorithm (line 1185) | def TTencrypt_algorithm(
method fetch_live_room_product_list (line 1203) | def fetch_live_room_product_list(
method fetch_live_room_product_list_v2 (line 1227) | def fetch_live_room_product_list_v2(
method add_video_play_count (line 1251) | def add_video_play_count(
method encrypt_decrypt_login_request (line 1267) | def encrypt_decrypt_login_request(
method open_tiktok_app_to_video_detail (line 1285) | def open_tiktok_app_to_video_detail(
method open_tiktok_app_to_user_profile (line 1299) | def open_tiktok_app_to_user_profile(
method open_tiktok_app_to_keyword_search (line 1313) | def open_tiktok_app_to_keyword_search(
method open_tiktok_app_to_send_private_message (line 1327) | def open_tiktok_app_to_send_private_message(
class AsyncTiktokAppV3 (line 1342) | class AsyncTiktokAppV3(AsyncResource):
method fetch_one_video (line 1345) | async def fetch_one_video(
method fetch_one_video_v2 (line 1359) | async def fetch_one_video_v2(
method fetch_one_video_v3 (line 1373) | async def fetch_one_video_v3(
method fetch_multi_video (line 1389) | async def fetch_multi_video(
method fetch_multi_video_v2 (line 1401) | async def fetch_multi_video_v2(
method fetch_one_video_by_share_url_v2 (line 1413) | async def fetch_one_video_by_share_url_v2(
method fetch_one_video_by_share_url (line 1427) | async def fetch_one_video_by_share_url(
method get_user_id_and_sec_user_id_by_username (line 1441) | async def get_user_id_and_sec_user_id_by_username(
method handler_user_profile (line 1455) | async def handler_user_profile(
method fetch_webcast_user_info (line 1473) | async def fetch_webcast_user_info(
method fetch_user_country_by_username (line 1489) | async def fetch_user_country_by_username(
method fetch_similar_user_recommendations (line 1503) | async def fetch_similar_user_recommendations(
method fetch_user_repost_videos (line 1519) | async def fetch_user_repost_videos(
method fetch_user_post_videos (line 1537) | async def fetch_user_post_videos(
method fetch_user_post_videos_v2 (line 1559) | async def fetch_user_post_videos_v2(
method fetch_user_post_videos_v3 (line 1581) | async def fetch_user_post_videos_v3(
method fetch_user_like_videos (line 1603) | async def fetch_user_like_videos(
method fetch_video_comments (line 1621) | async def fetch_video_comments(
method fetch_video_comment_replies (line 1639) | async def fetch_video_comment_replies(
method fetch_general_search_result (line 1659) | async def fetch_general_search_result(
method fetch_video_search_result (line 1681) | async def fetch_video_search_result(
method fetch_user_search_result (line 1705) | async def fetch_user_search_result(
method fetch_music_search_result (line 1729) | async def fetch_music_search_result(
method fetch_hashtag_search_result (line 1753) | async def fetch_hashtag_search_result(
method fetch_live_search_result (line 1771) | async def fetch_live_search_result(
method fetch_location_search (line 1791) | async def fetch_location_search(
method fetch_music_detail (line 1809) | async def fetch_music_detail(
method fetch_music_video_list (line 1823) | async def fetch_music_video_list(
method fetch_hashtag_detail (line 1841) | async def fetch_hashtag_detail(
method fetch_hashtag_video_list (line 1855) | async def fetch_hashtag_video_list(
method fetch_user_follower_list (line 1873) | async def fetch_user_follower_list(
method fetch_user_following_list (line 1895) | async def fetch_user_following_list(
method fetch_creator_search_insights (line 1917) | async def fetch_creator_search_insights(
method fetch_creator_search_insights_detail (line 1943) | async def fetch_creator_search_insights_detail(
method fetch_creator_search_insights_trend (line 1965) | async def fetch_creator_search_insights_trend(
method fetch_creator_search_insights_videos (line 1983) | async def fetch_creator_search_insights_videos(
method fetch_music_chart_list (line 2001) | async def fetch_music_chart_list(
method search_follower_list (line 2019) | async def search_follower_list(
method search_following_list (line 2035) | async def search_following_list(
method fetch_live_room_info (line 2051) | async def fetch_live_room_info(
method fetch_live_ranking_list (line 2065) | async def fetch_live_ranking_list(
method check_live_room_online (line 2081) | async def check_live_room_online(
method check_live_room_online_batch (line 2095) | async def check_live_room_online_batch(
method fetch_share_short_link (line 2109) | async def fetch_share_short_link(
method fetch_share_qr_code (line 2123) | async def fetch_share_qr_code(
method fetch_product_search (line 2139) | async def fetch_product_search(
method fetch_creator_info (line 2167) | async def fetch_creator_info(
method fetch_creator_showcase_product_list (line 2181) | async def fetch_creator_showcase_product_list(
method fetch_shop_id_by_share_link (line 2199) | async def fetch_shop_id_by_share_link(
method fetch_product_id_by_share_link (line 2213) | async def fetch_product_id_by_share_link(
method fetch_product_detail (line 2227) | async def fetch_product_detail(
method fetch_product_detail_v2 (line 2241) | async def fetch_product_detail_v2(
method fetch_product_detail_v3 (line 2255) | async def fetch_product_detail_v3(
method fetch_product_detail_v4 (line 2271) | async def fetch_product_detail_v4(
method fetch_product_review (line 2287) | async def fetch_product_review(
method fetch_shop_home_page_list (line 2309) | async def fetch_shop_home_page_list(
method fetch_shop_home (line 2323) | async def fetch_shop_home(
method fetch_shop_product_recommend (line 2339) | async def fetch_shop_product_recommend(
method fetch_shop_product_list (line 2357) | async def fetch_shop_product_list(
method fetch_shop_product_list_v2 (line 2379) | async def fetch_shop_product_list_v2(
method fetch_shop_info (line 2401) | async def fetch_shop_info(
method fetch_shop_product_category (line 2415) | async def fetch_shop_product_category(
method fetch_live_daily_rank (line 2429) | async def fetch_live_daily_rank(
method fetch_user_music_list (line 2453) | async def fetch_user_music_list(
method fetch_content_translate (line 2471) | async def fetch_content_translate(
method fetch_home_feed (line 2487) | async def fetch_home_feed(
method TTencrypt_algorithm (line 2501) | async def TTencrypt_algorithm(
method fetch_live_room_product_list (line 2519) | async def fetch_live_room_product_list(
method fetch_live_room_product_list_v2 (line 2543) | async def fetch_live_room_product_list_v2(
method add_video_play_count (line 2567) | async def add_video_play_count(
method encrypt_decrypt_login_request (line 2583) | async def encrypt_decrypt_login_request(
method open_tiktok_app_to_video_detail (line 2601) | async def open_tiktok_app_to_video_detail(
method open_tiktok_app_to_user_profile (line 2615) | async def open_tiktok_app_to_user_profile(
method open_tiktok_app_to_keyword_search (line 2629) | async def open_tiktok_app_to_keyword_search(
method open_tiktok_app_to_send_private_message (line 2643) | async def open_tiktok_app_to_send_private_message(
FILE: src/tikhub/resources/tiktok_creator.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class TiktokCreator (line 26) | class TiktokCreator(SyncResource):
method get_account_health_status (line 29) | def get_account_health_status(
method get_account_violation_list (line 45) | def get_account_violation_list(
method get_account_insights_overview (line 63) | def get_account_insights_overview(
method get_live_analytics_summary (line 81) | def get_live_analytics_summary(
method get_video_analytics_summary (line 99) | def get_video_analytics_summary(
method get_video_list_analytics (line 115) | def get_video_list_analytics(
method get_product_analytics_list (line 137) | def get_product_analytics_list(
method get_creator_account_info (line 159) | def get_creator_account_info(
method get_showcase_product_list (line 175) | def get_showcase_product_list(
method get_video_associated_product_list (line 195) | def get_video_associated_product_list(
method get_video_detailed_stats (line 215) | def get_video_detailed_stats(
method get_video_to_product_stats (line 235) | def get_video_to_product_stats(
method get_product_related_videos (line 257) | def get_product_related_videos(
method get_video_audience_stats (line 279) | def get_video_audience_stats(
class AsyncTiktokCreator (line 300) | class AsyncTiktokCreator(AsyncResource):
method get_account_health_status (line 303) | async def get_account_health_status(
method get_account_violation_list (line 319) | async def get_account_violation_list(
method get_account_insights_overview (line 337) | async def get_account_insights_overview(
method get_live_analytics_summary (line 355) | async def get_live_analytics_summary(
method get_video_analytics_summary (line 373) | async def get_video_analytics_summary(
method get_video_list_analytics (line 389) | async def get_video_list_analytics(
method get_product_analytics_list (line 411) | async def get_product_analytics_list(
method get_creator_account_info (line 433) | async def get_creator_account_info(
method get_showcase_product_list (line 449) | async def get_showcase_product_list(
method get_video_associated_product_list (line 469) | async def get_video_associated_product_list(
method get_video_detailed_stats (line 489) | async def get_video_detailed_stats(
method get_video_to_product_stats (line 509) | async def get_video_to_product_stats(
method get_product_related_videos (line 531) | async def get_product_related_videos(
method get_video_audience_stats (line 553) | async def get_video_audience_stats(
FILE: src/tikhub/resources/tiktok_interaction.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class TiktokInteraction (line 26) | class TiktokInteraction(SyncResource):
method apply (line 29) | def apply(
method post_comment (line 47) | def post_comment(
method reply_comment (line 73) | def reply_comment(
method like (line 101) | def like(
method follow (line 125) | def follow(
method collect (line 151) | def collect(
method forward (line 175) | def forward(
class AsyncTiktokInteraction (line 200) | class AsyncTiktokInteraction(AsyncResource):
method apply (line 203) | async def apply(
method post_comment (line 221) | async def post_comment(
method reply_comment (line 247) | async def reply_comment(
method like (line 275) | async def like(
method follow (line 299) | async def follow(
method collect (line 325) | async def collect(
method forward (line 349) | async def forward(
FILE: src/tikhub/resources/tiktok_shop_web.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class TiktokShopWeb (line 26) | class TiktokShopWeb(SyncResource):
method fetch_product_detail (line 29) | def fetch_product_detail(
method fetch_product_detail_v2 (line 47) | def fetch_product_detail_v2(
method fetch_product_detail_v3 (line 65) | def fetch_product_detail_v3(
method fetch_product_reviews_v1 (line 81) | def fetch_product_reviews_v1(
method fetch_product_reviews_v2 (line 103) | def fetch_product_reviews_v2(
method fetch_seller_products_list (line 127) | def fetch_seller_products_list(
method fetch_seller_products_list_v2 (line 145) | def fetch_seller_products_list_v2(
method fetch_search_word_suggestion (line 163) | def fetch_search_word_suggestion(
method fetch_search_word_suggestion_v2 (line 181) | def fetch_search_word_suggestion_v2(
method fetch_search_products_list (line 199) | def fetch_search_products_list(
method fetch_search_products_list_v2 (line 219) | def fetch_search_products_list_v2(
method fetch_search_products_list_v3 (line 239) | def fetch_search_products_list_v3(
method fetch_products_category_list (line 263) | def fetch_products_category_list(
method fetch_products_by_category_id (line 277) | def fetch_products_by_category_id(
method fetch_hot_selling_products_list (line 295) | def fetch_hot_selling_products_list(
class AsyncTiktokShopWeb (line 312) | class AsyncTiktokShopWeb(AsyncResource):
method fetch_product_detail (line 315) | async def fetch_product_detail(
method fetch_product_detail_v2 (line 333) | async def fetch_product_detail_v2(
method fetch_product_detail_v3 (line 351) | async def fetch_product_detail_v3(
method fetch_product_reviews_v1 (line 367) | async def fetch_product_reviews_v1(
method fetch_product_reviews_v2 (line 389) | async def fetch_product_reviews_v2(
method fetch_seller_products_list (line 413) | async def fetch_seller_products_list(
method fetch_seller_products_list_v2 (line 431) | async def fetch_seller_products_list_v2(
method fetch_search_word_suggestion (line 449) | async def fetch_search_word_suggestion(
method fetch_search_word_suggestion_v2 (line 467) | async def fetch_search_word_suggestion_v2(
method fetch_search_products_list (line 485) | async def fetch_search_products_list(
method fetch_search_products_list_v2 (line 505) | async def fetch_search_products_list_v2(
method fetch_search_products_list_v3 (line 525) | async def fetch_search_products_list_v3(
method fetch_products_category_list (line 549) | async def fetch_products_category_list(
method fetch_products_by_category_id (line 563) | async def fetch_products_by_category_id(
method fetch_hot_selling_products_list (line 581) | async def fetch_hot_selling_products_list(
FILE: src/tikhub/resources/tiktok_web.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class TiktokWeb (line 26) | class TiktokWeb(SyncResource):
method fetch_post_detail (line 29) | def fetch_post_detail(
method fetch_post_detail_v2 (line 43) | def fetch_post_detail_v2(
method fetch_explore_post (line 57) | def fetch_explore_post(
method fetch_trending_post (line 73) | def fetch_trending_post(
method fetch_trending_searchwords (line 84) | def fetch_trending_searchwords(
method fetch_user_profile (line 93) | def fetch_user_profile(
method fetch_user_post (line 109) | def fetch_user_post(
method fetch_user_repost (line 131) | def fetch_user_repost(
method fetch_user_like (line 151) | def fetch_user_like(
method fetch_user_collect (line 173) | def fetch_user_collect(
method fetch_user_play_list (line 195) | def fetch_user_play_list(
method fetch_user_mix (line 213) | def fetch_user_mix(
method fetch_post_comment (line 231) | def fetch_post_comment(
method fetch_post_comment_reply (line 251) | def fetch_post_comment_reply(
method fetch_user_fans (line 273) | def fetch_user_fans(
method fetch_user_follow (line 293) | def fetch_user_follow(
method fetch_user_live_detail (line 313) | def fetch_user_live_detail(
method fetch_general_search (line 327) | def fetch_general_search(
method fetch_search_keyword_suggest (line 347) | def fetch_search_keyword_suggest(
method fetch_search_user (line 361) | def fetch_search_user(
method fetch_search_video (line 381) | def fetch_search_video(
method fetch_search_live (line 403) | def fetch_search_live(
method fetch_search_photo (line 425) | def fetch_search_photo(
method fetch_tag_detail (line 447) | def fetch_tag_detail(
method fetch_tag_post (line 461) | def fetch_tag_post(
method fetch_home_feed (line 479) | def fetch_home_feed(
method generate_real_msToken (line 495) | def generate_real_msToken(
method encrypt_strData (line 511) | def encrypt_strData(
method decrypt_strData (line 525) | def decrypt_strData(
method generate_fingerprint (line 539) | def generate_fingerprint(
method generate_webid (line 553) | def generate_webid(
method generate_ttwid (line 577) | def generate_ttwid(
method generate_xbogus (line 591) | def generate_xbogus(
method generate_xgnarly (line 607) | def generate_xgnarly(
method generate_xgnarly_and_xbogus (line 623) | def generate_xgnarly_and_xbogus(
method generate_x_mssdk_info (line 639) | def generate_x_mssdk_info(
method get_user_id (line 653) | def get_user_id(
method get_sec_user_id (line 667) | def get_sec_user_id(
method get_all_sec_user_id (line 681) | def get_all_sec_user_id(
method get_aweme_id (line 693) | def get_aweme_id(
method get_all_aweme_id (line 707) | def get_all_aweme_id(
method get_unique_id (line 719) | def get_unique_id(
method get_all_unique_id (line 733) | def get_all_unique_id(
method tiktok_live_room (line 745) | def tiktok_live_room(
method fetch_live_im_fetch (line 761) | def fetch_live_im_fetch(
method get_live_room_id (line 777) | def get_live_room_id(
method fetch_check_live_alive (line 791) | def fetch_check_live_alive(
method fetch_batch_check_live_alive (line 805) | def fetch_batch_check_live_alive(
method fetch_tiktok_live_data (line 819) | def fetch_tiktok_live_data(
method fetch_live_recommend (line 833) | def fetch_live_recommend(
method fetch_live_gift_list (line 847) | def fetch_live_gift_list(
method fetch_sso_login_qrcode (line 861) | def fetch_sso_login_qrcode(
method fetch_sso_login_status (line 881) | def fetch_sso_login_status(
method fetch_sso_login_auth (line 905) | def fetch_sso_login_auth(
method generate_hashed_id (line 927) | def generate_hashed_id(
method fetch_gift_name_by_id (line 941) | def fetch_gift_name_by_id(
method fetch_gift_names_by_ids (line 955) | def fetch_gift_names_by_ids(
method fetch_tiktok_web_guest_cookie (line 969) | def fetch_tiktok_web_guest_cookie(
method device_register (line 983) | def device_register(
class AsyncTiktokWeb (line 993) | class AsyncTiktokWeb(AsyncResource):
method fetch_post_detail (line 996) | async def fetch_post_detail(
method fetch_post_detail_v2 (line 1010) | async def fetch_post_detail_v2(
method fetch_explore_post (line 1024) | async def fetch_explore_post(
method fetch_trending_post (line 1040) | async def fetch_trending_post(
method fetch_trending_searchwords (line 1051) | async def fetch_trending_searchwords(
method fetch_user_profile (line 1060) | async def fetch_user_profile(
method fetch_user_post (line 1076) | async def fetch_user_post(
method fetch_user_repost (line 1098) | async def fetch_user_repost(
method fetch_user_like (line 1118) | async def fetch_user_like(
method fetch_user_collect (line 1140) | async def fetch_user_collect(
method fetch_user_play_list (line 1162) | async def fetch_user_play_list(
method fetch_user_mix (line 1180) | async def fetch_user_mix(
method fetch_post_comment (line 1198) | async def fetch_post_comment(
method fetch_post_comment_reply (line 1218) | async def fetch_post_comment_reply(
method fetch_user_fans (line 1240) | async def fetch_user_fans(
method fetch_user_follow (line 1260) | async def fetch_user_follow(
method fetch_user_live_detail (line 1280) | async def fetch_user_live_detail(
method fetch_general_search (line 1294) | async def fetch_general_search(
method fetch_search_keyword_suggest (line 1314) | async def fetch_search_keyword_suggest(
method fetch_search_user (line 1328) | async def fetch_search_user(
method fetch_search_video (line 1348) | async def fetch_search_video(
method fetch_search_live (line 1370) | async def fetch_search_live(
method fetch_search_photo (line 1392) | async def fetch_search_photo(
method fetch_tag_detail (line 1414) | async def fetch_tag_detail(
method fetch_tag_post (line 1428) | async def fetch_tag_post(
method fetch_home_feed (line 1446) | async def fetch_home_feed(
method generate_real_msToken (line 1462) | async def generate_real_msToken(
method encrypt_strData (line 1478) | async def encrypt_strData(
method decrypt_strData (line 1492) | async def decrypt_strData(
method generate_fingerprint (line 1506) | async def generate_fingerprint(
method generate_webid (line 1520) | async def generate_webid(
method generate_ttwid (line 1544) | async def generate_ttwid(
method generate_xbogus (line 1558) | async def generate_xbogus(
method generate_xgnarly (line 1574) | async def generate_xgnarly(
method generate_xgnarly_and_xbogus (line 1590) | async def generate_xgnarly_and_xbogus(
method generate_x_mssdk_info (line 1606) | async def generate_x_mssdk_info(
method get_user_id (line 1620) | async def get_user_id(
method get_sec_user_id (line 1634) | async def get_sec_user_id(
method get_all_sec_user_id (line 1648) | async def get_all_sec_user_id(
method get_aweme_id (line 1660) | async def get_aweme_id(
method get_all_aweme_id (line 1674) | async def get_all_aweme_id(
method get_unique_id (line 1686) | async def get_unique_id(
method get_all_unique_id (line 1700) | async def get_all_unique_id(
method tiktok_live_room (line 1712) | async def tiktok_live_room(
method fetch_live_im_fetch (line 1728) | async def fetch_live_im_fetch(
method get_live_room_id (line 1744) | async def get_live_room_id(
method fetch_check_live_alive (line 1758) | async def fetch_check_live_alive(
method fetch_batch_check_live_alive (line 1772) | async def fetch_batch_check_live_alive(
method fetch_tiktok_live_data (line 1786) | async def fetch_tiktok_live_data(
method fetch_live_recommend (line 1800) | async def fetch_live_recommend(
method fetch_live_gift_list (line 1814) | async def fetch_live_gift_list(
method fetch_sso_login_qrcode (line 1828) | async def fetch_sso_login_qrcode(
method fetch_sso_login_status (line 1848) | async def fetch_sso_login_status(
method fetch_sso_login_auth (line 1872) | async def fetch_sso_login_auth(
method generate_hashed_id (line 1894) | async def generate_hashed_id(
method fetch_gift_name_by_id (line 1908) | async def fetch_gift_name_by_id(
method fetch_gift_names_by_ids (line 1922) | async def fetch_gift_names_by_ids(
method fetch_tiktok_web_guest_cookie (line 1936) | async def fetch_tiktok_web_guest_cookie(
method device_register (line 1950) | async def device_register(
FILE: src/tikhub/resources/toutiao_app.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class ToutiaoApp (line 26) | class ToutiaoApp(SyncResource):
method get_article_info (line 29) | def get_article_info(
method get_video_info (line 43) | def get_video_info(
method get_comments (line 57) | def get_comments(
method get_user_info (line 73) | def get_user_info(
method get_user_id (line 87) | def get_user_id(
class AsyncToutiaoApp (line 102) | class AsyncToutiaoApp(AsyncResource):
method get_article_info (line 105) | async def get_article_info(
method get_video_info (line 119) | async def get_video_info(
method get_comments (line 133) | async def get_comments(
method get_user_info (line 149) | async def get_user_info(
method get_user_id (line 163) | async def get_user_id(
FILE: src/tikhub/resources/toutiao_web.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class ToutiaoWeb (line 26) | class ToutiaoWeb(SyncResource):
method get_article_info (line 29) | def get_article_info(
method get_video_info (line 43) | def get_video_info(
class AsyncToutiaoWeb (line 58) | class AsyncToutiaoWeb(AsyncResource):
method get_article_info (line 61) | async def get_article_info(
method get_video_info (line 75) | async def get_video_info(
FILE: src/tikhub/resources/twitter_web.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class TwitterWeb (line 26) | class TwitterWeb(SyncResource):
method fetch_tweet_detail (line 29) | def fetch_tweet_detail(
method fetch_user_profile (line 43) | def fetch_user_profile(
method fetch_user_post_tweet (line 59) | def fetch_user_post_tweet(
method fetch_search_timeline (line 77) | def fetch_search_timeline(
method fetch_post_comments (line 95) | def fetch_post_comments(
method fetch_latest_post_comments (line 111) | def fetch_latest_post_comments(
method fetch_user_tweet_replies (line 127) | def fetch_user_tweet_replies(
method fetch_user_highlights_tweets (line 143) | def fetch_user_highlights_tweets(
method fetch_user_media (line 163) | def fetch_user_media(
method fetch_retweet_user_list (line 181) | def fetch_retweet_user_list(
method fetch_trending (line 197) | def fetch_trending(
method fetch_user_followings (line 211) | def fetch_user_followings(
method fetch_user_followers (line 227) | def fetch_user_followers(
class AsyncTwitterWeb (line 244) | class AsyncTwitterWeb(AsyncResource):
method fetch_tweet_detail (line 247) | async def fetch_tweet_detail(
method fetch_user_profile (line 261) | async def fetch_user_profile(
method fetch_user_post_tweet (line 277) | async def fetch_user_post_tweet(
method fetch_search_timeline (line 295) | async def fetch_search_timeline(
method fetch_post_comments (line 313) | async def fetch_post_comments(
method fetch_latest_post_comments (line 329) | async def fetch_latest_post_comments(
method fetch_user_tweet_replies (line 345) | async def fetch_user_tweet_replies(
method fetch_user_highlights_tweets (line 361) | async def fetch_user_highlights_tweets(
method fetch_user_media (line 381) | async def fetch_user_media(
method fetch_retweet_user_list (line 399) | async def fetch_retweet_user_list(
method fetch_trending (line 415) | async def fetch_trending(
method fetch_user_followings (line 429) | async def fetch_user_followings(
method fetch_user_followers (line 445) | async def fetch_user_followers(
FILE: src/tikhub/resources/wechat_channels.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class WechatChannels (line 26) | class WechatChannels(SyncResource):
method fetch_default_search (line 29) | def fetch_default_search(
method fetch_search_latest (line 45) | def fetch_search_latest(
method fetch_search_ordinary (line 59) | def fetch_search_ordinary(
method fetch_user_search (line 73) | def fetch_user_search(
method fetch_user_search_v2 (line 89) | def fetch_user_search_v2(
method fetch_video_detail (line 105) | def fetch_video_detail(
method fetch_home_page (line 121) | def fetch_home_page(
method fetch_comments (line 137) | def fetch_comments(
method fetch_live_history (line 155) | def fetch_live_history(
method fetch_hot_words (line 169) | def fetch_hot_words(
class AsyncWechatChannels (line 179) | class AsyncWechatChannels(AsyncResource):
method fetch_default_search (line 182) | async def fetch_default_search(
method fetch_search_latest (line 198) | async def fetch_search_latest(
method fetch_search_ordinary (line 212) | async def fetch_search_ordinary(
method fetch_user_search (line 226) | async def fetch_user_search(
method fetch_user_search_v2 (line 242) | async def fetch_user_search_v2(
method fetch_video_detail (line 258) | async def fetch_video_detail(
method fetch_home_page (line 274) | async def fetch_home_page(
method fetch_comments (line 290) | async def fetch_comments(
method fetch_live_history (line 308) | async def fetch_live_history(
method fetch_hot_words (line 322) | async def fetch_hot_words(
FILE: src/tikhub/resources/wechat_media_platform_web.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class WechatMediaPlatformWeb (line 26) | class WechatMediaPlatformWeb(SyncResource):
method fetch_mp_article_detail_json (line 29) | def fetch_mp_article_detail_json(
method fetch_mp_article_detail_html (line 43) | def fetch_mp_article_detail_html(
method fetch_mp_article_list (line 57) | def fetch_mp_article_list(
method fetch_mp_article_read_count (line 73) | def fetch_mp_article_read_count(
method fetch_mp_article_url (line 89) | def fetch_mp_article_url(
method fetch_mp_article_comment_list (line 103) | def fetch_mp_article_comment_list(
method fetch_mp_article_comment_reply_list (line 121) | def fetch_mp_article_comment_reply_list(
method fetch_mp_article_ad (line 141) | def fetch_mp_article_ad(
method fetch_mp_article_url_conversion (line 155) | def fetch_mp_article_url_conversion(
method fetch_mp_related_articles (line 169) | def fetch_mp_related_articles(
class AsyncWechatMediaPlatformWeb (line 184) | class AsyncWechatMediaPlatformWeb(AsyncResource):
method fetch_mp_article_detail_json (line 187) | async def fetch_mp_article_detail_json(
method fetch_mp_article_detail_html (line 201) | async def fetch_mp_article_detail_html(
method fetch_mp_article_list (line 215) | async def fetch_mp_article_list(
method fetch_mp_article_read_count (line 231) | async def fetch_mp_article_read_count(
method fetch_mp_article_url (line 247) | async def fetch_mp_article_url(
method fetch_mp_article_comment_list (line 261) | async def fetch_mp_article_comment_list(
method fetch_mp_article_comment_reply_list (line 279) | async def fetch_mp_article_comment_reply_list(
method fetch_mp_article_ad (line 299) | async def fetch_mp_article_ad(
method fetch_mp_article_url_conversion (line 313) | async def fetch_mp_article_url_conversion(
method fetch_mp_related_articles (line 327) | async def fetch_mp_related_articles(
FILE: src/tikhub/resources/weibo_app.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class WeiboApp (line 26) | class WeiboApp(SyncResource):
method fetch_user_info (line 29) | def fetch_user_info(
method fetch_user_info_detail (line 43) | def fetch_user_info_detail(
method fetch_user_timeline (line 57) | def fetch_user_timeline(
method fetch_user_videos (line 77) | def fetch_user_videos(
method fetch_user_super_topics (line 93) | def fetch_user_super_topics(
method fetch_user_album (line 109) | def fetch_user_album(
method fetch_user_articles (line 125) | def fetch_user_articles(
method fetch_user_audios (line 141) | def fetch_user_audios(
method fetch_user_profile_feed (line 157) | def fetch_user_profile_feed(
method fetch_status_detail (line 173) | def fetch_status_detail(
method fetch_status_comments (line 187) | def fetch_status_comments(
method fetch_status_reposts (line 205) | def fetch_status_reposts(
method fetch_status_likes (line 221) | def fetch_status_likes(
method fetch_video_detail (line 237) | def fetch_video_detail(
method fetch_video_featured_feed (line 251) | def fetch_video_featured_feed(
method fetch_search_all (line 265) | def fetch_search_all(
method fetch_ai_smart_search (line 283) | def fetch_ai_smart_search(
method fetch_home_recommend_feed (line 299) | def fetch_home_recommend_feed(
method fetch_hot_search (line 315) | def fetch_hot_search(
method fetch_hot_search_categories (line 335) | def fetch_hot_search_categories(
class AsyncWeiboApp (line 345) | class AsyncWeiboApp(AsyncResource):
method fetch_user_info (line 348) | async def fetch_user_info(
method fetch_user_info_detail (line 362) | async def fetch_user_info_detail(
method fetch_user_timeline (line 376) | async def fetch_user_timeline(
method fetch_user_videos (line 396) | async def fetch_user_videos(
method fetch_user_super_topics (line 412) | async def fetch_user_super_topics(
method fetch_user_album (line 428) | async def fetch_user_album(
method fetch_user_articles (line 444) | async def fetch_user_articles(
method fetch_user_audios (line 460) | async def fetch_user_audios(
method fetch_user_profile_feed (line 476) | async def fetch_user_profile_feed(
method fetch_status_detail (line 492) | async def fetch_status_detail(
method fetch_status_comments (line 506) | async def fetch_status_comments(
method fetch_status_reposts (line 524) | async def fetch_status_reposts(
method fetch_status_likes (line 540) | async def fetch_status_likes(
method fetch_video_detail (line 556) | async def fetch_video_detail(
method fetch_video_featured_feed (line 570) | async def fetch_video_featured_feed(
method fetch_search_all (line 584) | async def fetch_search_all(
method fetch_ai_smart_search (line 602) | async def fetch_ai_smart_search(
method fetch_home_recommend_feed (line 618) | async def fetch_home_recommend_feed(
method fetch_hot_search (line 634) | async def fetch_hot_search(
method fetch_hot_search_categories (line 654) | async def fetch_hot_search_categories(
FILE: src/tikhub/resources/weibo_web.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class WeiboWeb (line 26) | class WeiboWeb(SyncResource):
method fetch_config_list (line 29) | def fetch_config_list(
method fetch_trend_top (line 38) | def fetch_trend_top(
method fetch_channel_feed (line 54) | def fetch_channel_feed(
method fetch_user_info (line 70) | def fetch_user_info(
method fetch_user_posts (line 84) | def fetch_user_posts(
method fetch_post_detail (line 102) | def fetch_post_detail(
method fetch_post_comments (line 116) | def fetch_post_comments(
method fetch_comment_replies (line 136) | def fetch_comment_replies(
method fetch_search (line 152) | def fetch_search(
method fetch_hot_search (line 172) | def fetch_hot_search(
method fetch_search_topics (line 181) | def fetch_search_topics(
class AsyncWeiboWeb (line 191) | class AsyncWeiboWeb(AsyncResource):
method fetch_config_list (line 194) | async def fetch_config_list(
method fetch_trend_top (line 203) | async def fetch_trend_top(
method fetch_channel_feed (line 219) | async def fetch_channel_feed(
method fetch_user_info (line 235) | async def fetch_user_info(
method fetch_user_posts (line 249) | async def fetch_user_posts(
method fetch_post_detail (line 267) | async def fetch_post_detail(
method fetch_post_comments (line 281) | async def fetch_post_comments(
method fetch_comment_replies (line 301) | async def fetch_comment_replies(
method fetch_search (line 317) | async def fetch_search(
method fetch_hot_search (line 337) | async def fetch_hot_search(
method fetch_search_topics (line 346) | async def fetch_search_topics(
FILE: src/tikhub/resources/weibo_web_v2.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class WeiboWebV2 (line 26) | class WeiboWebV2(SyncResource):
method check_allow_comment_with_pic (line 29) | def check_allow_comment_with_pic(
method fetch_post_detail (line 43) | def fetch_post_detail(
method fetch_user_info (line 59) | def fetch_user_info(
method fetch_user_basic_info (line 75) | def fetch_user_basic_info(
method fetch_user_posts (line 89) | def fetch_user_posts(
method fetch_user_original_posts (line 109) | def fetch_user_original_posts(
method fetch_post_comments (line 127) | def fetch_post_comments(
method fetch_post_sub_comments (line 145) | def fetch_post_sub_comments(
method search_user_posts (line 163) | def search_user_posts(
method fetch_user_video_collection_list (line 197) | def fetch_user_video_collection_list(
method fetch_user_video_collection_detail (line 211) | def fetch_user_video_collection_detail(
method fetch_user_video_list (line 229) | def fetch_user_video_list(
method fetch_user_following (line 245) | def fetch_user_following(
method fetch_user_fans (line 261) | def fetch_user_fans(
method fetch_all_groups (line 277) | def fetch_all_groups(
method fetch_user_recommend_timeline (line 286) | def fetch_user_recommend_timeline(
method fetch_hot_ranking_timeline (line 310) | def fetch_hot_ranking_timeline(
method fetch_hot_search_index (line 330) | def fetch_hot_search_index(
method fetch_hot_search_summary (line 339) | def fetch_hot_search_summary(
method fetch_hot_search (line 348) | def fetch_hot_search(
method fetch_entertainment_ranking (line 357) | def fetch_entertainment_ranking(
method fetch_life_ranking (line 366) | def fetch_life_ranking(
method fetch_social_ranking (line 375) | def fetch_social_ranking(
method fetch_similar_search (line 384) | def fetch_similar_search(
method fetch_ai_search (line 398) | def fetch_ai_search(
method fetch_ai_related_search (line 412) | def fetch_ai_related_search(
method fetch_advanced_search (line 426) | def fetch_advanced_search(
method fetch_city_list (line 448) | def fetch_city_list(
method fetch_realtime_search (line 462) | def fetch_realtime_search(
method fetch_user_search (line 478) | def fetch_user_search(
method fetch_video_search (line 510) | def fetch_video_search(
method fetch_pic_search (line 528) | def fetch_pic_search(
method fetch_topic_search (line 544) | def fetch_topic_search(
class AsyncWeiboWebV2 (line 561) | class AsyncWeiboWebV2(AsyncResource):
method check_allow_comment_with_pic (line 564) | async def check_allow_comment_with_pic(
method fetch_post_detail (line 578) | async def fetch_post_detail(
method fetch_user_info (line 594) | async def fetch_user_info(
method fetch_user_basic_info (line 610) | async def fetch_user_basic_info(
method fetch_user_posts (line 624) | async def fetch_user_posts(
method fetch_user_original_posts (line 644) | async def fetch_user_original_posts(
method fetch_post_comments (line 662) | async def fetch_post_comments(
method fetch_post_sub_comments (line 680) | async def fetch_post_sub_comments(
method search_user_posts (line 698) | async def search_user_posts(
method fetch_user_video_collection_list (line 732) | async def fetch_user_video_collection_list(
method fetch_user_video_collection_detail (line 746) | async def fetch_user_video_collection_detail(
method fetch_user_video_list (line 764) | async def fetch_user_video_list(
method fetch_user_following (line 780) | async def fetch_user_following(
method fetch_user_fans (line 796) | async def fetch_user_fans(
method fetch_all_groups (line 812) | async def fetch_all_groups(
method fetch_user_recommend_timeline (line 821) | async def fetch_user_recommend_timeline(
method fetch_hot_ranking_timeline (line 845) | async def fetch_hot_ranking_timeline(
method fetch_hot_search_index (line 865) | async def fetch_hot_search_index(
method fetch_hot_search_summary (line 874) | async def fetch_hot_search_summary(
method fetch_hot_search (line 883) | async def fetch_hot_search(
method fetch_entertainment_ranking (line 892) | async def fetch_entertainment_ranking(
method fetch_life_ranking (line 901) | async def fetch_life_ranking(
method fetch_social_ranking (line 910) | async def fetch_social_ranking(
method fetch_similar_search (line 919) | async def fetch_similar_search(
method fetch_ai_search (line 933) | async def fetch_ai_search(
method fetch_ai_related_search (line 947) | async def fetch_ai_related_search(
method fetch_advanced_search (line 961) | async def fetch_advanced_search(
method fetch_city_list (line 983) | async def fetch_city_list(
method fetch_realtime_search (line 997) | async def fetch_realtime_search(
method fetch_user_search (line 1013) | async def fetch_user_search(
method fetch_video_search (line 1045) | async def fetch_video_search(
method fetch_pic_search (line 1063) | async def fetch_pic_search(
method fetch_topic_search (line 1079) | async def fetch_topic_search(
FILE: src/tikhub/resources/xiaohongshu_app.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class XiaohongshuApp (line 26) | class XiaohongshuApp(SyncResource):
method get_note_info (line 29) | def get_note_info(
method get_note_info_v2 (line 45) | def get_note_info_v2(
method get_note_comments (line 61) | def get_note_comments(
method get_sub_comments (line 79) | def get_sub_comments(
method get_notes_by_topic (line 97) | def get_notes_by_topic(
method search_notes (line 125) | def search_notes(
method get_user_info (line 151) | def get_user_info(
method get_user_notes (line 165) | def get_user_notes(
method extract_share_info (line 181) | def extract_share_info(
method get_user_id_and_xsec_token (line 195) | def get_user_id_and_xsec_token(
method get_product_detail (line 209) | def get_product_detail(
method search_products (line 223) | def search_products(
class AsyncXiaohongshuApp (line 256) | class AsyncXiaohongshuApp(AsyncResource):
method get_note_info (line 259) | async def get_note_info(
method get_note_info_v2 (line 275) | async def get_note_info_v2(
method get_note_comments (line 291) | async def get_note_comments(
method get_sub_comments (line 309) | async def get_sub_comments(
method get_notes_by_topic (line 327) | async def get_notes_by_topic(
method search_notes (line 355) | async def search_notes(
method get_user_info (line 381) | async def get_user_info(
method get_user_notes (line 395) | async def get_user_notes(
method extract_share_info (line 411) | async def extract_share_info(
method get_user_id_and_xsec_token (line 425) | async def get_user_id_and_xsec_token(
method get_product_detail (line 439) | async def get_product_detail(
method search_products (line 453) | async def search_products(
FILE: src/tikhub/resources/xiaohongshu_app_v2.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class XiaohongshuAppV2 (line 26) | class XiaohongshuAppV2(SyncResource):
method get_image_note_detail (line 29) | def get_image_note_detail(
method get_video_note_detail (line 45) | def get_video_note_detail(
method get_mixed_note_detail (line 61) | def get_mixed_note_detail(
method get_note_comments (line 77) | def get_note_comments(
method get_note_sub_comments (line 101) | def get_note_sub_comments(
method get_user_info (line 123) | def get_user_info(
method get_user_posted_notes (line 139) | def get_user_posted_notes(
method get_user_faved_notes (line 157) | def get_user_faved_notes(
method search_notes (line 175) | def search_notes(
method search_users (line 205) | def search_users(
method search_images (line 225) | def search_images(
method search_products (line 249) | def search_products(
method search_groups (line 269) | def search_groups(
method get_product_detail (line 291) | def get_product_detail(
method get_product_review_overview (line 309) | def get_product_review_overview(
method get_product_reviews (line 325) | def get_product_reviews(
method get_product_recommendations (line 347) | def get_product_recommendations(
method get_topic_info (line 365) | def get_topic_info(
method get_topic_feed (line 383) | def get_topic_feed(
method get_creator_inspiration_feed (line 411) | def get_creator_inspiration_feed(
method get_creator_hot_inspiration_feed (line 429) | def get_creator_hot_inspiration_feed(
class AsyncXiaohongshuAppV2 (line 444) | class AsyncXiaohongshuAppV2(AsyncResource):
method get_image_note_detail (line 447) | async def get_image_note_detail(
method get_video_note_detail (line 463) | async def get_video_note_detail(
method get_mixed_note_detail (line 479) | async def get_mixed_note_detail(
method get_note_comments (line 495) | async def get_note_comments(
method get_note_sub_comments (line 519) | async def get_note_sub_comments(
method get_user_info (line 541) | async def get_user_info(
method get_user_posted_notes (line 557) | async def get_user_posted_notes(
method get_user_faved_notes (line 575) | async def get_user_faved_notes(
method search_notes (line 593) | async def search_notes(
method search_users (line 623) | async def search_users(
method search_images (line 643) | async def search_images(
method search_products (line 667) | async def search_products(
method search_groups (line 687) | async def search_groups(
method get_product_detail (line 709) | async def get_product_detail(
method get_product_review_overview (line 727) | async def get_product_review_overview(
method get_product_reviews (line 743) | async def get_product_reviews(
method get_product_recommendations (line 765) | async def get_product_recommendations(
method get_topic_info (line 783) | async def get_topic_info(
method get_topic_feed (line 801) | async def get_topic_feed(
method get_creator_inspiration_feed (line 829) | async def get_creator_inspiration_feed(
method get_creator_hot_inspiration_feed (line 847) | async def get_creator_hot_inspiration_feed(
FILE: src/tikhub/resources/xiaohongshu_web.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class XiaohongshuWeb (line 26) | class XiaohongshuWeb(SyncResource):
method get_home_recommend (line 29) | def get_home_recommend(
method get_note_info_v2 (line 51) | def get_note_info_v2(
method get_note_info_v4 (line 67) | def get_note_info_v4(
method get_note_info_v5 (line 83) | def get_note_info_v5(
method get_note_info_v7 (line 103) | def get_note_info_v7(
method get_note_comments (line 119) | def get_note_comments(
method get_note_comment_replies (line 135) | def get_note_comment_replies(
method get_user_info (line 153) | def get_user_info(
method get_user_info_v2 (line 167) | def get_user_info_v2(
method search_notes (line 183) | def search_notes(
method search_notes_v3 (line 205) | def search_notes_v3(
method search_users (line 227) | def search_users(
method get_user_notes_v2 (line 243) | def get_user_notes_v2(
method get_visitor_cookie (line 259) | def get_visitor_cookie(
method sign (line 273) | def sign(
method get_note_id_and_xsec_token (line 291) | def get_note_id_and_xsec_token(
method get_product_info (line 305) | def get_product_info(
class AsyncXiaohongshuWeb (line 324) | class AsyncXiaohongshuWeb(AsyncResource):
method get_home_recommend (line 327) | async def get_home_recommend(
method get_note_info_v2 (line 349) | async def get_note_info_v2(
method get_note_info_v4 (line 365) | async def get_note_info_v4(
method get_note_info_v5 (line 381) | async def get_note_info_v5(
method get_note_info_v7 (line 401) | async def get_note_info_v7(
method get_note_comments (line 417) | async def get_note_comments(
method get_note_comment_replies (line 433) | async def get_note_comment_replies(
method get_user_info (line 451) | async def get_user_info(
method get_user_info_v2 (line 465) | async def get_user_info_v2(
method search_notes (line 481) | async def search_notes(
method search_notes_v3 (line 503) | async def search_notes_v3(
method search_users (line 525) | async def search_users(
method get_user_notes_v2 (line 541) | async def get_user_notes_v2(
method get_visitor_cookie (line 557) | async def get_visitor_cookie(
method sign (line 571) | async def sign(
method get_note_id_and_xsec_token (line 589) | async def get_note_id_and_xsec_token(
method get_product_info (line 603) | async def get_product_info(
FILE: src/tikhub/resources/xiaohongshu_web_v2.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class XiaohongshuWebV2 (line 26) | class XiaohongshuWebV2(SyncResource):
method fetch_feed_notes (line 29) | def fetch_feed_notes(
method fetch_feed_notes_v2 (line 45) | def fetch_feed_notes_v2(
method fetch_feed_notes_v3 (line 59) | def fetch_feed_notes_v3(
method fetch_feed_notes_v4 (line 73) | def fetch_feed_notes_v4(
method fetch_feed_notes_v5 (line 87) | def fetch_feed_notes_v5(
method fetch_note_image (line 101) | def fetch_note_image(
method fetch_search_notes (line 115) | def fetch_search_notes(
method fetch_search_users (line 135) | def fetch_search_users(
method fetch_home_notes (line 151) | def fetch_home_notes(
method fetch_home_notes_app (line 167) | def fetch_home_notes_app(
method fetch_note_comments (line 183) | def fetch_note_comments(
method fetch_sub_comments (line 199) | def fetch_sub_comments(
method fetch_user_info (line 217) | def fetch_user_info(
method fetch_user_info_app (line 231) | def fetch_user_info_app(
method fetch_follower_list (line 245) | def fetch_follower_list(
method fetch_following_list (line 261) | def fetch_following_list(
method fetch_product_list (line 277) | def fetch_product_list(
method fetch_hot_list (line 293) | def fetch_hot_list(
class AsyncXiaohongshuWebV2 (line 303) | class AsyncXiaohongshuWebV2(AsyncResource):
method fetch_feed_notes (line 306) | async def fetch_feed_notes(
method fetch_feed_notes_v2 (line 322) | async def fetch_feed_notes_v2(
method fetch_feed_notes_v3 (line 336) | async def fetch_feed_notes_v3(
method fetch_feed_notes_v4 (line 350) | async def fetch_feed_notes_v4(
method fetch_feed_notes_v5 (line 364) | async def fetch_feed_notes_v5(
method fetch_note_image (line 378) | async def fetch_note_image(
method fetch_search_notes (line 392) | async def fetch_search_notes(
method fetch_search_users (line 412) | async def fetch_search_users(
method fetch_home_notes (line 428) | async def fetch_home_notes(
method fetch_home_notes_app (line 444) | async def fetch_home_notes_app(
method fetch_note_comments (line 460) | async def fetch_note_comments(
method fetch_sub_comments (line 476) | async def fetch_sub_comments(
method fetch_user_info (line 494) | async def fetch_user_info(
method fetch_user_info_app (line 508) | async def fetch_user_info_app(
method fetch_follower_list (line 522) | async def fetch_follower_list(
method fetch_following_list (line 538) | async def fetch_following_list(
method fetch_product_list (line 554) | async def fetch_product_list(
method fetch_hot_list (line 570) | async def fetch_hot_list(
FILE: src/tikhub/resources/xiaohongshu_web_v3.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class XiaohongshuWebV3 (line 26) | class XiaohongshuWebV3(SyncResource):
method fetch_note_detail (line 29) | def fetch_note_detail(
method fetch_note_comments (line 45) | def fetch_note_comments(
method fetch_sub_comments (line 61) | def fetch_sub_comments(
method fetch_search_notes (line 81) | def fetch_search_notes(
method fetch_search_users (line 101) | def fetch_search_users(
method fetch_trending (line 117) | def fetch_trending(
method fetch_search_suggest (line 126) | def fetch_search_suggest(
method fetch_homefeed (line 140) | def fetch_homefeed(
method fetch_homefeed_categories (line 160) | def fetch_homefeed_categories(
method fetch_user_info (line 169) | def fetch_user_info(
method fetch_user_notes (line 183) | def fetch_user_notes(
class AsyncXiaohongshuWebV3 (line 202) | class AsyncXiaohongshuWebV3(AsyncResource):
method fetch_note_detail (line 205) | async def fetch_note_detail(
method fetch_note_comments (line 221) | async def fetch_note_comments(
method fetch_sub_comments (line 237) | async def fetch_sub_comments(
method fetch_search_notes (line 257) | async def fetch_search_notes(
method fetch_search_users (line 277) | async def fetch_search_users(
method fetch_trending (line 293) | async def fetch_trending(
method fetch_search_suggest (line 302) | async def fetch_search_suggest(
method fetch_homefeed (line 316) | async def fetch_homefeed(
method fetch_homefeed_categories (line 336) | async def fetch_homefeed_categories(
method fetch_user_info (line 345) | async def fetch_user_info(
method fetch_user_notes (line 359) | async def fetch_user_notes(
FILE: src/tikhub/resources/xigua_app_v2.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class XiguaAppV2 (line 26) | class XiguaAppV2(SyncResource):
method fetch_one_video (line 29) | def fetch_one_video(
method fetch_one_video_v2 (line 43) | def fetch_one_video_v2(
method fetch_one_video_play_url (line 57) | def fetch_one_video_play_url(
method fetch_video_comment_list (line 71) | def fetch_video_comment_list(
method search_video (line 89) | def search_video(
method fetch_user_info (line 111) | def fetch_user_info(
method fetch_user_post_list (line 125) | def fetch_user_post_list(
class AsyncXiguaAppV2 (line 142) | class AsyncXiguaAppV2(AsyncResource):
method fetch_one_video (line 145) | async def fetch_one_video(
method fetch_one_video_v2 (line 159) | async def fetch_one_video_v2(
method fetch_one_video_play_url (line 173) | async def fetch_one_video_play_url(
method fetch_video_comment_list (line 187) | async def fetch_video_comment_list(
method search_video (line 205) | async def search_video(
method fetch_user_info (line 227) | async def fetch_user_info(
method fetch_user_post_list (line 241) | async def fetch_user_post_list(
FILE: src/tikhub/resources/youtube_web.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class YoutubeWeb (line 26) | class YoutubeWeb(SyncResource):
method get_video_info (line 29) | def get_video_info(
method get_video_info_v2 (line 55) | def get_video_info_v2(
method get_video_info_v3 (line 69) | def get_video_info_v3(
method get_video_subtitles (line 87) | def get_video_subtitles(
method get_video_comments (line 107) | def get_video_comments(
method get_video_comment_replies (line 133) | def get_video_comment_replies(
method get_channel_description (line 155) | def get_channel_description(
method get_relate_video (line 179) | def get_relate_video(
method search_video (line 195) | def search_video(
method get_general_search (line 217) | def get_general_search(
method get_shorts_search (line 251) | def get_shorts_search(
method get_channel_id (line 281) | def get_channel_id(
method get_channel_id_v2 (line 295) | def get_channel_id_v2(
method get_channel_url (line 309) | def get_channel_url(
method get_channel_info (line 323) | def get_channel_info(
method get_channel_videos (line 337) | def get_channel_videos(
method get_channel_videos_v2 (line 355) | def get_channel_videos_v2(
method get_channel_videos_v3 (line 377) | def get_channel_videos_v3(
method get_channel_short_videos (line 401) | def get_channel_short_videos(
method search_channel (line 417) | def search_channel(
method get_trending_videos (line 439) | def get_trending_videos(
class AsyncYoutubeWeb (line 458) | class AsyncYoutubeWeb(AsyncResource):
method get_video_info (line 461) | async def get_video_info(
method get_video_info_v2 (line 487) | async def get_video_info_v2(
method get_video_info_v3 (line 501) | async def get_video_info_v3(
method get_video_subtitles (line 519) | async def get_video_subtitles(
method get_video_comments (line 539) | async def get_video_comments(
method get_video_comment_replies (line 565) | async def get_video_comment_replies(
method get_channel_description (line 587) | async def get_channel_description(
method get_relate_video (line 611) | async def get_relate_video(
method search_video (line 627) | async def search_video(
method get_general_search (line 649) | async def get_general_search(
method get_shorts_search (line 683) | async def get_shorts_search(
method get_channel_id (line 713) | async def get_channel_id(
method get_channel_id_v2 (line 727) | async def get_channel_id_v2(
method get_channel_url (line 741) | async def get_channel_url(
method get_channel_info (line 755) | async def get_channel_info(
method get_channel_videos (line 769) | async def get_channel_videos(
method get_channel_videos_v2 (line 787) | async def get_channel_videos_v2(
method get_channel_videos_v3 (line 809) | async def get_channel_videos_v3(
method get_channel_short_videos (line 833) | async def get_channel_short_videos(
method search_channel (line 849) | async def search_channel(
method get_trending_videos (line 871) | async def get_trending_videos(
FILE: src/tikhub/resources/youtube_web_v2.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class YoutubeWebV2 (line 26) | class YoutubeWebV2(SyncResource):
method get_video_info (line 29) | def get_video_info(
method get_video_comments (line 47) | def get_video_comments(
method get_video_comment_replies (line 71) | def get_video_comment_replies(
method get_channel_description (line 91) | def get_channel_description(
method get_general_search (line 113) | def get_general_search(
method get_general_search_v2 (line 145) | def get_general_search_v2(
method get_shorts_search (line 171) | def get_shorts_search(
method get_shorts_search_v2 (line 199) | def get_shorts_search_v2(
method get_channel_id (line 219) | def get_channel_id(
method get_channel_url (line 233) | def get_channel_url(
method get_channel_videos (line 247) | def get_channel_videos(
method get_video_streams (line 269) | def get_video_streams(
method get_video_streams_v2 (line 285) | def get_video_streams_v2(
method get_signed_stream_url (line 301) | def get_signed_stream_url(
method get_video_captions (line 319) | def get_video_captions(
method get_related_videos (line 339) | def get_related_videos(
method get_channel_shorts (line 357) | def get_channel_shorts(
method get_search_suggestions (line 377) | def get_search_suggestions(
method search_channels (line 395) | def search_channels(
class AsyncYoutubeWebV2 (line 414) | class AsyncYoutubeWebV2(AsyncResource):
method get_video_info (line 417) | async def get_video_info(
method get_video_comments (line 435) | async def get_video_comments(
method get_video_comment_replies (line 459) | async def get_video_comment_replies(
method get_channel_description (line 479) | async def get_channel_description(
method get_general_search (line 501) | async def get_general_search(
method get_general_search_v2 (line 533) | async def get_general_search_v2(
method get_shorts_search (line 559) | async def get_shorts_search(
method get_shorts_search_v2 (line 587) | async def get_shorts_search_v2(
method get_channel_id (line 607) | async def get_channel_id(
method get_channel_url (line 621) | async def get_channel_url(
method get_channel_videos (line 635) | async def get_channel_videos(
method get_video_streams (line 657) | async def get_video_streams(
method get_video_streams_v2 (line 673) | async def get_video_streams_v2(
method get_signed_stream_url (line 689) | async def get_signed_stream_url(
method get_video_captions (line 707) | async def get_video_captions(
method get_related_videos (line 727) | async def get_related_videos(
method get_channel_shorts (line 745) | async def get_channel_shorts(
method get_search_suggestions (line 765) | async def get_search_suggestions(
method search_channels (line 783) | async def search_channels(
FILE: src/tikhub/resources/zhihu_web.py
function _drop_none (line 18) | def _drop_none(d: dict[str, Any]) -> dict[str, Any]:
class ZhihuWeb (line 26) | class ZhihuWeb(SyncResource):
method fetch_column_articles (line 29) | def fetch_column_articles(
method fetch_column_article_detail (line 47) | def fetch_column_article_detail(
method fetch_column_recommend (line 61) | def fetch_column_recommend(
method fetch_column_relationship (line 79) | def fetch_column_relationship(
method fetch_column_comment_config (line 93) | def fetch_column_comment_config(
method fetch_hot_recommend (line 107) | def fetch_hot_recommend(
method fetch_hot_list (line 125) | def fetch_hot_list(
method fetch_video_list (line 141) | def fetch_video_list(
method fetch_article_search_v3 (line 157) | def fetch_article_search_v3(
method fetch_user_search_v3 (line 189) | def fetch_user_search_v3(
method fetch_topic_search_v3 (line 207) | def fetch_topic_search_v3(
method fetch_scholar_search_v3 (line 225) | def fetch_scholar_search_v3(
method fetch_ai_search (line 245) | def fetch_ai_search(
method fetch_ai_search_result (line 259) | def fetch_ai_search_result(
method fetch_video_search_v3 (line 273) | def fetch_video_search_v3(
method fetch_column_search_v3 (line 293) | def fetch_column_search_v3(
method fetch_salt_search_v3 (line 313) | def fetch_salt_search_v3(
method fetch_ebook_search_v3 (line 333) | def fetch_ebook_search_v3(
method fetch_preset_search (line 353) | def fetch_preset_search(
method fetch_search_recommend (line 362) | def fetch_search_recommend(
method fetch_search_suggest (line 371) | def fetch_search_suggest(
method fetch_comment_v5 (line 385) | def fetch_comment_v5(
method fetch_sub_comment_v5 (line 405) | def fetch_sub_comment_v5(
method fetch_user_info (line 425) | def fetch_user_info(
method fetch_user_followees (line 439) | def fetch_user_followees(
method fetch_user_followers (line 457) | def fetch_user_followers(
method fetch_user_articles (line 475) | def fetch_user_articles(
method fetch_user_included_articles (line 495) | def fetch_user_included_articles(
method fetch_user_follow_columns (line 513) | def fetch_user_follow_columns(
method fetch_user_follow_questions (line 531) | def fetch_user_follow_questions(
method fetch_user_follow_collections (line 549) | def fetch_user_follow_collections(
method fetch_user_follow_topics (line 567) | def fetch_user_follow_topics(
method fetch_recommend_followees (line 585) | def fetch_recommend_followees(
method fetch_question_answers (line 594) | def fetch_question_answers(
class AsyncZhihuWeb (line 619) | class AsyncZhihuWeb(AsyncResource):
method fetch_column_articles (line 622) | async def fetch_column_articles(
method fetch_column_article_detail (line 640) | async def fetch_column_article_detail(
method fetch_column_recommend (line 654) | async def fetch_column_recommend(
method fetch_column_relationship (line 672) | async def fetch_column_relationship(
method fetch_column_comment_config (line 686) | async def fetch_column_comment_config(
method fetch_hot_recommend (line 700) | async def fetch_hot_recommend(
method fetch_hot_list (line 718) | async def fetch_hot_list(
method fetch_video_list (line 734) | async def fetch_video_list(
method fetch_article_search_v3 (line 750) | async def fetch_article_search_v3(
method fetch_user_search_v3 (line 782) | async def fetch_user_search_v3(
method fetch_topic_search_v3 (line 800) | async def fetch_topic_search_v3(
method fetch_scholar_search_v3 (line 818) | async def fetch_scholar_search_v3(
method fetch_ai_search (line 838) | async def fetch_ai_search(
method fetch_ai_search_result (line 852) | async def fetch_ai_search_result(
method fetch_video_search_v3 (line 866) | async def fetch_video_search_v3(
method fetch_column_search_v3 (line 886) | async def fetch_column_search_v3(
method fetch_salt_search_v3 (line 906) | async def fetch_salt_search_v3(
method fetch_ebook_search_v3 (line 926) | async def fetch_ebook_search_v3(
method fetch_preset_search (line 946) | async def fetch_preset_search(
method fetch_search_recommend (line 955) | async def fetch_search_recommend(
method fetch_search_suggest (line 964) | async def fetch_search_suggest(
method fetch_comment_v5 (line 978) | async def fetch_comment_v5(
method fetch_sub_comment_v5 (line 998) | async def fetch_sub_comment_v5(
method fetch_user_info (line 1018) | async def fetch_user_info(
method fetch_user_followees (line 1032) | async def fetch_user_followees(
method fetch_user_followers (line 1050) | async def fetch_user_followers(
method fetch_user_articles (line 1068) | async def fetch_user_articles(
method fetch_user_included_articles (line 1088) | async def fetch_user_included_articles(
method fetch_user_follow_columns (line 1106) | async def fetch_user_follow_columns(
method fetch_user_follow_questions (line 1124) | async def fetch_user_follow_questions(
method fetch_user_follow_collections (line 1142) | async def fetch_user_follow_collections(
method fetch_user_follow_topics (line 1160) | async def fetch_user_follow_topics(
method fetch_recommend_followees (line 1178) | async def fetch_recommend_followees(
method fetch_question_answers (line 1187) | async def fetch_question_answers(
FILE: tests/conftest.py
function _clear_tikhub_env (line 11) | def _clear_tikhub_env(monkeypatch: pytest.MonkeyPatch) -> Iterator[None]:
FILE: tests/unit/test_cli.py
function _set_key (line 24) | def _set_key(monkeypatch: pytest.MonkeyPatch) -> None:
function _patch_client (line 28) | def _patch_client(monkeypatch: pytest.MonkeyPatch, handler):
function test_version (line 47) | def test_version():
function test_no_args_prints_help (line 53) | def test_no_args_prints_help():
function test_health_success (line 67) | def test_health_success(monkeypatch: pytest.MonkeyPatch):
function test_fetch_passes_url_param (line 90) | def test_fetch_passes_url_param(monkeypatch: pytest.MonkeyPatch):
function test_user_info (line 111) | def test_user_info(monkeypatch: pytest.MonkeyPatch):
function test_user_usage (line 127) | def test_user_usage(monkeypatch: pytest.MonkeyPatch):
function test_health_no_api_key (line 148) | def test_health_no_api_key():
function test_health_upstream_error (line 156) | def test_health_upstream_error(monkeypatch: pytest.MonkeyPatch):
FILE: tests/unit/test_client_construction.py
function test_explicit_api_key (line 10) | def test_explicit_api_key():
function test_api_key_from_env (line 17) | def test_api_key_from_env(monkeypatch: pytest.MonkeyPatch):
function test_missing_api_key_raises (line 24) | def test_missing_api_key_raises():
function test_explicit_overrides_env (line 29) | def test_explicit_overrides_env(monkeypatch: pytest.MonkeyPatch):
function test_base_url_default (line 36) | def test_base_url_default():
function test_base_url_override_strips_trailing_slash (line 42) | def test_base_url_override_strips_trailing_slash():
function test_context_manager_closes_client (line 48) | def test_context_manager_closes_client():
function test_repr_does_not_leak_key (line 54) | def test_repr_does_not_leak_key():
function test_async_repr_does_not_leak_key (line 62) | async def test_async_repr_does_not_leak_key():
function test_async_context_manager_closes_client (line 69) | async def test_async_context_manager_closes_client():
FILE: tests/unit/test_errors.py
function _client_returning (line 25) | def _client_returning(status: int, *, body: object = None, headers: dict...
function test_status_maps_to_exception (line 56) | def test_status_maps_to_exception(status: int, exc_cls: type[TikHubHTTPE...
function test_400_raises_with_url_and_body (line 60) | def test_400_raises_with_url_and_body():
function test_401_raises_auth_error (line 72) | def test_401_raises_auth_error():
function test_429_carries_retry_after (line 78) | def test_429_carries_retry_after():
function test_authorization_header_redacted_in_exception (line 85) | def test_authorization_header_redacted_in_exception():
function test_all_specific_errors_inherit_from_base (line 97) | def test_all_specific_errors_inherit_from_base():
FILE: tests/unit/test_generated_resources.py
function _capture_handler (line 23) | def _capture_handler() -> tuple[list[httpx.Request], httpx.MockTransport]:
function _async_capture_handler (line 33) | def _async_capture_handler() -> tuple[list[httpx.Request], httpx.MockTra...
function test_resource_attribute_present (line 105) | def test_resource_attribute_present(attr: str):
function test_total_endpoint_count (line 111) | def test_total_endpoint_count():
function test_get_with_query_params_drops_none (line 134) | def test_get_with_query_params_drops_none():
function test_get_with_optional_param_included_when_set (line 145) | def test_get_with_optional_param_included_when_set():
function test_post_with_json_body_props (line 153) | def test_post_with_json_body_props():
function test_post_with_array_body (line 164) | def test_post_with_array_body():
function test_authorization_header_on_every_call (line 174) | def test_authorization_header_on_every_call():
function test_async_get_with_query_params (line 189) | async def test_async_get_with_query_params():
function test_async_post_with_json_body (line 198) | async def test_async_post_with_json_body():
function test_async_method_signatures_match_sync (line 208) | async def test_async_method_signatures_match_sync():
FILE: tests/unit/test_health_check.py
function _ok_handler (line 17) | def _ok_handler(request: httpx.Request) -> httpx.Response:
function test_sync_health_check (line 28) | def test_sync_health_check():
function test_async_health_check (line 36) | async def test_async_health_check():
function test_user_agent_header_set_by_default (line 44) | def test_user_agent_header_set_by_default():
function test_custom_user_agent (line 56) | def test_custom_user_agent():
FILE: tests/unit/test_pagination.py
function _make_sync_pages (line 10) | def _make_sync_pages(*pages: list[int]):
function test_cursor_paginator_iter (line 23) | def test_cursor_paginator_iter():
function test_cursor_paginator_first (line 28) | def test_cursor_paginator_first():
function test_page_paginator_initial_cursor (line 33) | def test_page_paginator_initial_cursor():
function test_offset_paginator_initial_offset (line 39) | def test_offset_paginator_initial_offset():
function test_cursor_paginator_async_iter (line 45) | async def test_cursor_paginator_async_iter():
FILE: tests/unit/test_retries.py
function test_retry_policy_should_retry_5xx (line 20) | def test_retry_policy_should_retry_5xx():
function test_retry_policy_uses_retry_after_when_present (line 28) | def test_retry_policy_uses_retry_after_when_present():
function test_retry_policy_exponential_backoff (line 36) | def test_retry_policy_exponential_backoff():
function test_retry_policy_caps_at_backoff_max (line 44) | def test_retry_policy_caps_at_backoff_max():
function test_client_retries_on_5xx_then_succeeds (line 50) | def test_client_retries_on_5xx_then_succeeds(monkeypatch: pytest.MonkeyP...
function test_client_does_not_retry_on_400 (line 75) | def test_client_does_not_retry_on_400(monkeypatch: pytest.MonkeyPatch):
Condensed preview — 167 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,970K chars).
[
{
"path": ".github/workflows/ci.yml",
"chars": 1423,
"preview": "name: ci\n\non:\n push:\n branches: [main]\n pull_request:\n branches: [main]\n\nconcurrency:\n group: ci-${{ github.ref"
},
{
"path": ".github/workflows/release.yml",
"chars": 1467,
"preview": "name: release\n\non:\n push:\n tags: [\"v*.*.*\", \"v*.*.*a*\", \"v*.*.*b*\", \"v*.*.*rc*\"]\n\npermissions:\n contents: read\n id"
},
{
"path": ".gitignore",
"chars": 1162,
"preview": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packagi"
},
{
"path": "CHANGELOG.md",
"chars": 3366,
"preview": "# Changelog\n\nAll notable changes to `tikhub` will be documented in this file. The format is based on [Keep a Changelog]("
},
{
"path": "LICENSE",
"chars": 11357,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 8473,
"preview": "# TikHub API Python SDK\n\n<p align=\"center\">\n <a href=\"https://github.com/TikHub/TikHub-API-Python-SDK/stargazers\"><img "
},
{
"path": "README_CN.md",
"chars": 6097,
"preview": "# TikHub API Python SDK\n\n<p align=\"center\">\n <a href=\"https://github.com/TikHub/TikHub-API-Python-SDK/stargazers\"><img "
},
{
"path": "README_ES.md",
"chars": 7442,
"preview": "# TikHub API Python SDK\n\n<p align=\"center\">\n <a href=\"https://github.com/TikHub/TikHub-API-Python-SDK/stargazers\"><img "
},
{
"path": "README_FR.md",
"chars": 7598,
"preview": "# TikHub API Python SDK\n\n<p align=\"center\">\n <a href=\"https://github.com/TikHub/TikHub-API-Python-SDK/stargazers\"><img "
},
{
"path": "README_JP.md",
"chars": 5655,
"preview": "# TikHub API Python SDK\n\n<p align=\"center\">\n <a href=\"https://github.com/TikHub/TikHub-API-Python-SDK/stargazers\"><img "
},
{
"path": "docs/async.md",
"chars": 1901,
"preview": "# Async\n\nThe SDK is async-first. `AsyncTikHub` has the **same API surface** as `TikHub`, just with `await` in front of e"
},
{
"path": "docs/authentication.md",
"chars": 1717,
"preview": "# Authentication\n\nTikHub uses bearer-token authentication. The SDK supports exactly this — no API-key-in-query, no basic"
},
{
"path": "docs/changelog.md",
"chars": 151,
"preview": "# Changelog\n\nThe full changelog lives at [`CHANGELOG.md`](https://github.com/TikHub/TikHub-API-Python-SDK-V2/blob/main/C"
},
{
"path": "docs/cli.md",
"chars": 1595,
"preview": "# CLI\n\nThe `tikhub` package ships an optional command-line wrapper for ad-hoc data extraction. Install it with the `cli`"
},
{
"path": "docs/errors.md",
"chars": 2550,
"preview": "# Errors\n\nEvery HTTP failure becomes a typed exception that carries the original request, the parsed response body, and "
},
{
"path": "docs/index.md",
"chars": 2707,
"preview": "# tikhub\n\n> Modern Python SDK for the [TikHub](https://tikhub.io) social-media data API.\n\n`tikhub` is a hand-architected"
},
{
"path": "docs/logging.md",
"chars": 1688,
"preview": "# Logging\n\nThe SDK uses the standard library `logging` module under the `tikhub.*` namespace. It never installs handlers"
},
{
"path": "docs/migrating-from-v2.md",
"chars": 4775,
"preview": "# Migrating from `tikhub_sdk_v2`\n\n`tikhub` (V2.1) is a clean-slate replacement for `tikhub_sdk_v2`. Both packages can be"
},
{
"path": "docs/naming.md",
"chars": 2876,
"preview": "# Naming rules\n\nThe SDK is mechanically derived from the TikHub OpenAPI spec. There are exactly **two rules** that deter"
},
{
"path": "docs/pagination.md",
"chars": 1862,
"preview": "# Pagination\n\nThe SDK ships three paginator classes that cover every list-style endpoint in the spec:\n\n| Pattern | Class"
},
{
"path": "docs/quickstart.md",
"chars": 3285,
"preview": "# Quickstart\n\nA 5-minute tour of the `tikhub` SDK.\n\n## Install\n\n```bash\npip install tikhub\n```\n\nRequires Python 3.9+.\n\n#"
},
{
"path": "docs/reference.md",
"chars": 168805,
"preview": "# API reference\n\nAll **1010** endpoints across **52** resources, generated from `spec/openapi.json` (V5.3.2).\n\nMethod na"
},
{
"path": "docs/retries.md",
"chars": 1776,
"preview": "# Retries & rate limits\n\nThe SDK automatically retries transient failures so your application code doesn't need to.\n\n## "
},
{
"path": "examples/README.md",
"chars": 5488,
"preview": "# Examples\n\nRunnable example scripts for every resource in the SDK.\n\n## Quickstart\n\nSet your API key and run any example"
},
{
"path": "examples/bilibili_app.py",
"chars": 3167,
"preview": "\"\"\"Example: Bilibili-App-API\n\nSDK attribute: ``client.bilibili_app``\nEndpoints: 11\n\nUsage::\n\n python examples/bilibil"
},
{
"path": "examples/bilibili_web.py",
"chars": 8353,
"preview": "\"\"\"Example: Bilibili-Web-API\n\nSDK attribute: ``client.bilibili_web``\nEndpoints: 30\n\nUsage::\n\n python examples/bilibil"
},
{
"path": "examples/demo.py",
"chars": 2664,
"preview": "\"\"\"Example: Demo-API\n\nSDK attribute: ``client.demo``\nEndpoints: 9\n\nUsage::\n\n python examples/demo.py\n\nAUTO-GENERATED "
},
{
"path": "examples/douyin_app_v3.py",
"chars": 15560,
"preview": "\"\"\"Example: Douyin-App-V3-API\n\nSDK attribute: ``client.douyin_app_v3``\nEndpoints: 47\n\nUsage::\n\n python examples/douyi"
},
{
"path": "examples/douyin_billboard.py",
"chars": 10090,
"preview": "\"\"\"Example: Douyin-Billboard-API\n\nSDK attribute: ``client.douyin_billboard``\nEndpoints: 31\n\nUsage::\n\n python examples"
},
{
"path": "examples/douyin_creator.py",
"chars": 5203,
"preview": "\"\"\"Example: Douyin-Creator-API\n\nSDK attribute: ``client.douyin_creator``\nEndpoints: 16\n\nUsage::\n\n python examples/dou"
},
{
"path": "examples/douyin_creator_v2.py",
"chars": 5342,
"preview": "\"\"\"Example: Douyin-Creator-V2-API\n\nSDK attribute: ``client.douyin_creator_v2``\nEndpoints: 14\n\nUsage::\n\n python exampl"
},
{
"path": "examples/douyin_search.py",
"chars": 6639,
"preview": "\"\"\"Example: Douyin-Search-API\n\nSDK attribute: ``client.douyin_search``\nEndpoints: 19\n\nUsage::\n\n python examples/douyi"
},
{
"path": "examples/douyin_web.py",
"chars": 24908,
"preview": "\"\"\"Example: Douyin-Web-API\n\nSDK attribute: ``client.douyin_web``\nEndpoints: 76\n\nUsage::\n\n python examples/douyin_web."
},
{
"path": "examples/douyin_xingtu.py",
"chars": 6704,
"preview": "\"\"\"Example: Douyin-Xingtu-API\n\nSDK attribute: ``client.douyin_xingtu``\nEndpoints: 22\n\nUsage::\n\n python examples/douyi"
},
{
"path": "examples/douyin_xingtu_v2.py",
"chars": 6765,
"preview": "\"\"\"Example: Douyin-Xingtu-V2-API\n\nSDK attribute: ``client.douyin_xingtu_v2``\nEndpoints: 21\n\nUsage::\n\n python examples"
},
{
"path": "examples/health_check.py",
"chars": 619,
"preview": "\"\"\"Example: Health-Check\n\nSDK attribute: ``client.health_check``\nEndpoints: 1\n\nUsage::\n\n python examples/health_check"
},
{
"path": "examples/hybrid_parsing.py",
"chars": 686,
"preview": "\"\"\"Example: Hybrid-Parsing\n\nSDK attribute: ``client.hybrid_parsing``\nEndpoints: 1\n\nUsage::\n\n python examples/hybrid_p"
},
{
"path": "examples/instagram_v1.py",
"chars": 7989,
"preview": "\"\"\"Example: Instagram-V1-API\n\nSDK attribute: ``client.instagram_v1``\nEndpoints: 29\n\nUsage::\n\n python examples/instagr"
},
{
"path": "examples/instagram_v2.py",
"chars": 7133,
"preview": "\"\"\"Example: Instagram-V2-API\n\nSDK attribute: ``client.instagram_v2``\nEndpoints: 27\n\nUsage::\n\n python examples/instagr"
},
{
"path": "examples/instagram_v3.py",
"chars": 8801,
"preview": "\"\"\"Example: Instagram-V3-API\n\nSDK attribute: ``client.instagram_v3``\nEndpoints: 32\n\nUsage::\n\n python examples/instagr"
},
{
"path": "examples/ios_shortcut.py",
"chars": 626,
"preview": "\"\"\"Example: iOS-Shortcut\n\nSDK attribute: ``client.ios_shortcut``\nEndpoints: 1\n\nUsage::\n\n python examples/ios_shortcut"
},
{
"path": "examples/kuaishou_app.py",
"chars": 5587,
"preview": "\"\"\"Example: Kuaishou-App-API\n\nSDK attribute: ``client.kuaishou_app``\nEndpoints: 20\n\nUsage::\n\n python examples/kuaisho"
},
{
"path": "examples/kuaishou_web.py",
"chars": 3791,
"preview": "\"\"\"Example: Kuaishou-Web-API\n\nSDK attribute: ``client.kuaishou_web``\nEndpoints: 13\n\nUsage::\n\n python examples/kuaisho"
},
{
"path": "examples/lemon8_app.py",
"chars": 4718,
"preview": "\"\"\"Example: Lemon8-App-API\n\nSDK attribute: ``client.lemon8_app``\nEndpoints: 16\n\nUsage::\n\n python examples/lemon8_app."
},
{
"path": "examples/linkedin_web.py",
"chars": 7078,
"preview": "\"\"\"Example: LinkedIn-Web-API\n\nSDK attribute: ``client.linkedin_web``\nEndpoints: 25\n\nUsage::\n\n python examples/linkedi"
},
{
"path": "examples/pipixia_app.py",
"chars": 4817,
"preview": "\"\"\"Example: PiPiXia-App-API\n\nSDK attribute: ``client.pipixia_app``\nEndpoints: 17\n\nUsage::\n\n python examples/pipixia_a"
},
{
"path": "examples/quickstart.py",
"chars": 2504,
"preview": "\"\"\"Local smoke test for the tikhub SDK.\n\nRun with::\n\n export TIKHUB_API_KEY=\"YOUR_API_KEY\"\n python examples/quicks"
},
{
"path": "examples/reddit_app.py",
"chars": 7641,
"preview": "\"\"\"Example: Reddit-APP-API\n\nSDK attribute: ``client.reddit_app``\nEndpoints: 24\n\nUsage::\n\n python examples/reddit_app."
},
{
"path": "examples/sora2.py",
"chars": 4792,
"preview": "\"\"\"Example: Sora2-API\n\nSDK attribute: ``client.sora2``\nEndpoints: 16\n\nUsage::\n\n python examples/sora2.py\n\nAUTO-GENERA"
},
{
"path": "examples/temp_mail.py",
"chars": 1039,
"preview": "\"\"\"Example: Temp-Mail-API\n\nSDK attribute: ``client.temp_mail``\nEndpoints: 3\n\nUsage::\n\n python examples/temp_mail.py\n\n"
},
{
"path": "examples/threads_web.py",
"chars": 3053,
"preview": "\"\"\"Example: Threads-Web-API\n\nSDK attribute: ``client.threads_web``\nEndpoints: 11\n\nUsage::\n\n python examples/threads_w"
},
{
"path": "examples/tikhub_downloader.py",
"chars": 916,
"preview": "\"\"\"Example: TikHub-Downloader-API\n\nSDK attribute: ``client.tikhub_downloader``\nEndpoints: 2\n\nUsage::\n\n python example"
},
{
"path": "examples/tikhub_user.py",
"chars": 1887,
"preview": "\"\"\"Example: TikHub-User-API\n\nSDK attribute: ``client.tikhub_user``\nEndpoints: 6\n\nUsage::\n\n python examples/tikhub_use"
},
{
"path": "examples/tiktok_ads.py",
"chars": 9297,
"preview": "\"\"\"Example: TikTok-Ads-API\n\nSDK attribute: ``client.tiktok_ads``\nEndpoints: 31\n\nUsage::\n\n python examples/tiktok_ads."
},
{
"path": "examples/tiktok_analytics.py",
"chars": 1534,
"preview": "\"\"\"Example: TikTok-Analytics-API\n\nSDK attribute: ``client.tiktok_analytics``\nEndpoints: 4\n\nUsage::\n\n python examples/"
},
{
"path": "examples/tiktok_app_v3.py",
"chars": 26076,
"preview": "\"\"\"Example: TikTok-App-V3-API\n\nSDK attribute: ``client.tiktok_app_v3``\nEndpoints: 75\n\nUsage::\n\n python examples/tikto"
},
{
"path": "examples/tiktok_creator.py",
"chars": 4959,
"preview": "\"\"\"Example: TikTok-Creator-API\n\nSDK attribute: ``client.tiktok_creator``\nEndpoints: 14\n\nUsage::\n\n python examples/tik"
},
{
"path": "examples/tiktok_shop_web.py",
"chars": 5194,
"preview": "\"\"\"Example: TikTok-Shop-Web-API\n\nSDK attribute: ``client.tiktok_shop_web``\nEndpoints: 15\n\nUsage::\n\n python examples/t"
},
{
"path": "examples/tiktok_web.py",
"chars": 21044,
"preview": "\"\"\"Example: TikTok-Web-API\n\nSDK attribute: ``client.tiktok_web``\nEndpoints: 59\n\nUsage::\n\n python examples/tiktok_web."
},
{
"path": "examples/toutiao_app.py",
"chars": 1786,
"preview": "\"\"\"Example: Toutiao-App-API\n\nSDK attribute: ``client.toutiao_app``\nEndpoints: 5\n\nUsage::\n\n python examples/toutiao_ap"
},
{
"path": "examples/toutiao_web.py",
"chars": 914,
"preview": "\"\"\"Example: Toutiao-Web-API\n\nSDK attribute: ``client.toutiao_web``\nEndpoints: 2\n\nUsage::\n\n python examples/toutiao_we"
},
{
"path": "examples/twitter_web.py",
"chars": 3657,
"preview": "\"\"\"Example: Twitter-Web-API\n\nSDK attribute: ``client.twitter_web``\nEndpoints: 13\n\nUsage::\n\n python examples/twitter_w"
},
{
"path": "examples/wechat_channels.py",
"chars": 3184,
"preview": "\"\"\"Example: WeChat-Channels-API\n\nSDK attribute: ``client.wechat_channels``\nEndpoints: 10\n\nUsage::\n\n python examples/w"
},
{
"path": "examples/wechat_media_platform_web.py",
"chars": 4194,
"preview": "\"\"\"Example: WeChat-Media-Platform-Web-API\n\nSDK attribute: ``client.wechat_media_platform_web``\nEndpoints: 10\n\nUsage::\n\n "
},
{
"path": "examples/weibo_app.py",
"chars": 5244,
"preview": "\"\"\"Example: Weibo-App-API\n\nSDK attribute: ``client.weibo_app``\nEndpoints: 20\n\nUsage::\n\n python examples/weibo_app.py\n"
},
{
"path": "examples/weibo_web.py",
"chars": 3013,
"preview": "\"\"\"Example: Weibo-Web-API\n\nSDK attribute: ``client.weibo_web``\nEndpoints: 11\n\nUsage::\n\n python examples/weibo_web.py\n"
},
{
"path": "examples/weibo_web_v2.py",
"chars": 9216,
"preview": "\"\"\"Example: Weibo-Web-V2-API\n\nSDK attribute: ``client.weibo_web_v2``\nEndpoints: 33\n\nUsage::\n\n python examples/weibo_w"
},
{
"path": "examples/xiaohongshu_app.py",
"chars": 4359,
"preview": "\"\"\"Example: Xiaohongshu-App-API\n\nSDK attribute: ``client.xiaohongshu_app``\nEndpoints: 12\n\nUsage::\n\n python examples/x"
},
{
"path": "examples/xiaohongshu_app_v2.py",
"chars": 7164,
"preview": "\"\"\"Example: Xiaohongshu-App-V2-API\n\nSDK attribute: ``client.xiaohongshu_app_v2``\nEndpoints: 21\n\nUsage::\n\n python exam"
},
{
"path": "examples/xiaohongshu_web.py",
"chars": 6023,
"preview": "\"\"\"Example: Xiaohongshu-Web-API\n\nSDK attribute: ``client.xiaohongshu_web``\nEndpoints: 17\n\nUsage::\n\n python examples/x"
},
{
"path": "examples/xiaohongshu_web_v2.py",
"chars": 5597,
"preview": "\"\"\"Example: Xiaohongshu-Web-V2-API\n\nSDK attribute: ``client.xiaohongshu_web_v2``\nEndpoints: 18\n\nUsage::\n\n python exam"
},
{
"path": "examples/xiaohongshu_web_v3.py",
"chars": 3432,
"preview": "\"\"\"Example: Xiaohongshu-Web-V3-API\n\nSDK attribute: ``client.xiaohongshu_web_v3``\nEndpoints: 11\n\nUsage::\n\n python exam"
},
{
"path": "examples/xigua_app_v2.py",
"chars": 2159,
"preview": "\"\"\"Example: Xigua-App-V2-API\n\nSDK attribute: ``client.xigua_app_v2``\nEndpoints: 7\n\nUsage::\n\n python examples/xigua_ap"
},
{
"path": "examples/youtube_web.py",
"chars": 6618,
"preview": "\"\"\"Example: YouTube-Web-API\n\nSDK attribute: ``client.youtube_web``\nEndpoints: 21\n\nUsage::\n\n python examples/youtube_w"
},
{
"path": "examples/youtube_web_v2.py",
"chars": 6301,
"preview": "\"\"\"Example: YouTube-Web-V2-API\n\nSDK attribute: ``client.youtube_web_v2``\nEndpoints: 19\n\nUsage::\n\n python examples/you"
},
{
"path": "examples/zhihu_web.py",
"chars": 9650,
"preview": "\"\"\"Example: Zhihu-Web-API\n\nSDK attribute: ``client.zhihu_web``\nEndpoints: 34\n\nUsage::\n\n python examples/zhihu_web.py\n"
},
{
"path": "mkdocs.yml",
"chars": 1940,
"preview": "site_name: tikhub\nsite_description: Modern Python SDK for the TikHub social-media data API.\nsite_url: https://docs.tikhu"
},
{
"path": "pyproject.toml",
"chars": 3154,
"preview": "[build-system]\nrequires = [\"hatchling\"]\nbuild-backend = \"hatchling.build\"\n\n[project]\nname = \"tikhub\"\nversion = \"2.1.1\"\nd"
},
{
"path": "scripts/generate_docs.py",
"chars": 4144,
"preview": "#!/usr/bin/env python3\n\"\"\"Generate ``docs/reference.md`` from the SDK source.\n\nWalks every resource exposed on ``TikHub`"
},
{
"path": "scripts/generate_examples.py",
"chars": 11379,
"preview": "#!/usr/bin/env python3\n\"\"\"Generate per-resource example scripts under ``examples/``.\n\nReads ``spec/openapi.json`` and em"
},
{
"path": "scripts/generate_resources.py",
"chars": 20711,
"preview": "#!/usr/bin/env python3\n\"\"\"Generate resource modules from spec/openapi.json.\n\nReads the OpenAPI spec, groups operations b"
},
{
"path": "scripts/refresh_spec.py",
"chars": 2419,
"preview": "#!/usr/bin/env python3\n\"\"\"Pull the latest TikHub OpenAPI spec into spec/openapi.json.\n\nRun from the repo root::\n\n pyt"
},
{
"path": "scripts/test_all_endpoints.py",
"chars": 15979,
"preview": "#!/usr/bin/env python3\n\"\"\"Hit every endpoint in spec/openapi.json with example/default params.\n\nUsage::\n\n export TIKH"
},
{
"path": "scripts/verify_coverage.py",
"chars": 2884,
"preview": "#!/usr/bin/env python3\n\"\"\"Verify the SDK covers every endpoint in spec/openapi.json.\n\nRun from the repo root::\n\n pyth"
},
{
"path": "spec/openapi.json",
"chars": 2427674,
"preview": "{\"openapi\":\"3.1.0\",\"info\":{\"title\":\"TikHub Douyin/TikTok/Xiaohongshu/Lemon8/Bilibili/Sora2/Kuaishou/Pipixia/Weibo/WeChat"
},
{
"path": "src/tikhub/__init__.py",
"chars": 1486,
"preview": "\"\"\"Modern Python SDK for the TikHub social-media data API.\n\nQuick start::\n\n from tikhub import TikHub\n\n with TikHu"
},
{
"path": "src/tikhub/_auth.py",
"chars": 842,
"preview": "\"\"\"Bearer-token authentication for the TikHub API.\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import G"
},
{
"path": "src/tikhub/_base_client.py",
"chars": 13345,
"preview": "\"\"\"Sync and async base clients.\n\nThese hold the httpx client and own the single ``_request`` method that\nevery resource "
},
{
"path": "src/tikhub/_errors.py",
"chars": 5889,
"preview": "\"\"\"Exception hierarchy for the TikHub SDK.\n\nSee PLAN_V3.md §10. Every HTTP failure becomes a typed exception that carrie"
},
{
"path": "src/tikhub/_logging.py",
"chars": 1239,
"preview": "\"\"\"Logger namespaces used throughout the SDK.\n\nThe SDK never installs handlers — it only emits records under\n``tikhub.*`"
},
{
"path": "src/tikhub/_pagination.py",
"chars": 5333,
"preview": "\"\"\"Pagination helpers.\n\nThe TikHub API uses three pagination patterns:\n\n* Cursor / max_cursor + has_more — most Douyin &"
},
{
"path": "src/tikhub/_rate_limit.py",
"chars": 1333,
"preview": "\"\"\"Helpers for parsing TikHub rate-limit headers.\"\"\"\n\nfrom __future__ import annotations\n\nimport time\nfrom collections.a"
},
{
"path": "src/tikhub/_retries.py",
"chars": 2144,
"preview": "\"\"\"Retry policy.\n\nWe retry on transient failures only:\n\n- ``TikHubConnectionError`` (network errors, timeouts, proxy iss"
},
{
"path": "src/tikhub/_types.py",
"chars": 810,
"preview": "\"\"\"Internal type aliases and sentinels.\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import Any, Final\n\n\nclass _N"
},
{
"path": "src/tikhub/_version.py",
"chars": 73,
"preview": "\"\"\"Single source of truth for the SDK version.\"\"\"\n\n__version__ = \"2.1.1\"\n"
},
{
"path": "src/tikhub/async_client.py",
"chars": 8595,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/cli/__init__.py",
"chars": 369,
"preview": "\"\"\"Command-line wrapper for the TikHub SDK.\n\nUsage::\n\n tikhub health\n tikhub fetch https://v.douyin.com/abc/\n t"
},
{
"path": "src/tikhub/cli/__main__.py",
"chars": 151,
"preview": "\"\"\"``python -m tikhub.cli`` entry point.\"\"\"\n\nfrom __future__ import annotations\n\nfrom tikhub.cli.main import app\n\nif __n"
},
{
"path": "src/tikhub/cli/main.py",
"chars": 2967,
"preview": "\"\"\"``tikhub`` console script.\n\nThe CLI is intentionally minimal: it covers the small set of commands a\nhuman might run f"
},
{
"path": "src/tikhub/client.py",
"chars": 7745,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/models/__init__.py",
"chars": 380,
"preview": "\"\"\"Public model surface.\n\nPhase 0 only ships shared envelope types. Phase 1 wires the codegen pipeline\nand starts popula"
},
{
"path": "src/tikhub/models/_common.py",
"chars": 1240,
"preview": "\"\"\"Shared envelope types used across many TikHub responses.\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import A"
},
{
"path": "src/tikhub/py.typed",
"chars": 0,
"preview": ""
},
{
"path": "src/tikhub/resources/__init__.py",
"chars": 393,
"preview": "\"\"\"Resource modules - one file per OpenAPI tag.\n\nPhase 0 ships ``health_check`` only. Phases 2-5 add the remaining 50 re"
},
{
"path": "src/tikhub/resources/_base.py",
"chars": 705,
"preview": "\"\"\"Base classes for resources.\n\nResources are dumb. A resource method does three things: build kwargs, call\n``self._clie"
},
{
"path": "src/tikhub/resources/bilibili_app.py",
"chars": 11302,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/bilibili_web.py",
"chars": 26078,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/demo.py",
"chars": 6139,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/douyin_app_v3.py",
"chars": 51764,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/douyin_billboard.py",
"chars": 37114,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/douyin_creator.py",
"chars": 19020,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/douyin_creator_v2.py",
"chars": 17846,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/douyin_search.py",
"chars": 31744,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/douyin_web.py",
"chars": 79626,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/douyin_xingtu.py",
"chars": 20950,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/douyin_xingtu_v2.py",
"chars": 24740,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/health_check.py",
"chars": 1293,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/hybrid_parsing.py",
"chars": 1817,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/instagram_v1.py",
"chars": 26526,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/instagram_v2.py",
"chars": 25940,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/instagram_v3.py",
"chars": 33026,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/ios_shortcut.py",
"chars": 1325,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/kuaishou_app.py",
"chars": 18510,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/kuaishou_web.py",
"chars": 11646,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/lemon8_app.py",
"chars": 14130,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/linkedin_web.py",
"chars": 30004,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/pipixia_app.py",
"chars": 15762,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/reddit_app.py",
"chars": 29750,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/sora2.py",
"chars": 15930,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/temp_mail.py",
"chars": 2831,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/threads_web.py",
"chars": 10036,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/tikhub_downloader.py",
"chars": 2003,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/tikhub_user.py",
"chars": 4687,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/tiktok_ads.py",
"chars": 40524,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/tiktok_analytics.py",
"chars": 4341,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/tiktok_app_v3.py",
"chars": 84218,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/tiktok_creator.py",
"chars": 17942,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/tiktok_interaction.py",
"chars": 10845,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/tiktok_shop_web.py",
"chars": 18926,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/tiktok_web.py",
"chars": 56086,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/toutiao_app.py",
"chars": 4779,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/toutiao_web.py",
"chars": 2363,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/twitter_web.py",
"chars": 13096,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/wechat_channels.py",
"chars": 9628,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/wechat_media_platform_web.py",
"chars": 10176,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/weibo_app.py",
"chars": 18250,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/weibo_web.py",
"chars": 9644,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/weibo_web_v2.py",
"chars": 31686,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/xiaohongshu_app.py",
"chars": 14470,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/xiaohongshu_app_v2.py",
"chars": 26400,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/xiaohongshu_web.py",
"chars": 18172,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/xiaohongshu_web_v2.py",
"chars": 16974,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/xiaohongshu_web_v3.py",
"chars": 10892,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/xigua_app_v2.py",
"chars": 7195,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/youtube_web.py",
"chars": 28140,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/youtube_web_v2.py",
"chars": 25780,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "src/tikhub/resources/zhihu_web.py",
"chars": 36192,
"preview": "# AUTO-GENERATED by scripts/generate_resources.py - do not edit by hand.\n# Run the script again to refresh from spec/ope"
},
{
"path": "tests/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "tests/conftest.py",
"chars": 359,
"preview": "\"\"\"Shared pytest fixtures.\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Iterator\n\nimport pytest\n\n"
},
{
"path": "tests/unit/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "tests/unit/test_cli.py",
"chars": 5558,
"preview": "\"\"\"Tests for the optional ``tikhub`` CLI.\n\nThe CLI is a thin typer wrapper around the SDK. These tests use typer's\n``Cli"
},
{
"path": "tests/unit/test_client_construction.py",
"chars": 2090,
"preview": "\"\"\"Constructor and configuration tests for ``TikHub`` / ``AsyncTikHub``.\"\"\"\n\nfrom __future__ import annotations\n\nimport "
},
{
"path": "tests/unit/test_errors.py",
"chars": 3256,
"preview": "\"\"\"Status-code → exception class mapping tests.\"\"\"\n\nfrom __future__ import annotations\n\nimport json\n\nimport httpx\nimport"
},
{
"path": "tests/unit/test_generated_resources.py",
"chars": 8503,
"preview": "\"\"\"Smoke tests for the generated resource layer.\n\nThese tests prove the codegen produces a working SDK without making an"
},
{
"path": "tests/unit/test_health_check.py",
"chars": 2209,
"preview": "\"\"\"End-to-end test of the foundation: ``client.health_check.check()``.\n\nUses ``httpx.MockTransport`` to fake the network"
},
{
"path": "tests/unit/test_pagination.py",
"chars": 1653,
"preview": "\"\"\"Pagination scaffolding tests.\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import Any\n\nfrom tikhub import Curs"
},
{
"path": "tests/unit/test_retries.py",
"chars": 3029,
"preview": "\"\"\"Retry-policy tests.\"\"\"\n\nfrom __future__ import annotations\n\nimport json\nfrom itertools import count\n\nimport httpx\nimp"
}
]
About this extraction
This page contains the full source code of the TikHubIO/TikHub-API-Python-SDK GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 167 files (4.0 MB), approximately 1.1M tokens, and a symbol index with 2422 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.