Skip to content

Commit

Permalink
🎨: Add Douyin Web A_Bogus encryption algorithm Support
Browse files Browse the repository at this point in the history
  • Loading branch information
Evil0ctal committed Jun 14, 2024
1 parent 5fffdfa commit 5b72b41
Show file tree
Hide file tree
Showing 16 changed files with 861 additions and 112 deletions.
74 changes: 50 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,38 @@
## 🔊 V4 版本备注

- 感兴趣一起写这个项目的给请加微信`Evil0ctal`备注github项目重构,大家可以在群里互相交流学习,不允许发广告以及违法的东西,纯粹交朋友和技术交流。
- 本项目使用的`X-Bogus`算法依旧可以正常调用Douyin以及TikTok的API,`A-Bogus`算法暂时不会开源
- 本项目使用`X-Bogus`算法以及`A_Bogus`算法请求抖音和TikTok的Web API
- 由于Douyin的风控,部署完本项目后请在**浏览器中获取Douyin网站的Cookie然后在config.yaml中进行替换。**
- 请在提出issue之前先阅读下方的文档,大多数问题的解决方法都会包含在文档中。
- 本项目是完全免费的,但使用时请遵守:[Apache-2.0 license](https://github.com/Evil0ctal/Douyin_TikTok_Download_API?tab=Apache-2.0-1-ov-file#readme)
- 本项目有一个闭源的分支版本,包含更多的接口和服务,详情请查看下方的信息。

## 🔖TikHub.io API

[TikHub.io](https://beta-web.tikhub.io/en-us/users/signin)是一个API平台,提供包括Douyin、TikTok在内的各种公开数据接口,如果您想支持 [Douyin_TikTok_Download_API](https://github.com/Evil0ctal/Douyin_TikTok_Download_API) 项目的开发,我们强烈建议您选择[TikHub.io](https://beta-web.tikhub.io/en-us/users/signin)

#### 特点:

> 📦 开箱即用
省去繁琐的使用流程,使用封装好的SDK快速进行开发,让调用变得更简单,所有API接口都按照OpenAPI规范进行编写,并且附带示例参数。

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

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

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

#### 链接:

- Discord: [TikHub Discord](https://discord.com/invite/aMEAS8Xsvz)
- Free Douyin/TikTok API: [TikHub Beta API](https://beta.tikhub.io/)
- Register: [TikHub signup](https://beta-web.tikhub.io/en-us/users/signup)
- API Docs: [TikHub API Docs](https://api.tikhub.io/)

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

Expand Down Expand Up @@ -95,32 +120,33 @@

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

## ✨支持功能:

- 网页端批量解析(支持抖音/TikTok混合解析)
- 在线下载视频或图集。
- 制作[pip包](https://pypi.org/project/douyin-tiktok-scraper/)方便快速导入你的项目
- [iOS快捷指令快速调用API](https://apps.apple.com/cn/app/%E5%BF%AB%E6%8D%B7%E6%8C%87%E4%BB%A4/id915249334)实现应用内下载无水印视频/图集
- 完善的API文档([Demo/演示](https://api.douyin.wtf/docs))
- 丰富的API接口:
- 抖音网页版API

- [x] 视频数据解析
- [x] 获取用户主页作品数据
- [x] 获取用户主页喜欢作品数据
Expand All @@ -136,14 +162,15 @@
- [x] 生成verify_fp
- [x] 生成s_v_web_id
- [x] 使用接口网址生成X-Bogus参数
- [x] 使用接口网址生成A_Bogus参数
- [x] 提取单个用户id
- [x] 提取列表用户id
- [x] 提取单个作品id
- [x] 提取列表作品id
- [x] 提取列表直播间号
- [x] 提取列表直播间号

- TikTok网页版API

- [x] 视频数据解析
- [x] 获取用户主页作品数据
- [x] 获取用户主页喜欢作品数据
Expand All @@ -165,7 +192,6 @@
- [x] 获取用户unique_id
- [x] 获取列表unique_id


---

## 📦调用解析库(已废弃需要更新):
Expand Down Expand Up @@ -257,16 +283,16 @@ https://www.tiktok.com/@evil0ctal/video/7156033831819037994

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


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

- 你需要自行解决爬虫Cookie风控问题,否则可能会导致接口无法使用。
- 抖音网页端Cookie(自行获取并替换下面配置文件中的Cookie):
- 抖音网页端Cookie(自行获取并替换下面配置文件中的Cookie):
- https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/30e56e5a7f97f87d60b1045befb1f6db147f8590/crawlers/douyin/web/config.yaml#L7
- TikTok网页端Cookie(自行获取并替换下面配置文件中的Cookie):
- https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/30e56e5a7f97f87d60b1045befb1f6db147f8590/crawlers/tiktok/web/config.yaml#L6
- 演示站点的在线下载功能被我关掉了,有人下的视频巨大无比直接给我服务器干崩了,你可以在网页解析结果页面右键保存视频...
- 演示站点的Cookie是我自己的,不保证长期有效,只起到演示作用,自己部署的话请自行获取Cookie。
- 需要TikTok Web API返回的视频链接直接访问会发生HTTP 403错误,请使用本项目API中的`/api/download`接口对TikTok 视频进行下载,这个接口在演示站点中已经被手动关闭了,需要你自行部署本项目。
- 这里有一个**视频教程**可以参考:***[https://www.bilibili.com/video/BV1vE421j7NR/](https://www.bilibili.com/video/BV1vE421j7NR/)***

## 💻部署(方式一 Linux)
Expand Down Expand Up @@ -387,7 +413,7 @@ docker run -d --name douyin_tiktok_api -p 80:80 \
docker stop douyin_tiktok_api

# Remove
docker rm douyin_tiktok_api
docker rm douyin_tiktok_api
```

## 📸截图
Expand Down
42 changes: 42 additions & 0 deletions app/api/endpoints/douyin_web.py
Original file line number Diff line number Diff line change
Expand Up @@ -734,6 +734,48 @@ async def generate_x_bogus(request: Request,
raise HTTPException(status_code=status_code, detail=detail.dict())


# 使用接口地址生成Abogus参数
@router.get("/generate_a_bogus",
response_model=ResponseModel,
summary="使用接口网址生成A-Bogus参数/Generate A-Bogus parameter using API URL")
async def generate_a_bogus(request: Request,
url: str = Query(
example="https://www.douyin.com/aweme/v1/web/aweme/detail/?device_platform=webapp&aid=6383&channel=channel_pc_web&pc_client_type=1&version_code=190500&version_name=19.5.0&cookie_enabled=true&browser_language=zh-CN&browser_platform=Win32&browser_name=Firefox&browser_online=true&engine_name=Gecko&os_name=Windows&os_version=10&platform=PC&screen_width=1920&screen_height=1080&browser_version=124.0&engine_version=122.0.0.0&cpu_core_num=12&device_memory=8&aweme_id=7345492945006595379"),
user_agent: str = Query(
example="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36")):
"""
# [中文]
### 用途:
- 使用接口网址生成A-Bogus参数
### 参数:
- url: 接口网址
- user_agent: 用户代理,暂时不支持自定义,直接使用默认值即可。
# [English]
### Purpose:
- Generate A-Bogus parameter using API URL
### Parameters:
- url: API URL
- user_agent: User agent, temporarily does not support customization, just use the default value.
# [示例/Example]
url = "https://www.douyin.com/aweme/v1/web/aweme/detail/?device_platform=webapp&aid=6383&channel=channel_pc_web&pc_client_type=1&version_code=190500&version_name=19.5.0&cookie_enabled=true&browser_language=zh-CN&browser_platform=Win32&browser_name=Firefox&browser_online=true&engine_name=Gecko&os_name=Windows&os_version=10&platform=PC&screen_width=1920&screen_height=1080&browser_version=124.0&engine_version=122.0.0.0&cpu_core_num=12&device_memory=8&aweme_id=7345492945006595379"
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"
"""
try:
a_bogus = await DouyinWebCrawler.get_a_bogus(url, user_agent)
return ResponseModel(code=200,
router=request.url.path,
data=a_bogus)
except Exception as e:
status_code = 400
detail = ErrorResponseModel(code=status_code,
router=request.url.path,
params=dict(request.query_params),
)
raise HTTPException(status_code=status_code, detail=detail.dict())


# 提取单个用户id
@router.get("/get_sec_user_id",
response_model=ResponseModel,
Expand Down
7 changes: 4 additions & 3 deletions app/api/endpoints/download.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@
config = yaml.safe_load(file)


async def fetch_data(url: str):
async def fetch_data(url: str, headers: dict = None):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
} if headers is None else headers.get('headers')
async with httpx.AsyncClient() as client:
response = await client.get(url, headers=headers)
response.raise_for_status() # 确保响应是成功的
Expand Down Expand Up @@ -68,7 +68,7 @@ async def download_file_hybrid(request: Request,
return FileResponse(path=file_path, media_type='video/mp4', filename=file_name)

# 获取视频文件
response = await fetch_data(url)
response = await fetch_data(url) if platform == 'douyin' else await fetch_data(url, headers=await HybridCrawler.TikTokWebCrawler.get_tiktok_headers())

# 保存文件
async with aiofiles.open(file_path, 'wb') as out_file:
Expand Down Expand Up @@ -115,6 +115,7 @@ async def download_file_hybrid(request: Request,

# 异常处理/Exception handling
except Exception as e:
print(e)
code = 400
return ErrorResponseModel(code=code, message=str(e), router=request.url.path, params=dict(request.query_params))

4 changes: 2 additions & 2 deletions app/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@
#### 备注
- 本项目仅供学习交流使用,不得用于违法用途,否则后果自负。
- 如果你不想自己部署,可以直接使用我们的在线API服务:[Douyin_TikTok_Download_API](https://douyin.wtf/docs)
- 如果你需要更稳定以及更多功能的API服务,可以使用付费API服务:[TikHub API](https://beta.tikhub.io/)
- 如果你需要更稳定以及更多功能的API服务,可以使用付费API服务:[TikHub API](https://api.tikhub.io/)
### [English]
Expand All @@ -116,7 +116,7 @@
#### Note
- This project is for learning and communication only, and shall not be used for illegal purposes, otherwise the consequences shall be borne by yourself.
- If you do not want to deploy it yourself, you can directly use our online API service: [Douyin_TikTok_Download_API](https://douyin.wtf/docs)
- If you need a more stable and feature-rich API service, you can use the paid API service: [TikHub API](https://beta.tikhub.io)
- If you need a more stable and feature-rich API service, you can use the paid API service: [TikHub API](https://api.tikhub.io)
"""

docs_url = config['API']['Docs_URL']
Expand Down
4 changes: 2 additions & 2 deletions config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ API:
Redoc_URL: /redoc # API documentation URL | API文档URL

# API Information
Version: V4.0.0 # API version | API版本
Update_Time: 2024/04/22 # API update time | API更新时间
Version: V4.0.2 # API version | API版本
Update_Time: 2024/06/14 # API update time | API更新时间
Environment: Demo # API environment | API环境

# Download Configuration
Expand Down
Loading

0 comments on commit 5b72b41

Please sign in to comment.