/Douyin_TikTok_Download_API

🚀「Douyin_TikTok_Download_API」是一个开箱即用的高性能异步抖音、快手、TikTok、Bilibili数据爬取工具,支持API调用,在线批量解析及下载。

Primary LanguagePythonApache License 2.0Apache-2.0

Douyin_TikTok_Download_API(抖音/TikTok API)

English | 简体中文

🚀「Douyin_TikTok_Download_API」是一个开箱即用的高性能异步抖音|TikTok|Bilibili数据爬取工具,支持API调用,在线批量解析及下载。

GitHub license Release Version GitHub Star GitHub Fork GitHub issues GitHub closed issues GitHub Repo size
PyPI v PyPI wheel PyPI dm PyPI pyversions
API status TikHub-API status
爱发电 Kofi Patreon

赞助商

这些赞助商已付费放置在这里,Douyin_TikTok_Download_API 项目将永远免费且开源。如果您希望成为该项目的赞助商,请查看我的 GitHub 赞助商页面

TikHub.io - Global Social Data & API Marketplace

TikHub.io

Your Ultimate Social Media Data & API Marketplace

Professional data solutions for Douyin, Xiaohongshu, TikTok, Instagram, YouTube, Twitter, and more.
Real-time Data | Flexible APIs | Seamless Integration | Competitive Pricing with Discounts

Discover TikHub.io Marketplace
Buy and sell custom APIs, services, and social media solutions.
Join a thriving ecosystem of developers, businesses, and content creators.

Trusted by leading global influencer marketing and social media intelligence platforms

👻介绍

🚨如需使用私有服务器运行本项目,请参考:部署准备工作, Docker部署, 一键部署

本项目是基于 PyWebIOFastAPIHTTPX,快速异步的抖音/TikTok数据爬取工具,并通过Web端实现在线批量解析以及下载无水印视频或图集,数据爬取API,iOS快捷指令无水印下载等功能。你可以自己部署或改造本项目实现更多功能,也可以在你的项目中直接调用scraper.py或安装现有的pip包作为解析库轻松爬取数据等.....

一些简单的运用场景:

下载禁止下载的视频,进行数据分析,iOS无水印下载(搭配iOS自带的快捷指令APP 配合本项目API实现应用内下载或读取剪贴板下载)等.....

🔊 V4 版本备注

  • 感兴趣一起写这个项目的给请加微信Evil0ctal备注github项目重构,大家可以在群里互相交流学习,不允许发广告以及违法的东西,纯粹交朋友和技术交流。
  • 本项目使用X-Bogus算法以及A_Bogus算法请求抖音和TikTok的Web API。
  • 由于Douyin的风控,部署完本项目后请在浏览器中获取Douyin网站的Cookie然后在config.yaml中进行替换。
  • 请在提出issue之前先阅读下方的文档,大多数问题的解决方法都会包含在文档中。
  • 本项目是完全免费的,但使用时请遵守:Apache-2.0 license

🔖TikHub.io API

TikHub.io是一个API平台,提供包括Douyin、TikTok在内的各种公开数据接口,如果您想支持 Douyin_TikTok_Download_API 项目的开发,我们强烈建议您选择TikHub.io

特点:

📦 开箱即用

简化使用流程,利用封装好的SDK迅速开展开发工作。所有API接口均依据RESTful架构设计,并使用OpenAPI规范进行描述和文档化,附带示例参数,确保调用更加简便。

💰 成本优势

不预设套餐限制,没有月度使用门槛,所有消费按实际使用量即时计费,并且根据用户每日的请求量进行阶梯式计费,同时可以通过每日签到在用户后台进行签到获取免费的额度,并且这些免费额度不会过期。

⚡️ 快速支持

我们有一个庞大的Discord社区服务器,管理员和其他用户会在服务器中快速的回复你,帮助你快速解决当前的问题。

🎉 拥抱开源

TikHub的部分源代码会开源在Github上,并且会赞助一些开源项目的作者。

链接:

🖥演示站点: 我很脆弱...请勿压测(·•᷄ࡇ•᷅ )

😾演示站点的在线下载功能已关闭,并且由于Cookie原因,Douyin的解析以及API服务在Demo站点无法保证可用性。

