From e66d27d74e0183e6836ec8cfc1da4ec7004a288a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 23 Sep 2023 07:09:28 +0000 Subject: [PATCH 01/15] docs: Added README."en".md translation via https://github.com/dephraiim/translate-readme --- README.en.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.en.md b/README.en.md index 4616d3f..58c3838 100644 --- a/README.en.md +++ b/README.en.md @@ -17,7 +17,7 @@ > 🚨If you need to use a private server to run this project, please refer to the deployment method\[[Docker deployment](./README.md#%E9%83%A8%E7%BD%B2%E6%96%B9%E5%BC%8F%E4%BA%8C-docker),[One-click deployment](./README.md#%E9%83%A8%E7%BD%B2%E6%96%B9%E5%BC%8F%E4%B8%80-linux)] -This project is based on[PyWebIO](https://github.com/pywebio/PyWebIO),[FastAPI](https://fastapi.tiangolo.com/),[AIOHTTP](https://docs.aiohttp.org/), fast and asynchronous[Tik Tok](https://www.douyin.com/)/[TikTok](https://www.tiktok.com/)Data crawling tool, and realizes online batch parsing and downloading of videos or photo albums without watermarks, data crawling API, iOS shortcut commands without watermark downloading through the Web, etc. You can deploy or modify this project yourself to achieve more functions, or you can call it directly in your project[scraper.py](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/Stable/scraper.py)or install an existing[pip package](https://pypi.org/project/douyin-tiktok-scraper/)As a parsing library, it is easy to crawl data, etc..... +This project is based on[PyWebIO](https://github.com/pywebio/PyWebIO),[FastAPI](https://fastapi.tiangolo.com/),[AIOHTTP](https://docs.aiohttp.org/), fast and asynchronous[Tik Tok](https://www.douyin.com/)/[TikTok](https://www.tiktok.com/)Data crawling tool, and realizes online batch parsing and downloading of videos or photo albums without watermarks, data crawling API, and iOS shortcut commands without watermark downloads through the Web. You can deploy or modify this project yourself to achieve more functions, or you can call it directly in your project[scraper.py](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/Stable/scraper.py)or install an existing[pip package](https://pypi.org/project/douyin-tiktok-scraper/)As a parsing library, it is easy to crawl data, etc..... _Some simple application scenarios:_ @@ -62,9 +62,9 @@ _Download prohibited videos, perform data analysis, download without watermark o > **_web_app.py:_** -- for`web_api.py`as well as`scraper.py`A simple web program created to process the values ​​entered on the web page and use them`Scraper()`Class processing and cooperation`web_api.py`The interface is output on the web page (similar to front-end and back-end separation) +- for`web_api.py`as well as`scraper.py`A simple web program created to process the values ​​entered on the web page and use them`Scraper()`Class processing and cooperation`web_api.py`The interface output is on the web page (similar to front-end and back-end separation) -**_Most of the parameters of the above files can be found in[config.ini](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/main/config.ini)Modify in_** +**_Most of the parameters of the above files can be found in[config.ini](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/main/config.ini)Make changes in_** ## 💡Project file structure @@ -310,7 +310,7 @@ docker rm -f douyin_tiktok_download_api docker-compose pull && docker-compose down && docker-compose up -d ``` -## ❤️Contributor +## ❤️ Contributor [![](https://github.com/Evil0ctal.png?size=50)](https://github.com/Evil0ctal)[![](https://github.com/jw-star.png?size=50)](https://github.com/jw-star)[![](https://github.com/Jeffrey-deng.png?size=50)](https://github.com/Jeffrey-deng)[![](https://github.com/chris-ss.png?size=50)](https://github.com/chris-ss)[![](https://github.com/weixuan00.png?size=50)](https://github.com/weixuan00)[![](https://github.com/Tairraos.png?size=50)](https://github.com/Tairraos) From 383d2ab8af88aeafdbd776ccc4893b7d0438ca67 Mon Sep 17 00:00:00 2001 From: Evil0ctal Date: Sat, 23 Sep 2023 00:14:00 -0700 Subject: [PATCH 02/15] =?UTF-8?q?=F0=9F=8E=89=20Add=20Bilibili=20Support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e4a378a..7d2907f 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [English](./README.en.md) | [简体中文](./README.md) -🚀「Douyin_TikTok_Download_API」是一个开箱即用的高性能异步[抖音](https://www.douyin.com)|[TikTok](https://www.tiktok.com)数据爬取工具,支持API调用,在线批量解析及下载。 +🚀「Douyin_TikTok_Download_API」是一个开箱即用的高性能异步[抖音](https://www.douyin.com)|[TikTok](https://www.tiktok.com)|[Bilibili](https://www.bilibili.com)数据爬取工具,支持API调用,在线批量解析及下载。 [![GitHub license](https://img.shields.io/github/license/Evil0ctal/Douyin_TikTok_Download_API?style=flat-square)](LICENSE) [![Release Version](https://img.shields.io/github/v/release/Evil0ctal/Douyin_TikTok_Download_API?style=flat-square)](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/releases/latest) @@ -101,6 +101,7 @@ ## ✨功能: - 抖音(抖音海外版: TikTok)视频/图片解析 +- Bilibili视频解析 - 网页端批量解析(支持抖音/TikTok混合提交) - 网页端解析结果页批量下载无水印视频(V3.X以上版本移除,请自行部署V2.X版本) - API调用获取链接数据 @@ -139,13 +140,19 @@ async def hybrid_parsing(url: str) -> dict: print(f"The hybrid parsing result:\n {result}") return result -asyncio.run(hybrid_parsing(url=input("Paste Douyin/TikTok share URL here: "))) +asyncio.run(hybrid_parsing(url=input("Paste Douyin/TikTok/Bilibili share URL here: "))) ``` ## 🗺️支持的提交格式: > 💡提示:包含但不仅限于以下例子,如果遇到链接解析失败请开启一个新 [issue](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/issues) +- Bilibili视频链接 + +```text +https://www.bilibili.com/video/BV1Th411x7ii/ +``` + - 抖音分享口令 (APP内复制) ```text From e39eb8fbcaef64c9d90d56a90a1d77d763ba0749 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 23 Sep 2023 07:14:29 +0000 Subject: [PATCH 03/15] docs: Added README."en".md translation via https://github.com/dephraiim/translate-readme --- README.en.md | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/README.en.md b/README.en.md index 58c3838..34540b1 100644 --- a/README.en.md +++ b/README.en.md @@ -7,7 +7,7 @@ [English](./README.en.md)\|[Simplified Chinese](./README.md) -🚀"Douyin_TikTok_Download_API" is a high-performance asynchronous API that can be used out of the box[Tik Tok](https://www.douyin.com)\|[TikTok](https://www.tiktok.com)Data crawling tool supports API calling, online batch analysis and downloading. +🚀"Douyin_TikTok_Download_API" is a high-performance asynchronous API that can be used out of the box[Tik Tok](https://www.douyin.com)\|[TikTok](https://www.tiktok.com)\|[Bilibili](https://www.bilibili.com)Data crawling tool supports API calling, online batch analysis and downloading. [![GitHub license](https://img.shields.io/github/license/Evil0ctal/Douyin_TikTok_Download_API?style=flat-square)](LICENSE)[![Release Version](https://img.shields.io/github/v/release/Evil0ctal/Douyin_TikTok_Download_API?style=flat-square)](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/releases/latest)[![GitHub Star](https://img.shields.io/github/stars/Evil0ctal/Douyin_TikTok_Download_API?style=flat-square)](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/stargazers)[![GitHub Fork](https://img.shields.io/github/forks/Evil0ctal/Douyin_TikTok_Download_API?style=flat-square)](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/network/members)[![GitHub issues](https://img.shields.io/github/issues/Evil0ctal/Douyin_TikTok_Download_API?style=flat-square)](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/issues)[![GitHub closed issues](https://img.shields.io/github/issues-closed/Evil0ctal/Douyin_TikTok_Download_API?style=flat-square)](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/issues?q=is%3Aissue+is%3Aclosed)![GitHub Repo size](https://img.shields.io/github/repo-size/Evil0ctal/Douyin_TikTok_Download_API?style=flat-square&color=3cb371)
[![PyPI v](https://img.shields.io/pypi/v/douyin-tiktok-scraper?style=flat-square&color=%23a8e6cf)](https://pypi.org/project/douyin-tiktok-scraper/)[![PyPI wheel](https://img.shields.io/pypi/wheel/douyin-tiktok-scraper?style=flat-square&color=%23dcedc1)](https://pypi.org/project/douyin-tiktok-scraper/#files)[![PyPI dm](https://img.shields.io/pypi/dm/douyin-tiktok-scraper?style=flat-square&color=%23ffd3b6)](https://pypi.org/project/douyin-tiktok-scraper/)[![PyPI pyversions](https://img.shields.io/pypi/pyversions/douyin-tiktok-scraper?color=%23ffaaa5&style=flat-square)](https://pypi.org/project/douyin-tiktok-scraper/)
[![API status](https://img.shields.io/website?down_color=lightgrey&label=API%20Status&down_message=API%20offline&style=flat-square&up_color=%23dfb9ff&up_message=online&url=https%3A%2F%2Fapi.douyin.wtf%2Fdocs)](https://api.douyin.wtf/docs)[![TikHub-API status](https://img.shields.io/website?down_color=lightgrey&label=TikHub-API%20Status&down_message=API%20offline&style=flat-square&up_color=%23dfb9ff&up_message=online&url=https%3A%2F%2Fapi.tikhub.io%2Fdocs)](https://api.tikhub.io/docs)
[![爱发电](https://img.shields.io/badge/爱发电-evil0ctal-blue.svg?style=flat-square&color=ea4aaa&logo=github-sponsors)](https://afdian.net/@evil0ctal)[![Kofi](https://img.shields.io/badge/Kofi-evil0ctal-orange.svg?style=flat-square&logo=kofi)](https://ko-fi.com/evil0ctal)[![Patreon](https://img.shields.io/badge/Patreon-evil0ctal-red.svg?style=flat-square&logo=patreon)](https://www.patreon.com/evil0ctal) @@ -17,7 +17,7 @@ > 🚨If you need to use a private server to run this project, please refer to the deployment method\[[Docker deployment](./README.md#%E9%83%A8%E7%BD%B2%E6%96%B9%E5%BC%8F%E4%BA%8C-docker),[One-click deployment](./README.md#%E9%83%A8%E7%BD%B2%E6%96%B9%E5%BC%8F%E4%B8%80-linux)] -This project is based on[PyWebIO](https://github.com/pywebio/PyWebIO),[FastAPI](https://fastapi.tiangolo.com/),[AIOHTTP](https://docs.aiohttp.org/), fast and asynchronous[Tik Tok](https://www.douyin.com/)/[TikTok](https://www.tiktok.com/)Data crawling tool, and realizes online batch parsing and downloading of videos or photo albums without watermarks, data crawling API, and iOS shortcut commands without watermark downloads through the Web. You can deploy or modify this project yourself to achieve more functions, or you can call it directly in your project[scraper.py](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/Stable/scraper.py)or install an existing[pip package](https://pypi.org/project/douyin-tiktok-scraper/)As a parsing library, it is easy to crawl data, etc..... +This project is based on[PyWebIO](https://github.com/pywebio/PyWebIO),[FastAPI](https://fastapi.tiangolo.com/),[AIOHTTP](https://docs.aiohttp.org/), fast and asynchronous[Tik Tok](https://www.douyin.com/)/[TikTok](https://www.tiktok.com/)Data crawling tool, and realizes online batch parsing and downloading of videos or photo albums without watermarks, data crawling API, iOS shortcut commands without watermark downloads through the Web, etc. You can deploy or modify this project yourself to achieve more functions, or you can call it directly in your project[scraper.py](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/Stable/scraper.py)or install an existing[pip package](https://pypi.org/project/douyin-tiktok-scraper/)As a parsing library, it is easy to crawl data, etc..... _Some simple application scenarios:_ @@ -62,7 +62,7 @@ _Download prohibited videos, perform data analysis, download without watermark o > **_web_app.py:_** -- for`web_api.py`as well as`scraper.py`A simple web program created to process the values ​​entered on the web page and use them`Scraper()`Class processing and cooperation`web_api.py`The interface output is on the web page (similar to front-end and back-end separation) +- for`web_api.py`as well as`scraper.py`A simple web program created to process the values ​​entered on the web page and then use them`Scraper()`Class processing and cooperation`web_api.py`The interface is output on the web page (similar to front-end and back-end separation) **_Most of the parameters of the above files can be found in[config.ini](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/main/config.ini)Make changes in_** @@ -80,8 +80,9 @@ _Download prohibited videos, perform data analysis, download without watermark o ## ✨Features: - Douyin (overseas version of Douyin: TikTok) video/picture analysis +- Bilibili video analysis - Batch analysis on the web page (supports Douyin/TikTok mixed submission) -- Batch download of non-watermarked videos from the web parsing result page (removed for V3.X and above versions, please deploy V2.X version by yourself) +- Batch download of watermark-free videos from the web parsing result page (removed for V3.X and above versions, please deploy V2.X version by yourself) - API call to get link data - make[pip package](https://pypi.org/project/douyin-tiktok-scraper/)Conveniently and quickly import your projects - [iOS shortcut commands to quickly call API](https://apps.apple.com/cn/app/%E5%BF%AB%E6%8D%B7%E6%8C%87%E4%BB%A4/id915249334)Achieve in-app download of watermark-free videos/photo albums @@ -102,7 +103,7 @@ _Download prohibited videos, perform data analysis, download without watermark o ## 📦Call the parsing library: -> 💡PyPi: +> 💡PyPi: Install the parsing library:`pip install douyin-tiktok-scraper` @@ -118,13 +119,19 @@ async def hybrid_parsing(url: str) -> dict: print(f"The hybrid parsing result:\n {result}") return result -asyncio.run(hybrid_parsing(url=input("Paste Douyin/TikTok share URL here: "))) +asyncio.run(hybrid_parsing(url=input("Paste Douyin/TikTok/Bilibili share URL here: "))) ``` ## 🗺️Supported submission formats: > 💡Tip: Including but not limited to the following examples, if you encounter link parsing failure, please open a new one[issue](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/issues) +- Bilibili video link + +```text +https://www.bilibili.com/video/BV1Th411x7ii/ +``` + - Douyin sharing password (copy in APP) ```text @@ -310,7 +317,7 @@ docker rm -f douyin_tiktok_download_api docker-compose pull && docker-compose down && docker-compose up -d ``` -## ❤️ Contributor +## ❤️Contributor [![](https://github.com/Evil0ctal.png?size=50)](https://github.com/Evil0ctal)[![](https://github.com/jw-star.png?size=50)](https://github.com/jw-star)[![](https://github.com/Jeffrey-deng.png?size=50)](https://github.com/Jeffrey-deng)[![](https://github.com/chris-ss.png?size=50)](https://github.com/chris-ss)[![](https://github.com/weixuan00.png?size=50)](https://github.com/weixuan00)[![](https://github.com/Tairraos.png?size=50)](https://github.com/Tairraos) From eb10cd14373913c82f093732555aecd0b5e03797 Mon Sep 17 00:00:00 2001 From: Evil0ctal Date: Sat, 23 Sep 2023 00:15:21 -0700 Subject: [PATCH 04/15] =?UTF-8?q?=F0=9F=8E=89=20Add=20Bilibili=20Support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7d2907f..d9766a5 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ > 🚨如需使用私有服务器运行本项目,请参考部署方式[[Docker部署](./README.md#%E9%83%A8%E7%BD%B2%E6%96%B9%E5%BC%8F%E4%BA%8C-docker), [一键部署](./README.md#%E9%83%A8%E7%BD%B2%E6%96%B9%E5%BC%8F%E4%B8%80-linux)] -本项目是基于 [PyWebIO](https://github.com/pywebio/PyWebIO),[FastAPI](https://fastapi.tiangolo.com/),[AIOHTTP](https://docs.aiohttp.org/),快速异步的[抖音](https://www.douyin.com/)/[TikTok](https://www.tiktok.com/)数据爬取工具,并通过Web端实现在线批量解析以及下载无水印视频或图集,数据爬取API,iOS快捷指令无水印下载等功能。你可以自己部署或改造本项目实现更多功能,也可以在你的项目中直接调用[scraper.py](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/Stable/scraper.py)或安装现有的[pip包](https://pypi.org/project/douyin-tiktok-scraper/)作为解析库轻松爬取数据等..... +本项目是基于 [PyWebIO](https://github.com/pywebio/PyWebIO),[FastAPI](https://fastapi.tiangolo.com/),[AIOHTTP](https://docs.aiohttp.org/),快速异步的[抖音](https://www.douyin.com/)/[TikTok](https://www.tiktok.com/)/[Bilibili](https://www.bilibili.com)数据爬取工具,并通过Web端实现在线批量解析以及下载无水印视频或图集,数据爬取API,iOS快捷指令无水印下载等功能。你可以自己部署或改造本项目实现更多功能,也可以在你的项目中直接调用[scraper.py](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/Stable/scraper.py)或安装现有的[pip包](https://pypi.org/project/douyin-tiktok-scraper/)作为解析库轻松爬取数据等..... *一些简单的运用场景:* From 0d75d270d9d332f66861992219c4100b9fc957d2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 23 Sep 2023 07:15:47 +0000 Subject: [PATCH 05/15] docs: Added README."en".md translation via https://github.com/dephraiim/translate-readme --- README.en.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.en.md b/README.en.md index 34540b1..8c4eb12 100644 --- a/README.en.md +++ b/README.en.md @@ -17,7 +17,7 @@ > 🚨If you need to use a private server to run this project, please refer to the deployment method\[[Docker deployment](./README.md#%E9%83%A8%E7%BD%B2%E6%96%B9%E5%BC%8F%E4%BA%8C-docker),[One-click deployment](./README.md#%E9%83%A8%E7%BD%B2%E6%96%B9%E5%BC%8F%E4%B8%80-linux)] -This project is based on[PyWebIO](https://github.com/pywebio/PyWebIO),[FastAPI](https://fastapi.tiangolo.com/),[AIOHTTP](https://docs.aiohttp.org/), fast and asynchronous[Tik Tok](https://www.douyin.com/)/[TikTok](https://www.tiktok.com/)Data crawling tool, and realizes online batch parsing and downloading of videos or photo albums without watermarks, data crawling API, iOS shortcut commands without watermark downloads through the Web, etc. You can deploy or modify this project yourself to achieve more functions, or you can call it directly in your project[scraper.py](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/Stable/scraper.py)or install an existing[pip package](https://pypi.org/project/douyin-tiktok-scraper/)As a parsing library, it is easy to crawl data, etc..... +This project is based on[PyWebIO](https://github.com/pywebio/PyWebIO),[FastAPI](https://fastapi.tiangolo.com/),[AIOHTTP](https://docs.aiohttp.org/), fast and asynchronous[Tik Tok](https://www.douyin.com/)/[TikTok](https://www.tiktok.com/)/[Bilibili](https://www.bilibili.com)Data crawling tool, and realizes online batch parsing and downloading of videos or photo albums without watermarks, data crawling API, and iOS shortcut commands without watermark downloads through the Web. You can deploy or modify this project yourself to achieve more functions, or you can call it directly in your project[scraper.py](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/Stable/scraper.py)or install an existing[pip package](https://pypi.org/project/douyin-tiktok-scraper/)As a parsing library, it is easy to crawl data, etc..... _Some simple application scenarios:_ @@ -62,7 +62,7 @@ _Download prohibited videos, perform data analysis, download without watermark o > **_web_app.py:_** -- for`web_api.py`as well as`scraper.py`A simple web program created to process the values ​​entered on the web page and then use them`Scraper()`Class processing and cooperation`web_api.py`The interface is output on the web page (similar to front-end and back-end separation) +- for`web_api.py`as well as`scraper.py`A simple web program created to process the values ​​entered on the web page and then use them`Scraper()`Class processing and cooperation`web_api.py`The interface output is on the web page (similar to front-end and back-end separation) **_Most of the parameters of the above files can be found in[config.ini](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/main/config.ini)Make changes in_** @@ -82,7 +82,7 @@ _Download prohibited videos, perform data analysis, download without watermark o - Douyin (overseas version of Douyin: TikTok) video/picture analysis - Bilibili video analysis - Batch analysis on the web page (supports Douyin/TikTok mixed submission) -- Batch download of watermark-free videos from the web parsing result page (removed for V3.X and above versions, please deploy V2.X version by yourself) +- Batch download of non-watermarked videos from the web parsing result page (removed for V3.X and above versions, please deploy V2.X version by yourself) - API call to get link data - make[pip package](https://pypi.org/project/douyin-tiktok-scraper/)Conveniently and quickly import your projects - [iOS shortcut commands to quickly call API](https://apps.apple.com/cn/app/%E5%BF%AB%E6%8D%B7%E6%8C%87%E4%BB%A4/id915249334)Achieve in-app download of watermark-free videos/photo albums @@ -103,7 +103,7 @@ _Download prohibited videos, perform data analysis, download without watermark o ## 📦Call the parsing library: -> 💡PyPi: +> 💡PyPi: Install the parsing library:`pip install douyin-tiktok-scraper` @@ -317,7 +317,7 @@ docker rm -f douyin_tiktok_download_api docker-compose pull && docker-compose down && docker-compose up -d ``` -## ❤️Contributor +## ❤️ Contributor [![](https://github.com/Evil0ctal.png?size=50)](https://github.com/Evil0ctal)[![](https://github.com/jw-star.png?size=50)](https://github.com/jw-star)[![](https://github.com/Jeffrey-deng.png?size=50)](https://github.com/Jeffrey-deng)[![](https://github.com/chris-ss.png?size=50)](https://github.com/chris-ss)[![](https://github.com/weixuan00.png?size=50)](https://github.com/weixuan00)[![](https://github.com/Tairraos.png?size=50)](https://github.com/Tairraos) From 4581d6cb6a5814d1ff3f961183e93a2317d1f729 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98Xuenew=3Bgit=20config=20--global=20user=2Eemail?= =?UTF-8?q?=2018188108851=40163=2Ecom=E2=80=99?= <“18188108851@163.com”> Date: Mon, 25 Sep 2023 23:12:48 +0800 Subject: [PATCH 06/15] =?UTF-8?q?1,=E6=B7=BB=E5=8A=A0=E4=BA=86=E8=A5=BF?= =?UTF-8?q?=E7=93=9C=E8=A7=A3=E6=9E=902=EF=BC=8C=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BA=86readme/readme.en3,BUG=20convert=5Fshare=5Furls=20?= =?UTF-8?q?=E8=BF=99=E9=87=8C=E6=9C=89bug=E3=80=82=20=E5=A6=82=E6=9E=9C?= =?UTF-8?q?=E6=8A=96=E9=9F=B3=E7=9A=84=E5=8F=A3=E4=BB=A4=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E7=9A=84=E5=87=BA=E6=9D=A5=E5=85=B6=E4=BB=96=E7=9A=84=E9=83=BD?= =?UTF-8?q?=E6=98=AFnone=EF=BC=8C=E8=BF=98=E6=B2=A1=E6=9C=89=E5=A5=BD?= =?UTF-8?q?=E7=9A=84=E8=A7=A3=E5=86=B3=E6=96=B9=E6=B3=95=EF=BC=8C=E6=88=91?= =?UTF-8?q?=E6=83=B3=E7=AE=80=E5=8D=95=E7=9A=84=E7=94=A8if=E5=88=A4?= =?UTF-8?q?=E6=96=AD=EF=BC=8C=E4=BD=86=E8=BF=99=E6=A0=B7=E4=BC=9A=E4=B8=8D?= =?UTF-8?q?=E4=BC=9A=E6=9C=89=E5=85=B6=E4=BB=96=E6=96=B0=E4=BD=86=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E5=8A=A0=E8=BF=9B=E6=9D=A5=E6=84=9F=E8=A7=89=E8=BF=99?= =?UTF-8?q?=E6=A0=B7=E5=A4=84=E7=90=86=E6=9C=89=E7=82=B9=E5=A4=AA=E7=AE=80?= =?UTF-8?q?=E5=8D=95=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/Douyin_TikTok_Download_API.iml | 12 ++ .idea/inspectionProfiles/Project_Default.xml | 37 +++++ .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 7 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + .idea/workspace.xml | 147 ++++++++++++++++++ README.en.md | 8 + README.md | 8 + scraper.py | 146 ++++++++++++++++- 10 files changed, 380 insertions(+), 5 deletions(-) create mode 100644 .idea/Douyin_TikTok_Download_API.iml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml diff --git a/.idea/Douyin_TikTok_Download_API.iml b/.idea/Douyin_TikTok_Download_API.iml new file mode 100644 index 0000000..8b8c395 --- /dev/null +++ b/.idea/Douyin_TikTok_Download_API.iml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..8191630 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,37 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..8422fff --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..c5ff2c9 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..c793b68 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1695571223199 - - - 1695652986133 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From d1cde3c10d7ca0fce5160f0f74035759a13098fa Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 26 Sep 2023 06:28:35 +0000 Subject: [PATCH 15/15] docs: Added README."en".md translation via https://github.com/dephraiim/translate-readme --- README.en.md | 371 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 371 insertions(+) create mode 100644 README.en.md diff --git a/README.en.md b/README.en.md new file mode 100644 index 0000000..4827453 --- /dev/null +++ b/README.en.md @@ -0,0 +1,371 @@ +
+ +
+

Douyin_TikTok_Download_API(抖音/TikTok API)

+ +
+ +[English](./README.en.md)\|[Simplified Chinese](./README.md) + +🚀"Douyin_TikTok_Download_API" is a high-performance asynchronous API that can be used out of the box[Tik Tok](https://www.douyin.com)\|[TikTok](https://www.tiktok.com)\|[Bilibili](https://www.bilibili.com)Data crawling tool supports API calling, online batch analysis and downloading. + +[![GitHub license](https://img.shields.io/github/license/Evil0ctal/Douyin_TikTok_Download_API?style=flat-square)](LICENSE)[![Release Version](https://img.shields.io/github/v/release/Evil0ctal/Douyin_TikTok_Download_API?style=flat-square)](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/releases/latest)[![GitHub Star](https://img.shields.io/github/stars/Evil0ctal/Douyin_TikTok_Download_API?style=flat-square)](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/stargazers)[![GitHub Fork](https://img.shields.io/github/forks/Evil0ctal/Douyin_TikTok_Download_API?style=flat-square)](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/network/members)[![GitHub issues](https://img.shields.io/github/issues/Evil0ctal/Douyin_TikTok_Download_API?style=flat-square)](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/issues)[![GitHub closed issues](https://img.shields.io/github/issues-closed/Evil0ctal/Douyin_TikTok_Download_API?style=flat-square)](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/issues?q=is%3Aissue+is%3Aclosed)![GitHub Repo size](https://img.shields.io/github/repo-size/Evil0ctal/Douyin_TikTok_Download_API?style=flat-square&color=3cb371)
[![PyPI v](https://img.shields.io/pypi/v/douyin-tiktok-scraper?style=flat-square&color=%23a8e6cf)](https://pypi.org/project/douyin-tiktok-scraper/)[![PyPI wheel](https://img.shields.io/pypi/wheel/douyin-tiktok-scraper?style=flat-square&color=%23dcedc1)](https://pypi.org/project/douyin-tiktok-scraper/#files)[![PyPI dm](https://img.shields.io/pypi/dm/douyin-tiktok-scraper?style=flat-square&color=%23ffd3b6)](https://pypi.org/project/douyin-tiktok-scraper/)[![PyPI pyversions](https://img.shields.io/pypi/pyversions/douyin-tiktok-scraper?color=%23ffaaa5&style=flat-square)](https://pypi.org/project/douyin-tiktok-scraper/)
[![API status](https://img.shields.io/website?down_color=lightgrey&label=API%20Status&down_message=API%20offline&style=flat-square&up_color=%23dfb9ff&up_message=online&url=https%3A%2F%2Fapi.douyin.wtf%2Fdocs)](https://api.douyin.wtf/docs)[![TikHub-API status](https://img.shields.io/website?down_color=lightgrey&label=TikHub-API%20Status&down_message=API%20offline&style=flat-square&up_color=%23dfb9ff&up_message=online&url=https%3A%2F%2Fapi.tikhub.io%2Fdocs)](https://api.tikhub.io/docs)
[![爱发电](https://img.shields.io/badge/爱发电-evil0ctal-blue.svg?style=flat-square&color=ea4aaa&logo=github-sponsors)](https://afdian.net/@evil0ctal)[![Kofi](https://img.shields.io/badge/Kofi-evil0ctal-orange.svg?style=flat-square&logo=kofi)](https://ko-fi.com/evil0ctal)[![Patreon](https://img.shields.io/badge/Patreon-evil0ctal-red.svg?style=flat-square&logo=patreon)](https://www.patreon.com/evil0ctal) + +
+ +## 👻Introduction + +> 🚨If you need to use a private server to run this project, please refer to the deployment method\[[Docker deployment](./README.md#%E9%83%A8%E7%BD%B2%E6%96%B9%E5%BC%8F%E4%BA%8C-docker),[One-click deployment](./README.md#%E9%83%A8%E7%BD%B2%E6%96%B9%E5%BC%8F%E4%B8%80-linux)] + +This project is based on[PyWebIO](https://github.com/pywebio/PyWebIO),[FastAPI](https://fastapi.tiangolo.com/),[AIOHTTP](https://docs.aiohttp.org/), fast and asynchronous[Tik Tok](https://www.douyin.com/)/[TikTok](https://www.tiktok.com/)/[Bilibili](https://www.bilibili.com)Data crawling tool, and realizes online batch parsing and downloading of videos or photo albums without watermarks, data crawling API, and iOS shortcut commands without watermark downloads through the Web. You can deploy or modify this project yourself to achieve more functions, or you can call it directly in your project[scraper.py](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/Stable/scraper.py)or install an existing[pip package](https://pypi.org/project/douyin-tiktok-scraper/)As a parsing library, it is easy to crawl data, etc..... + +_Some simple application scenarios:_ + +_Download prohibited videos, perform data analysis, download without watermark on iOS (with[Shortcut command APP that comes with iOS](https://apps.apple.com/cn/app/%E5%BF%AB%E6%8D%B7%E6%8C%87%E4%BB%A4/id915249334)Cooperate with the API of this project to achieve in-app downloads or read clipboard downloads), etc....._ + +## 🖥Public site: I am very vulnerable...please do not stress test (·•᷄ࡇ•᷅ ) + +> **Tikhub-Opi:**support`Douyin|TikTok`The user's homepage crawls the author's \[homepage video data (watermark removal link, liked video list (permission must be public), video comment data, background music video list data, etc...), please check TikHub- for details API documentation. In addition, compared with the API of this project, TikHub-API is faster when grabbing TikTok data. + +🍔Web APP: + +🍟API Document: + +🌭TikHub API Document: + +💾iOS Shortcut (shortcut command):[Shortcut release](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/discussions/104?sort=top) + +📦️Desktop downloader (recommended by warehouse): + +- [Johnserf-Seed/TikTokDownload](https://github.com/Johnserf-Seed/TikTokDownload) +- [HFrost0/bilix](https://github.com/HFrost0/bilix) +- [Tairraos/TikDown - \[needs update\]](https://github.com/Tairraos/TikDown/) + +🛸Other repositories based on this project + +- [TikHubIO/TikHub_API_PyPi](https://github.com/TikHubIO/TikHub_API_PyPi) +- [Evil0ctal/Douyin_Tiktok_Scraper_PyPi](https://github.com/Evil0ctal/Douyin_Tiktok_Scraper_PyPi) + +## ⚗️Technology stack + +- [web_app.py](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/main/web_app.py)-[PyWebIO](https://www.pyweb.io/) +- [web_api.py](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/main/web_api.py)-[FastAPI](https://fastapi.tiangolo.com/) +- [scraper.py](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/main/scraper.py)-[AIOHTTP](https://docs.aiohttp.org/) + +> **_scraper.py:_** + +- Towards[Douyin|TikTok]The API submits a request and retrieves the data, and returns a dictionary (dict) after processing, supporting asynchronous. + +> **_web_api.py:_** + +- Get request parameters and use`Scraper()`The class processes the data and returns it in JSON form, downloads the video, and cooperates with iOS shortcut commands to achieve fast calling and supports asynchronous. + +> **_web_app.py:_** + +- for`web_api.py`as well as`scraper.py`A simple web program created to process the values ​​entered on the web page and use them`Scraper()`Class processing and cooperation`web_api.py`The interface output is on the web page (similar to front-end and back-end separation) + +**_Most of the parameters of the above files can be found in[config.ini](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/main/config.ini)Make changes in_** + +## 💡Project file structure + + . + └── Douyin_TikTok_Download_API/ + ├── /static -> (PyWebIO static resources) + ├── web_app.py -> (Web APP) + ├── web_api.py -> (API) + ├── scraper.py -> (Parsing library) + ├── config.ini -> (Configuration file) + ├── install.sh -> (Installation bash script) + +## ✨Features: + +- Douyin (overseas version of Douyin: TikTok) video/picture analysis +- Bilibili video analysis +- Watermelon video analysis +- Batch analysis on the web page (supports Douyin/TikTok mixed submission) +- Batch download of non-watermarked videos from the web parsing result page (removed for V3.X and above versions, please deploy V2.X version by yourself) +- API call to get link data +- make[pip package](https://pypi.org/project/douyin-tiktok-scraper/)Conveniently and quickly import your projects +- [iOS shortcut commands to quickly call API](https://apps.apple.com/cn/app/%E5%BF%AB%E6%8D%B7%E6%8C%87%E4%BB%A4/id915249334)Achieve in-app download of watermark-free videos/photo albums +- Analyze all videos on the author's homepage ([Tikhub-opy](https://api.tikhub.io/docs)Support Douyin/TikTok) +- Parse all comment information in the video ([Tikhub-opy](https://api.tikhub.io/docs)Support Douyin/TikTok) + +* * * + +## 🤦‍To-do list: + +> 💡Welcome to make suggestions or submit PR directly to this warehouse ♪(・ω・)ノ) + +- [ ] Write a desktop asynchronous downloader to implement local batch downloading +- [ ] TikHub-API adds data crawling for hash_tag pages[#101](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/issues/101) +- [ ] Add support for other short video platforms, such as Douyin Huoshan Edition, Kuaishou, Xigua Video, and Bilibili + +* * * + +## 📦Call the parsing library: + +> 💡PyPi: + +Install the parsing library:`pip install douyin-tiktok-scraper` + +```python +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: "))) +``` + +## 🗺️Supported submission formats: + +> 💡Tip: Including but not limited to the following examples, if you encounter link parsing failure, please open a new one[issue](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/issues) + +- Watermelon video link + +```text +https://www.ixigua.com/7270448082586698281/ +https://m.ixigua.com/video/7274710134306112054/ +``` + +- Bilibili video link + +```text +https://www.bilibili.com/video/BV1Th411x7ii/ +``` + +- Douyin sharing password (copy in APP) + +```text +7.43 pda:/ 让你在几秒钟之内记住我 https://v.douyin.com/L5pbfdP/ 复制此链接,打开Dou音搜索,直接观看视频! +``` + +- Douyin short URL (copy within APP) + +```text +https://v.douyin.com/L4FJNR3/ +``` + +- Douyin normal URL (copy from web version) + +```text +https://www.douyin.com/video/6914948781100338440 +``` + +- Douyin discovery page URL (APP copy) + +```text +https://www.douyin.com/discover?modal_id=7069543727328398622 +``` + +- TikTok short URL (copy within APP) + +```text +https://www.tiktok.com/t/ZTR9nDNWq/ +``` + +- TikTok normal URL (copy from web version) + +```text +https://www.tiktok.com/@evil0ctal/video/7156033831819037994 +``` + +- Douyin/TikTok batch URL (no need to use matching separation) + +```text +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 documentation + +> 💡Tip: You can also view the interface documentation in the code comments of web_api.py + +**_API documentation:_** + +local: + +Online: + +**_TikHub-API documentation:_** + +Online: + +**_API demo:_** + +- Crawl video data (TikTok or Douyin hybrid analysis)`https://api.douyin.wtf/api?url=[视频链接/Video URL]&minimal=false` +- Download videos/photo albums (TikTok or Douyin hybrid analysis)`https://api.douyin.wtf/download?url=[视频链接/Video URL]&prefix=true&watermark=false` +- Replace domain name to download videos/photo albums + + + [抖音] + 原始链接: + https://www.douyin.com/video/7159502929156705567 + 替换域名: + https://api.douyin.wtf/video/7159502929156705567 + # 返回无水印视频下载响应 + [TikTok] + original link: + https://www.tiktok.com/@evil0ctal/video/7156033831819037994 + Replace Domain: + https://api.douyin.wtf/@evil0ctal/video/7156033831819037994 + # Return No Watermark Video Download Response + +**_For more demonstrations, please view the document content..._** + +## 💻Deployment (Method 1 Linux) + +> 💡Tips: It is best to deploy this project to a server in the United States, otherwise strange BUGs may occur. + +Recommended for everyone to use[Digitalocean](https://www.digitalocean.com/)servers, mainly because they are free. + +Use my invitation link to sign up and you can get a $200 credit, and when you spend $25 on it, I can also get a $25 reward. + +My invitation link: + + + +> Use script to deploy this project with one click + +- Download using wget command[install.sh](https://raw.githubusercontent.com/Evil0ctal/Douyin_TikTok_Download_API/main/bash/install.sh)to the server and run + + + wget -O install.sh https://raw.githubusercontent.com/Evil0ctal/Douyin_TikTok_Download_API/main/bash/install.sh && sudo bash install.sh + +- It will be used automatically after running the Bash script[config.py](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/main/config.py)to help you modify[config.ini](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/main/config.ini) + +```console +Please edit config.ini, all input must be numbers! +Default API port: 8000 +If you want use different port input new API port here: 80 +Use new port for web_api.py: 80 +Default API rate limit: 10/minute +If you want use different rate limit input new rate limit here: 60 +Use new rate limit: 60/minute +Default App port: 80 +If you want use different port input new App port here: 8080 +Use new port: 8080 +``` + +- The script will then ask you for the service you want to start. + +api: start alone`web_api.py` + +web: Start alone`web_app.py` + +all: start at the same time`web_api.py`and`web_app.py` + +```console +Run API or Web? [api/web/all/quit] api +Do you want to start the api service when system boot? [y/n] y +Created symlink /etc/systemd/system/multi-user.target.wants/web_api.service → /etc/systemd/system/web_api.service. +API service will start when system boot! +Starting API... +API is running! You can visit http://your_ip:port +You can stop the api service by running: systemctl stop web_api.service +``` + +> Start/stop service + +- web service:`systemctl start/stop web_app.service` +- api service:`systemctl start/stop web_api.service` + +> Turn on/off automatic operation at startup + +- web service:`systemctl enable/disable web_app.service` +- api service:`systemctl enable/disable web_api.service` + +> Update project + +- `cd /www/wwwroot/Douyin_TikTok_Download_API/bash` +- `sudo sh update.sh` + +## 💽Deployment (Method 2 Docker) + +> 💡Docker Image repo:[Docker Hub](https://hub.docker.com/repository/docker/evil0ctal/douyin_tiktok_download_api) + +- Install docker + +```yaml +curl -fsSL get.docker.com -o get-docker.sh&&sh get-docker.sh &&systemctl enable docker&&systemctl start docker +``` + +- Just leave the config.ini and docker-compose.yml files +- Run the command to let the container run in the background + +```yaml +docker-compose up -d +``` + +- View container logs + +```yaml +docker logs -f douyin_tiktok_download_api +``` + +- Delete container + +```yaml +docker rm -f douyin_tiktok_download_api +``` + +- renew + +```yaml +docker-compose pull && docker-compose down && docker-compose up -d +``` + +## ❤️ Contributor + +[![](https://github.com/Evil0ctal.png?size=50)](https://github.com/Evil0ctal)[![](https://github.com/jw-star.png?size=50)](https://github.com/jw-star)[![](https://github.com/Jeffrey-deng.png?size=50)](https://github.com/Jeffrey-deng)[![](https://github.com/chris-ss.png?size=50)](https://github.com/chris-ss)[![](https://github.com/weixuan00.png?size=50)](https://github.com/weixuan00)[![](https://github.com/Tairraos.png?size=50)](https://github.com/Tairraos) + +## 📸Screenshot + +**_API speed test (compared to official API)_** + +
🔎点击展开截图 + +Douyin official API:![](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/main/Screenshots/benchmarks/Douyin_API.png?raw=true) + +API of this project:![](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/main/Screenshots/benchmarks/Douyin_API_Douyin_wtf.png?raw=true) + +TikTok official API:![](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/main/Screenshots/benchmarks/TikTok_API.png?raw=true) + +API of this project:![](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/main/Screenshots/benchmarks/TikTok_API_Douyin_wtf.png?raw=true) + +
+
+ +**_Project interface_** + +
🔎点击展开截图 + +Web main interface: + +![](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/main/Screenshots/v3_screenshots/Home.png?raw=true) + +Web main interface: + +![](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/main/Screenshots/v3_screenshots/Home_en.png?raw=true) + +
+
+ +## 📜 Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=Evil0ctal/Douyin_TikTok_Download_API&type=Timeline)](https://star-history.com/#Evil0ctal/Douyin_TikTok_Download_API&Timeline) + +[MY License](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/blob/Stable/LICENSE) + +> Start: 2021/11/06 +> GitHub:[@Evil0ctal](https://github.com/Evil0ctal)Contact:[Evil0ctal1985@gmail.com](mailto:Evil0ctal1985@gmail.com)