tikhub


Nametikhub JSON
Version 1.0.1 PyPI version JSON
download
home_pagehttps://github.com/orgs/TikHubIO
SummaryDouyin/TikTok async data scraper.
upload_time2022-12-20 00:15:16
maintainer
docs_urlNone
authorTikHub.io
requires_python>=3.6
licenseApache V2.0 License
keywords tiktok douyin 抖音 scraper crawler api download video no watermark async
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # TikHub_PyPi([API.TikHub.io](https://api.tikhub.io/docs))

[API.TikHub.io](https://api.tikhub.io/docs),是一个异步高性能的Douyin,TikTok数据爬取工具,此Repo为基于该API的PyPi包,方便各位开发者调用。


## 注释

> 本项目使用以下Emoji在开发图表中表明开发状态!

| Emoji | 代表的含义 |
| :---: | :---: |
| 🚀 | 火箭 - 功能已编写完成并测试通过,并且已部署至生产环境。|
| ✅ | 勾选符 - 功能已编写完成,但还有待测试,测试通过后将部署至生产环境。|
| ❌ | 叉号符 - 功能尚未开始编写或还未编写完成。|
| 🔜 | SOON符 - 功能已提出但尚未分配指定开发人员。|
| ⚠️ | 警告符 - 功能出现问题待修复。|

## 项目进度

| 状态 | API端点路径 | 功能 |
| :---: | :---: | :---: |
| 🚀 | `/token` | 生成`Bearer Token` |
| 🚀 | `/users/me/` | 获取用户信息 |

> 各接口端点需求

| 状态 | 支持平台 | 需求 | 开始日期 | ETA日期 | 开发者 |
| :---: | :--- | :---: | :---: | :---: |:---: |
| 🚀 | 抖音, TikTok | 爬取单个视频数据 | 2022/10/08 | 已完成 | @Evil0ctal |
| 🚀 | 抖音, TikTok | 爬取单个视频评论数据 | 2022/10/08 | 已完成 | @Evil0ctal |
| 🚀 | 抖音, TikTok | 爬取配乐作品数据 | 2022/10/08 | 已完成 | @Evil0ctal |
| 🚀 | 抖音, TikTok | 爬取用户主页视频数据 | 2022/10/08 | 已完成 | @Evil0ctal |
| 🚀 | 抖音, TikTok | 爬取用户主页已点赞视频数据 | 2022/10/08 | 已完成 | @Evil0ctal |

> 抖音相关接口生产部署 - API tags: Douyin

| 状态 | API端点路径 | 功能 | issue |
| :---: | :---: | :---: | :---: |
| 🚀 | `/douyin_video_data/` | 爬取单个视频数据 | 无已知问题 |
| ⚠️ | `/douyin_video_comments/` | 爬取单个视频评论数据 | 失效待更新 |
| ⚠️ | `/douyin_music_videos/` | 爬取配乐作品数据 | 失效待更新 |
| 🚀 | `/douyin_profile_videos/` | 爬取用户主页视频数据 | 无已知问题 |
| 🚀 | `/douyin_profile_liked_videos/` | 爬取用户主页已点赞视频数据 | 无已知问题 |

> TikTok相关接口生产部署 - API tags: TikTok

| 状态 | API端点路径 | 功能 | issue |
| :---: | :---: | :---: | :---: |
| 🚀 | `/tiktok_video_data/` | 爬取单个视频数据 | 无已知问题 |
| 🚀 | `/tiktok_video_comments/` | 爬取单个视频评论数据 | 无已知问题 |
| 🚀 | `/tiktok_music_videos/` | 爬取配乐作品数据 | 无已知问题 |
| 🚀 | `/tiktok_profile_videos/` | 爬取用户主页视频数据 | 无已知问题 |
| 🚀 | `/tiktok_profile_liked_videos/` | 爬取用户主页已点赞视频数据 | 无已知问题 |

## 待办事宜 `Todo` 列表

- [ ] ⚠️ 修复`/douyin_video_comments/`端点
- [ ] ⚠️ 修复`/douyin_music_videos/`端点

## 使用示例

```python
async def async_test() -> None:
    # 异步测试/Async test

    tiktok_url = 'https://www.tiktok.com/@evil0ctal/video/7156033831819037994'

    tiktok_music_url = 'https://www.tiktok.com/music/original-sound-7128362040359488261'

    douyin_url = 'https://www.douyin.com/video/7153585499477757192'

    douyin_user_url = 'https://www.douyin.com/user/MS4wLjABAAAA-Hu1YKTuhE3QkCHD5yU26k--RUZiaoMRtpfmeid-Z_o'

    print("Test start...\n")
    start_time = time.time()

    # 获取TikHub请求头/Get TikHub request header
    print("Running test : API.authenticate()")
    await api.authenticate()

    # 获取TikHub用户信息/Get TikHub user information
    print("Running test : API.get_user_info()")
    await api.get_user_info()

    print("\nRunning ALL TikTok methods test...\n")

    # 获取单个视频数据/Get single video data
    print("Running test : API.get_tiktok_video_data()")
    await api.get_tiktok_video_data(tiktok_url)

    # 获取获取用户主页的所有视频数据/Get all video data on the user's homepage
    print("Running test : API.get_tiktok_profile_videos()")
    aweme_list = await api.get_tiktok_profile_videos(tiktok_url, 20)
    print(f'Get {len(aweme_list)} videos from profile')

    # 获取用户主页的所有点赞视频数据/Get all liked video data on the user's homepage
    print("Running test : API.get_tiktok_profile_liked_videos()")
    aweme_list = await api.get_tiktok_profile_liked_videos(tiktok_url, 20)
    print(f'Get {len(aweme_list)} liked videos from profile')

    # 获取TikTok视频的所有评论数据/Get all comment data of TikTok video
    print("Running test : API.get_tiktok_video_comments()")
    comments_list = await api.get_tiktok_video_comments(tiktok_url, 20)
    print(f'Get {len(comments_list)} comments from video')

    # 获取音乐页面上的所有(理论上能抓取到的)视频数据/Get all (theoretically) video data on the music page
    print("Running test : API.get_tiktok_music_videos()")
    aweme_list = await api.get_tiktok_music_videos(tiktok_music_url, 20)
    print(f'Get {len(aweme_list)} videos from music')

    print("\nRunning ALL Douyin methods test...\n")

    # 获取单个视频数据/Get single video data
    print("Running test : API.get_douyin_video_data()")
    await api.get_douyin_video_data(douyin_url)

    # 获取获取用户主页的所有视频数据/Get all video data on the user's homepage
    print("Running test : API.get_douyin_profile_videos()")
    aweme_list = await api.get_douyin_profile_videos(douyin_user_url, 20)
    print(f'Get {len(aweme_list)} videos from profile')

    # 获取用户主页的所有点赞视频数据/Get all liked video data on the user's homepage
    print("Running test : API.get_douyin_profile_liked_videos()")
    aweme_list = await api.get_douyin_profile_liked_videos(douyin_user_url, 20)

    # 总耗时/Total time
    total_time = round(time.time() - start_time, 2)
    print("\nTest completed, total time: {}s".format(total_time))


if __name__ == '__main__':
    api = API(
        username='test',
        password='test',
        proxy=None,
    )
    asyncio.run(async_test())
```



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/orgs/TikHubIO",
    "name": "tikhub",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": "",
    "keywords": "TikTok,Douyin,\u6296\u97f3,Scraper,Crawler,API,Download,Video,No Watermark,Async",
    "author": "TikHub.io",
    "author_email": "tikhub.io@proton.me",
    "download_url": "https://files.pythonhosted.org/packages/89/86/26006eefee8f64332efc8c77d9190c6f892090bffb123a17b7af3045fa34/tikhub-1.0.1.tar.gz",
    "platform": null,
    "description": "# TikHub_PyPi([API.TikHub.io](https://api.tikhub.io/docs))\n\n[API.TikHub.io](https://api.tikhub.io/docs)\uff0c\u662f\u4e00\u4e2a\u5f02\u6b65\u9ad8\u6027\u80fd\u7684Douyin\uff0cTikTok\u6570\u636e\u722c\u53d6\u5de5\u5177\uff0c\u6b64Repo\u4e3a\u57fa\u4e8e\u8be5API\u7684PyPi\u5305\uff0c\u65b9\u4fbf\u5404\u4f4d\u5f00\u53d1\u8005\u8c03\u7528\u3002\n\n\n## \u6ce8\u91ca\n\n> \u672c\u9879\u76ee\u4f7f\u7528\u4ee5\u4e0bEmoji\u5728\u5f00\u53d1\u56fe\u8868\u4e2d\u8868\u660e\u5f00\u53d1\u72b6\u6001!\n\n| Emoji | \u4ee3\u8868\u7684\u542b\u4e49 |\n| :---: | :---: |\n| \ud83d\ude80 | \u706b\u7bad - \u529f\u80fd\u5df2\u7f16\u5199\u5b8c\u6210\u5e76\u6d4b\u8bd5\u901a\u8fc7\uff0c\u5e76\u4e14\u5df2\u90e8\u7f72\u81f3\u751f\u4ea7\u73af\u5883\u3002|\n| \u2705 | \u52fe\u9009\u7b26 - \u529f\u80fd\u5df2\u7f16\u5199\u5b8c\u6210\uff0c\u4f46\u8fd8\u6709\u5f85\u6d4b\u8bd5\uff0c\u6d4b\u8bd5\u901a\u8fc7\u540e\u5c06\u90e8\u7f72\u81f3\u751f\u4ea7\u73af\u5883\u3002|\n| \u274c | \u53c9\u53f7\u7b26 - \u529f\u80fd\u5c1a\u672a\u5f00\u59cb\u7f16\u5199\u6216\u8fd8\u672a\u7f16\u5199\u5b8c\u6210\u3002|\n| \ud83d\udd1c | SOON\u7b26 - \u529f\u80fd\u5df2\u63d0\u51fa\u4f46\u5c1a\u672a\u5206\u914d\u6307\u5b9a\u5f00\u53d1\u4eba\u5458\u3002|\n| \u26a0\ufe0f | \u8b66\u544a\u7b26 - \u529f\u80fd\u51fa\u73b0\u95ee\u9898\u5f85\u4fee\u590d\u3002|\n\n## \u9879\u76ee\u8fdb\u5ea6\n\n| \u72b6\u6001 | API\u7aef\u70b9\u8def\u5f84 | \u529f\u80fd |\n| :---: | :---: | :---: |\n| \ud83d\ude80 | `/token` | \u751f\u6210`Bearer Token` |\n| \ud83d\ude80 | `/users/me/` | \u83b7\u53d6\u7528\u6237\u4fe1\u606f |\n\n> \u5404\u63a5\u53e3\u7aef\u70b9\u9700\u6c42\n\n| \u72b6\u6001 | \u652f\u6301\u5e73\u53f0 | \u9700\u6c42 | \u5f00\u59cb\u65e5\u671f | ETA\u65e5\u671f | \u5f00\u53d1\u8005 |\n| :---: | :--- | :---: | :---: | :---: |:---: |\n| \ud83d\ude80 | \u6296\u97f3, TikTok | \u722c\u53d6\u5355\u4e2a\u89c6\u9891\u6570\u636e | 2022/10/08 | \u5df2\u5b8c\u6210 | @Evil0ctal |\n| \ud83d\ude80 | \u6296\u97f3, TikTok | \u722c\u53d6\u5355\u4e2a\u89c6\u9891\u8bc4\u8bba\u6570\u636e | 2022/10/08 | \u5df2\u5b8c\u6210 | @Evil0ctal |\n| \ud83d\ude80 | \u6296\u97f3, TikTok | \u722c\u53d6\u914d\u4e50\u4f5c\u54c1\u6570\u636e | 2022/10/08 | \u5df2\u5b8c\u6210 | @Evil0ctal |\n| \ud83d\ude80 | \u6296\u97f3, TikTok | \u722c\u53d6\u7528\u6237\u4e3b\u9875\u89c6\u9891\u6570\u636e | 2022/10/08 | \u5df2\u5b8c\u6210 | @Evil0ctal |\n| \ud83d\ude80 | \u6296\u97f3, TikTok | \u722c\u53d6\u7528\u6237\u4e3b\u9875\u5df2\u70b9\u8d5e\u89c6\u9891\u6570\u636e | 2022/10/08 | \u5df2\u5b8c\u6210 | @Evil0ctal |\n\n> \u6296\u97f3\u76f8\u5173\u63a5\u53e3\u751f\u4ea7\u90e8\u7f72 - API tags: Douyin\n\n| \u72b6\u6001 | API\u7aef\u70b9\u8def\u5f84 | \u529f\u80fd | issue |\n| :---: | :---: | :---: | :---: |\n| \ud83d\ude80 | `/douyin_video_data/` | \u722c\u53d6\u5355\u4e2a\u89c6\u9891\u6570\u636e | \u65e0\u5df2\u77e5\u95ee\u9898 |\n| \u26a0\ufe0f | `/douyin_video_comments/` | \u722c\u53d6\u5355\u4e2a\u89c6\u9891\u8bc4\u8bba\u6570\u636e | \u5931\u6548\u5f85\u66f4\u65b0 |\n| \u26a0\ufe0f | `/douyin_music_videos/` | \u722c\u53d6\u914d\u4e50\u4f5c\u54c1\u6570\u636e | \u5931\u6548\u5f85\u66f4\u65b0 |\n| \ud83d\ude80 | `/douyin_profile_videos/` | \u722c\u53d6\u7528\u6237\u4e3b\u9875\u89c6\u9891\u6570\u636e | \u65e0\u5df2\u77e5\u95ee\u9898 |\n| \ud83d\ude80 | `/douyin_profile_liked_videos/` | \u722c\u53d6\u7528\u6237\u4e3b\u9875\u5df2\u70b9\u8d5e\u89c6\u9891\u6570\u636e | \u65e0\u5df2\u77e5\u95ee\u9898 |\n\n> TikTok\u76f8\u5173\u63a5\u53e3\u751f\u4ea7\u90e8\u7f72 - API tags: TikTok\n\n| \u72b6\u6001 | API\u7aef\u70b9\u8def\u5f84 | \u529f\u80fd | issue |\n| :---: | :---: | :---: | :---: |\n| \ud83d\ude80 | `/tiktok_video_data/` | \u722c\u53d6\u5355\u4e2a\u89c6\u9891\u6570\u636e | \u65e0\u5df2\u77e5\u95ee\u9898 |\n| \ud83d\ude80 | `/tiktok_video_comments/` | \u722c\u53d6\u5355\u4e2a\u89c6\u9891\u8bc4\u8bba\u6570\u636e | \u65e0\u5df2\u77e5\u95ee\u9898 |\n| \ud83d\ude80 | `/tiktok_music_videos/` | \u722c\u53d6\u914d\u4e50\u4f5c\u54c1\u6570\u636e | \u65e0\u5df2\u77e5\u95ee\u9898 |\n| \ud83d\ude80 | `/tiktok_profile_videos/` | \u722c\u53d6\u7528\u6237\u4e3b\u9875\u89c6\u9891\u6570\u636e | \u65e0\u5df2\u77e5\u95ee\u9898 |\n| \ud83d\ude80 | `/tiktok_profile_liked_videos/` | \u722c\u53d6\u7528\u6237\u4e3b\u9875\u5df2\u70b9\u8d5e\u89c6\u9891\u6570\u636e | \u65e0\u5df2\u77e5\u95ee\u9898 |\n\n## \u5f85\u529e\u4e8b\u5b9c `Todo` \u5217\u8868\n\n- [ ] \u26a0\ufe0f \u4fee\u590d`/douyin_video_comments/`\u7aef\u70b9\n- [ ] \u26a0\ufe0f \u4fee\u590d`/douyin_music_videos/`\u7aef\u70b9\n\n## \u4f7f\u7528\u793a\u4f8b\n\n```python\nasync def async_test() -> None:\n    # \u5f02\u6b65\u6d4b\u8bd5/Async test\n\n    tiktok_url = 'https://www.tiktok.com/@evil0ctal/video/7156033831819037994'\n\n    tiktok_music_url = 'https://www.tiktok.com/music/original-sound-7128362040359488261'\n\n    douyin_url = 'https://www.douyin.com/video/7153585499477757192'\n\n    douyin_user_url = 'https://www.douyin.com/user/MS4wLjABAAAA-Hu1YKTuhE3QkCHD5yU26k--RUZiaoMRtpfmeid-Z_o'\n\n    print(\"Test start...\\n\")\n    start_time = time.time()\n\n    # \u83b7\u53d6TikHub\u8bf7\u6c42\u5934/Get TikHub request header\n    print(\"Running test : API.authenticate()\")\n    await api.authenticate()\n\n    # \u83b7\u53d6TikHub\u7528\u6237\u4fe1\u606f/Get TikHub user information\n    print(\"Running test : API.get_user_info()\")\n    await api.get_user_info()\n\n    print(\"\\nRunning ALL TikTok methods test...\\n\")\n\n    # \u83b7\u53d6\u5355\u4e2a\u89c6\u9891\u6570\u636e/Get single video data\n    print(\"Running test : API.get_tiktok_video_data()\")\n    await api.get_tiktok_video_data(tiktok_url)\n\n    # \u83b7\u53d6\u83b7\u53d6\u7528\u6237\u4e3b\u9875\u7684\u6240\u6709\u89c6\u9891\u6570\u636e/Get all video data on the user's homepage\n    print(\"Running test : API.get_tiktok_profile_videos()\")\n    aweme_list = await api.get_tiktok_profile_videos(tiktok_url, 20)\n    print(f'Get {len(aweme_list)} videos from profile')\n\n    # \u83b7\u53d6\u7528\u6237\u4e3b\u9875\u7684\u6240\u6709\u70b9\u8d5e\u89c6\u9891\u6570\u636e/Get all liked video data on the user's homepage\n    print(\"Running test : API.get_tiktok_profile_liked_videos()\")\n    aweme_list = await api.get_tiktok_profile_liked_videos(tiktok_url, 20)\n    print(f'Get {len(aweme_list)} liked videos from profile')\n\n    # \u83b7\u53d6TikTok\u89c6\u9891\u7684\u6240\u6709\u8bc4\u8bba\u6570\u636e/Get all comment data of TikTok video\n    print(\"Running test : API.get_tiktok_video_comments()\")\n    comments_list = await api.get_tiktok_video_comments(tiktok_url, 20)\n    print(f'Get {len(comments_list)} comments from video')\n\n    # \u83b7\u53d6\u97f3\u4e50\u9875\u9762\u4e0a\u7684\u6240\u6709(\u7406\u8bba\u4e0a\u80fd\u6293\u53d6\u5230\u7684)\u89c6\u9891\u6570\u636e/Get all (theoretically) video data on the music page\n    print(\"Running test : API.get_tiktok_music_videos()\")\n    aweme_list = await api.get_tiktok_music_videos(tiktok_music_url, 20)\n    print(f'Get {len(aweme_list)} videos from music')\n\n    print(\"\\nRunning ALL Douyin methods test...\\n\")\n\n    # \u83b7\u53d6\u5355\u4e2a\u89c6\u9891\u6570\u636e/Get single video data\n    print(\"Running test : API.get_douyin_video_data()\")\n    await api.get_douyin_video_data(douyin_url)\n\n    # \u83b7\u53d6\u83b7\u53d6\u7528\u6237\u4e3b\u9875\u7684\u6240\u6709\u89c6\u9891\u6570\u636e/Get all video data on the user's homepage\n    print(\"Running test : API.get_douyin_profile_videos()\")\n    aweme_list = await api.get_douyin_profile_videos(douyin_user_url, 20)\n    print(f'Get {len(aweme_list)} videos from profile')\n\n    # \u83b7\u53d6\u7528\u6237\u4e3b\u9875\u7684\u6240\u6709\u70b9\u8d5e\u89c6\u9891\u6570\u636e/Get all liked video data on the user's homepage\n    print(\"Running test : API.get_douyin_profile_liked_videos()\")\n    aweme_list = await api.get_douyin_profile_liked_videos(douyin_user_url, 20)\n\n    # \u603b\u8017\u65f6/Total time\n    total_time = round(time.time() - start_time, 2)\n    print(\"\\nTest completed, total time: {}s\".format(total_time))\n\n\nif __name__ == '__main__':\n    api = API(\n        username='test',\n        password='test',\n        proxy=None,\n    )\n    asyncio.run(async_test())\n```\n\n\n",
    "bugtrack_url": null,
    "license": "Apache V2.0 License",
    "summary": "Douyin/TikTok async data scraper.",
    "version": "1.0.1",
    "split_keywords": [
        "tiktok",
        "douyin",
        "\u6296\u97f3",
        "scraper",
        "crawler",
        "api",
        "download",
        "video",
        "no watermark",
        "async"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "md5": "1e573f2a469503954a6b856b32df008a",
                "sha256": "6cd8c8e49cb6a0aa507584e85c1a358f6f64f1db248f591ee7c0c924539f82ee"
            },
            "downloads": -1,
            "filename": "tikhub-1.0.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "1e573f2a469503954a6b856b32df008a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 10456,
            "upload_time": "2022-12-20T00:15:13",
            "upload_time_iso_8601": "2022-12-20T00:15:13.557987Z",
            "url": "https://files.pythonhosted.org/packages/4a/01/b9eba1a3e7c469bf881a941f91bcbad49d6b8f66c4110ad99d23bee70825/tikhub-1.0.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "md5": "10eb095a2aea48c60856123ff428fdf6",
                "sha256": "94bac745c23965f05fd642fabd9c18d682c9bcf663ef46d191efb5f64453703d"
            },
            "downloads": -1,
            "filename": "tikhub-1.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "10eb095a2aea48c60856123ff428fdf6",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 10725,
            "upload_time": "2022-12-20T00:15:16",
            "upload_time_iso_8601": "2022-12-20T00:15:16.758451Z",
            "url": "https://files.pythonhosted.org/packages/89/86/26006eefee8f64332efc8c77d9190c6f892090bffb123a17b7af3045fa34/tikhub-1.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2022-12-20 00:15:16",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "orgs",
    "github_project": "TikHubIO",
    "lcname": "tikhub"
}
        
Elapsed time: 0.02026s