🍔Web APP: https://douyin.wtf/

🍟API Document: https://douyin.wtf/docs

🌭TikHub API Document: https://api.tikhub.io/docs

💾iOS Shortcut(快捷指令): Shortcut release

📦️桌面端下载器(仓库推荐):

⚗️技术栈

/crawlers

  • 向不同平台的API提交请求并取回数据,处理后返回字典(dict),支持异步。

/app/api

  • 获得请求参数并使用Crawlers相关类处理数据后以JSON形式返回,视频下载,配合iOS快捷指令实现快速调用,支持异步。

/app/web

  • 使用PyWebIO制作的简易Web程序,将网页输入的值进行处理后使用Crawlers相关类处理接口输出相关数据在网页上。

以上文件的参数大多可在对应的config.yaml中进行修改

💡项目文件结构

./Douyin_TikTok_Download_API
├─app
│  ├─api
│  │  ├─endpoints
│  │  └─models
│  ├─download
│  └─web
│      └─views
└─crawlers
  ├─bilibili
  │  └─web  
  ├─douyin
  │  └─web
  ├─hybrid
  ├─tiktok
  │  ├─app
  │  └─web
  └─utils

✨支持功能:

  • 网页端批量解析(支持抖音/TikTok混合解析)
  • 在线下载视频或图集。
  • 制作pip包方便快速导入你的项目
  • iOS快捷指令快速调用API实现应用内下载无水印视频/图集
  • 完善的API文档(Demo/演示)
  • 丰富的API接口:
    • 抖音网页版API

      • 视频数据解析
      • 获取用户主页作品数据
      • 获取用户主页喜欢作品数据
      • 获取用户主页收藏作品数据
      • 获取用户主页信息
      • 获取用户合辑作品数据
      • 获取用户直播流数据
      • 获取指定用户的直播流数据
      • 获取直播间送礼用户排行榜
      • 获取单个视频评论数据
      • 获取指定视频的评论回复数据
      • 生成msToken
      • 生成verify_fp
      • 生成s_v_web_id
      • 使用接口网址生成X-Bogus参数
      • 使用接口网址生成A_Bogus参数
      • 提取单个用户id
      • 提取列表用户id
      • 提取单个作品id
      • 提取列表作品id
      • 提取列表直播间号
      • 提取列表直播间号
    • TikTok网页版API

      • 视频数据解析
      • 获取用户主页作品数据
      • 获取用户主页喜欢作品数据
      • 获取用户主页信息
      • 获取用户主页粉丝数据
      • 获取用户主页关注数据
      • 获取用户主页合辑作品数据
      • 获取用户主页搜藏数据
      • 获取用户主页播放列表数据
      • 获取单个视频评论数据
      • 获取指定视频的评论回复数据
      • 生成msToken
      • 生成ttwid
      • 使用接口网址生成X-Bogus参数
      • 提取单个用户sec_user_id
      • 提取列表用户sec_user_id
      • 提取单个作品id
      • 提取列表作品id
      • 获取用户unique_id
      • 获取列表unique_id
    • 哔哩哔哩网页版API

      • 获取单个视频详情信息
      • 获取视频流地址
      • 获取用户发布视频作品数据
      • 获取用户所有收藏夹信息
      • 获取指定收藏夹内视频数据
      • 获取指定用户的信息
      • 获取综合热门视频信息
      • 获取指定视频的评论
      • 获取视频下指定评论的回复
      • 获取指定用户动态
      • 获取视频实时弹幕
      • 获取指定直播间信息
      • 获取直播间视频流
      • 获取指定分区正在直播的主播
      • 获取所有直播分区列表
      • 通过bv号获得视频分p信息

📦调用解析库(已废弃需要更新):

💡PyPi:https://pypi.org/project/douyin-tiktok-scraper/

安装解析库:pip install douyin-tiktok-scraper

import asyncio
from douyin_tiktok_scraper.scraper import Scraper

api = Scraper()

async def hybrid_parsing(url: str) -> dict:
    # Hybrid parsing(Douyin/TikTok URL)
    result = await api.hybrid_parsing(url)
    print(f"The hybrid parsing result:\n {result}")
    return result

asyncio.run(hybrid_parsing(url=input("Paste Douyin/TikTok/Bilibili share URL here: ")))

🗺️支持的提交格式:

💡提示:包含但不仅限于以下例子,如果遇到链接解析失败请开启一个新 issue

  • 抖音分享口令 (APP内复制)
7.43 pda:/ 让你在几秒钟之内记住我  https://v.douyin.com/L5pbfdP/ 复制此链接,打开Dou音搜索,直接观看视频!
  • 抖音短网址 (APP内复制)
https://v.douyin.com/L4FJNR3/
  • 抖音正常网址 (网页版复制)
https://www.douyin.com/video/6914948781100338440
  • 抖音发现页网址 (APP复制)
https://www.douyin.com/discover?modal_id=7069543727328398622
  • TikTok短网址 (APP内复制)
https://www.tiktok.com/t/ZTR9nDNWq/
  • TikTok正常网址 (网页版复制)
https://www.tiktok.com/@evil0ctal/video/7156033831819037994
  • 抖音/TikTok批量网址(无需使用符合隔开)
https://v.douyin.com/L4NpDJ6/
https://www.douyin.com/video/7126745726494821640
2.84 nqe:/ 骑白马的也可以是公主%%百万转场变身https://v.douyin.com/L4FJNR3/ 复制此链接,打开Dou音搜索,直接观看视频!
https://www.tiktok.com/t/ZTR9nkkmL/
https://www.tiktok.com/t/ZTR9nDNWq/
https://www.tiktok.com/@evil0ctal/video/7156033831819037994

🛰️API文档

API文档:

本地:http://localhost/docs

在线:https://api.douyin.wtf/docs

API演示:

  • 爬取视频数据(TikTok或Douyin混合解析) https://api.douyin.wtf/api/hybrid/video_data?url=[视频链接/Video URL]&minimal=false
  • 下载视频/图集(TikTok或Douyin混合解析) https://api.douyin.wtf/api/download?url=[视频链接/Video URL]&prefix=true&with_watermark=false

更多演示请查看文档内容......

⚠️部署前的准备工作(请仔细阅读):

  • 你需要自行解决爬虫Cookie风控问题,否则可能会导致接口无法使用,修改完配置文件后需要重启服务才能生效,并且最好使用已经登录过的账号的Cookie。
    • 抖音网页端Cookie(自行获取并替换下面配置文件中的Cookie):
    • Cookie: __ac_nonce=06629f03b000ca74fd5d0; __ac_signature=_02B4Z6wo00f018OnaAwAAIDCyYGzp89TogfDh2yAAJbJ17; s_v_web_id=verify_lvetxr14_jPt0ZofI_p5Nw_44FG_BGSL_SVodoPoGUlGG; ttwid=1%7CtCoZxPEZnSPKZQhxavM2S9G9udonQu1yTp4eeGEhmOU%7C1714024522%7Ce9786696e4a0d08ac93356835424aece59d214e5f5c1d054dcb62cc18a48b829; IsDouyinActive=true; home_can_add_dy_2_desktop=%220%22; dy_swidth=1463; dy_sheight=915; stream_recommend_feed_params=%22%7B%5C%22cookie_enabled%5C%22%3Atrue%2C%5C%22screen_width%5C%22%3A1463%2C%5C%22screen_height%5C%22%3A915%2C%5C%22browser_online%5C%22%3Atrue%2C%5C%22cpu_core_num%5C%22%3A32%2C%5C%22device_memory%5C%22%3A8%2C%5C%22downlink%5C%22%3A7.85%2C%5C%22effective_type%5C%22%3A%5C%224g%5C%22%2C%5C%22round_trip_time%5C%22%3A100%7D%22
    • TikTok网页端Cookie(自行获取并替换下面配置文件中的Cookie):
    • Cookie: tt_csrf_token=YmksDB6a-h4cT2fF7JpORI2O9UBMCWjsntIc; ttwid=1%7C0FVb9fFc-sjDG2UdJwdC1AirqYozQ0xfbAS4N72vN2Y%7C1713886256%7C78a9d83445b82b73ca8d4e0cf024ea6cdf1329b7f3866c826b0a69a300ebce46; ak_bmsc=51B1D53481A3A4E4D0CEFF2BCF622DA2~000000000000000000000000000000~YAAQ7uIsF6c4j+SOAQAAANmUCxfRGVXZ4D9xnO97l1yDw0OWyomnVkNY7IUKaggUja0kQzFQ+WG4xaxBcPt0AN0n26KeHXGGKgHYpHPUMUBHGHQGDtE4RLyy7U+LPbSJCqVaSDiPuzxHht0YUIbWogvrFmBfkP4ohcmjkZxWtEI9qQ4Whaobb2CFHGdKNt0zlVNBjJQ3uYRAvUe12zSBynQB18y6QhE8goneRkCEw9VIeft2pFIwNQ8tkWWEjDt6wHNaqeND7eASg5WLzYskWbTt6bPAOhSNRLJ38HZrOB5QNg+xxN5uuCSYmjMXCl8SkvQr91pInmOng+V898FLLBQtefs95whvbpfE0mKwBk5Cz2TkkHcUJa/IoC0CLmNqoEk3AtKxpw/J; tt_chain_token=46Xkv2ukMzyJ2e7XU7y0AQ==; bm_sv=A2E67B998DE8E6A4F1C2C02485467446~YAAQ7uIsF6g4j+SOAQAABdqUCxf1J/K4dYG0k7bbw2m5rFujdlSqMoCKDubu4R602nFvbY6zWC5puJczBv3IXwJJRpQxxR03wDCMVlKTCqjQvgDs8BoCuoNQxfY2fdS+F3bKut2lxXPQ2qctqz4kHBrgspJArHn/zu/IuKCIeSzmV4KcyxW6Zvw3/xMRA0MeHgyuHsTRBS+VrFk8Ju2NbJWWC8uSHbLCM/dhFT7/ktw8RE30r24XpQmhLpVTsUSC~1; tiktok_webapp_theme=light; msToken=ySXERzKCE0QUG0cCg6TWLw3wfEB-6kh6kAfuzhzjcQvmV1jBFloSgIsT9xk-QXFVdI99U1Fqb9mhUpIOldoDkjdZwskB8rvt66MHZaHnvBRZRtOKtTYsWT8osDyQXDVZWdPkvyE598h9; passport_csrf_token=1a47d95ebf68fc3648b0018ee75afc9f; passport_csrf_token_default=1a47d95ebf68fc3648b0018ee75afc9f; perf_feed_cache={%22expireTimestamp%22:1714057200000%2C%22itemIds%22:[%227346425092966206766%22%2C%227353812964207594795%22%2C%227343343741916171563%22]}; msToken=yWwG-ITrCnjJbx5ltBa9FTXdCImOJrl-wtQJSQH3afeEumWZcbo_qcrF6F7-NjYcrG6JVxtJiOU208REZeCSgXEZrrs5_65K741fQ7PSzCGOhz6vUyycq3Xvj4Mu-S0kJ6SqyltHnpJp
  • 演示站点的在线下载功能被我关掉了,有人下的视频巨大无比直接给我服务器干崩了,你可以在网页解析结果页面右键保存视频...
  • 演示站点的Cookie是我自己的,不保证长期有效,只起到演示作用,自己部署的话请自行获取Cookie。
  • 需要TikTok Web API返回的视频链接直接访问会发生HTTP 403错误,请使用本项目API中的/api/download接口对TikTok 视频进行下载,这个接口在演示站点中已经被手动关闭了,需要你自行部署本项目。
  • 这里有一个视频教程可以参考:https://www.bilibili.com/video/BV1vE421j7NR/

💻部署(方式一 Linux)

💡提示:最好将本项目部署至美国地区的服务器,否则可能会出现奇怪的BUG。

推荐大家使用Digitalocean的服务器,因为可以白嫖。

使用我的邀请链接注册,你可以获得$200的credit,当你在上面消费$25时,我也可以获得$25的奖励。

我的邀请链接:

https://m.do.co/c/9f72a27dec35

使用脚本一键部署本项目

  • 本项目提供了一键部署脚本,可以在服务器上快速部署本项目。
  • 脚本是在Ubuntu 20.04 LTS上测试的,其他系统可能会有问题,如果有问题请自行解决。
  • 使用wget命令下载install.sh至服务器并运行
wget -O install.sh https://raw.githubusercontent.com/Evil0ctal/Douyin_TikTok_Download_API/main/bash/install.sh && sudo bash install.sh

开启/停止服务

  • 使用以下命令来控制服务的运行或停止:
    • sudo systemctl start Douyin_TikTok_Download_API.service
    • sudo systemctl stop Douyin_TikTok_Download_API.service

开启/关闭开机自动运行

  • 使用以下命令来设置服务开机自动运行或取消开机自动运行:
    • sudo systemctl enable Douyin_TikTok_Download_API.service
    • sudo systemctl disable Douyin_TikTok_Download_API.service

更新项目

  • 项目更新时,确保更新脚本在虚拟环境中执行,更新所有依赖。进入项目bash目录并运行update.sh:
  • cd /www/wwwroot/Douyin_TikTok_Download_API/bash && sudo bash update.sh

💽部署(方式二 Docker)

💡提示:Docker部署是最简单的部署方式,适合不熟悉Linux的用户,这种方法适合保证环境一致性、隔离性和快速设置。 请使用能正常访问Douyin或TikTok的服务器,否则可能会出现奇怪的BUG。

准备工作

开始之前,请确保您的系统已安装Docker。如果还未安装Docker,可以从Docker官方网站下载并安装。

步骤1:拉取Docker镜像

首先,从Docker Hub拉取最新的Douyin_TikTok_Download_API镜像。

docker pull evil0ctal/douyin_tiktok_download_api:latest

如果需要,可以替换latest为你需要部署的具体版本标签。

步骤2:运行Docker容器

拉取镜像后,您可以从此镜像启动一个容器。以下是运行容器的命令,包括基本配置:

docker run -d --name douyin_tiktok_api -p 80:80 evil0ctal/douyin_tiktok_download_api

这个命令的每个部分作用如下:

  • -d:在后台运行容器(分离模式)。
  • --name douyin_tiktok_api :将容器命名为douyin_tiktok_api
  • -p 80:80:将主机上的80端口映射到容器的80端口。根据您的配置或端口可用性调整端口号。
  • evil0ctal/douyin_tiktok_download_api:要使用的Docker镜像名称。

步骤3:验证容器是否运行

使用以下命令检查您的容器是否正在运行:

docker ps

这将列出所有活动容器。查找douyin_tiktok_api 以确认其正常运行。

步骤4:访问应用程序

容器运行后,您应该能够通过http://localhost或API客户端访问Douyin_TikTok_Download_API。如果配置了不同的端口或从远程位置访问,请调整URL。

可选:自定义Docker命令

对于更高级的部署,您可能希望自定义Docker命令,包括环境变量、持久数据的卷挂载或其他Docker参数。这是一个示例:

docker run -d --name douyin_tiktok_api -p 80:80 \
  -v /path/to/your/data:/data \
  -e MY_ENV_VAR=my_value \
  evil0ctal/douyin_tiktok_download_api
  • -v /path/to/your/data:/data:将主机上的/path/to/your/data目录挂载到容器的/data目录,用于持久化或共享数据。
  • -e MY_ENV_VAR=my_value:在容器内设置环境变量MY_ENV_VAR,其值为my_value

配置文件修改

项目的大部分配置可以在以下几个目录中的config.yaml文件进行修改:

  • /crawlers/douyin/web/config.yaml
  • /crawlers/tiktok/web/config.yaml
  • /crawlers/tiktok/app/config.yaml

步骤5:停止并移除容器

需要停止和移除容器时,使用以下命令:

# Stop
docker stop douyin_tiktok_api 

# Remove
docker rm douyin_tiktok_api

📸截图

API速度测试(对比官方API)

🔎点击展开截图

抖音官方API:

本项目API:

TikTok官方API:

本项目API:


项目界面

🔎点击展开截图

Web主界面:

Web main interface:


📜 Star历史

Star History Chart

Apache-2.0 license

Start: 2021/11/06

GitHub: @Evil0ctal