{"id":17272665,"url":"https://github.com/johnserf-seed/f2","last_synced_at":"2025-05-14T10:10:42.010Z","repository":{"id":108001084,"uuid":"589261862","full_name":"Johnserf-Seed/f2","owner":"Johnserf-Seed","description":"High-speed downloader for multiple platforms","archived":false,"fork":false,"pushed_at":"2025-04-04T15:43:55.000Z","size":6443,"stargazers_count":835,"open_issues_count":38,"forks_count":170,"subscribers_count":15,"default_branch":"main","last_synced_at":"2025-04-06T04:36:13.584Z","etag":null,"topics":["api","bark","bilibili","douyin","downloader","pypi","tiktok","tools","twitter","weibo"],"latest_commit_sha":null,"homepage":"http://f2.wiki/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Johnserf-Seed.png","metadata":{"files":{"readme":"README.en.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.en.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-15T16:00:01.000Z","updated_at":"2025-04-06T03:31:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"762378b0-0977-4fa8-a0de-c538d70e05d6","html_url":"https://github.com/Johnserf-Seed/f2","commit_stats":null,"previous_names":["johnserf-seed/f2"],"tags_count":8,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Johnserf-Seed%2Ff2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Johnserf-Seed%2Ff2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Johnserf-Seed%2Ff2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Johnserf-Seed%2Ff2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Johnserf-Seed","download_url":"https://codeload.github.com/Johnserf-Seed/f2/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248585743,"owners_count":21128980,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","bark","bilibili","douyin","downloader","pypi","tiktok","tools","twitter","weibo"],"created_at":"2024-10-15T08:49:10.882Z","updated_at":"2025-04-12T14:50:07.880Z","avatar_url":"https://github.com/Johnserf-Seed.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/Johnserf-Seed/f2/raw/main/docs/public/f2-logo-with-shadow-svg@0.5x.svg\" alt=\"Logo\"\u003e\n\u003c/p\u003e\n\n[![Downloads](https://pepy.tech/badge/f2/month)](https://pepy.tech/project/f2)\n[![PyPI version](https://badge.fury.io/py/f2.svg)](https://badge.fury.io/py/f2)\n[![Dev Branch](https://badgen.net/badge/branch/v0.0.1.7-pw2/blue)](https://github.com/Johnserf-Seed/f2/tree/v0.0.1.7-pw2)\n[![Discord](https://img.shields.io/discord/1146473603450282004?label=Discord)](https://discord.gg/3PhtPmgHf8)\n[![codecov](https://codecov.io/gh/Johnserf-Seed/f2/graph/badge.svg?token=T9DH4QPZSS)](https://codecov.io/gh/Johnserf-Seed/f2)\n[![TikHub](https://img.shields.io/badge/%E8%B5%9E%E5%8A%A9%E5%95%86-TikHub-orange?style=flat-square\u0026logo=tiktok)](https://beta-web.tikhub.io/users/signup?referral_code=6hLcGD94)\n[![APACHE-2.0](https://img.shields.io/github/license/johnserf-seed/f2)](https://github.com/Johnserf-Seed/f2/blob/main/LICENSE)\n\n\n[🇨🇳 简体中文 readme](https://github.com/Johnserf-Seed/f2/blob/main/README.md) • [🇬🇧 English readme](https://github.com/Johnserf-Seed/f2/blob/main/README.en.md)\n\n`F2` is a [`Python` library](https://pypi.org/project/f2/) that provides multi-platform content downloading and API data processing. It supports platforms like `DouYin`、`TikTok`、`Twitter`、`WeiBo`, and is easily adaptable to more platforms.\n\n\u003cimg src='https://github.com/user-attachments/assets/92a70f27-c93f-422e-ba9a-040060323654'\u003e\n\n## 🚀 Quick Start\n\n### ⚙️ Installation\n\n- [Prerequisites](https://f2.wiki/install#%E5%BF%85%E5%A4%87%E6%9D%A1%E4%BB%B6)\n- [Package Manager Installation](https://f2.wiki/install#%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8%E5%AE%89%E8%A3%85)\n- [Compiled Installation](https://f2.wiki/install#%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85)\n\n### ⚡ Quick Use\n\n- [Startup and Execution](https://f2.wiki/quick-start#%E5%90%AF%E5%8A%A8%E5%92%8C%E8%BF%90%E8%A1%8C)\n- [What's the Next Step?](https://f2.wiki/quick-start#%E4%B8%8B%E4%B8%80%E6%AD%A5%E6%98%AF%E4%BB%80%E4%B9%88)\n\n### 📋 Configuration File\n\n- [Main Configuration File](https://f2.wiki/site-config#%E4%B8%BB%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6)\n- [Initialize Configuration File](https://f2.wiki/site-config#%E5%88%9D%E5%A7%8B%E5%8C%96%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6)\n- [Custom Configuration File](https://f2.wiki/site-config#%E8%87%AA%E5%AE%9A%E4%B9%89%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6)\n- [Cookie Configuration](https://f2.wiki/site-config#%E9%85%8D%E7%BD%AEcookie)\n- [Configuration File Location](https://f2.wiki/site-config#%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%9A%84%E4%BD%8D%E7%BD%AE)\n- [What's the Next Step?](https://f2.wiki/site-config#%E4%B8%8B%E4%B8%80%E6%AD%A5%E6%98%AF%E4%BB%80%E4%B9%88)\n\n### 💻 Command Line\n\n- [CLI Temporary Configuration](https://f2.wiki/cli#cli%E4%B8%B4%E6%97%B6%E9%85%8D%E7%BD%AE)\n- [Expansion](https://f2.wiki/cli#%E6%8B%93%E5%B1%95)\n- [App CLI](https://f2.wiki/cli#%E5%BA%94%E7%94%A8%E5%91%BD%E4%BB%A4%E8%A1%8C)\n\n### 📚 Advanced Usage\n\n- [DouYin Bulk Collection of Live Streams](https://f2.wiki/advance-guide#%E6%89%B9%E9%87%8F%E9%87%87%E9%9B%86%E7%9B%B4%E6%92%AD%E6%B5%81)\n- [DouYin Live Danmaku Forwarding](https://f2.wiki/advance-guide#%E7%9B%B4%E6%92%AD%E5%BC%B9%E5%B9%95%E8%BD%AC%E5%8F%91)\n- The documentation is still being updated...\n\n## 🧐 FAQ\n\n- [Frequently Asked Questions](https://f2.wiki/faq)\n\n## 👏 Team\n\n- [Team Introduction](https://f2.wiki/team)\n\n### 📘 Developer Guide\n\n- [A Must-Read for Developers](https://f2.wiki/guide/what-is-f2)\n\n### 📝 API Examples\n\n- [Usage Example](https://f2.wiki/guide/api-examples)\n\n### 🧩 Calling Examples\n\n- [Bark](https://f2.wiki/guide/apps/bark/)\n- [DouYin](https://f2.wiki/guide/apps/douyin/)\n- [TikTok](https://f2.wiki/guide/apps/tiktok/)\n- [Twitter](https://f2.wiki/guide/apps/twitter/)\n- [WeiBo](https://f2.wiki/guide/apps/weibo/)\n\n### 🖥️ Command Line Guide\n\n- [Bark](https://f2.wiki/guide/apps/bark/cli)\n- [DouYin](https://f2.wiki/guide/apps/douyin/cli)\n- [TikTok](https://f2.wiki/guide/apps/tiktok/cli)\n- [Twitter](https://f2.wiki/guide/apps/twitter/cli)\n- [WeiBo](https://f2.wiki/guide/apps/weibo/cli)\n\n## ✨ New Changes\n\nWhen downloading or upgrading to a different version of `F2`, please note the following critical version updates.\n\n\u003cdetails\u003e\n  \u003csummary\u003e🛠️ v0.0.1.7-pw2\u003c/summary\u003e\n\n  - 🚀 **New Bark App Support**\n    Please go to the App Store to download [Bark](https://apps.apple.com/cn/app/id1403753865), and complete the relevant configuration in the [F2 configuration file](https://f2.wiki/site-config#%E4%B8%BB%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6).\n  - 🛡️ **Open `ab` Algorithm**\n    The full version of the open-source `ab` algorithm is now available, supporting custom `UA`. Please ensure the custom `UA` conforms to the standard.\n  - 📡 **New Live Stream Bullet Screen Forwarding Feature**\n    Supports `douyin` and `tiktok` live stream bullet screen forwarding. Please follow the [WSS Configuration Guide](https://f2.wiki/guide/what-is-f2#wss%E9%85%8D%E7%BD%AE) for parameter setup.\n  - 🔔 **Enable Notification Push**\n    To enable application notifications, set the `enable_bark` parameter to `true` in the [F2 configuration file](https://f2.wiki/site-config#%E4%B8%BB%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6).\n  - 📄 **More Change Details**\n    Please see the full [ChangeLog](https://github.com/Johnserf-Seed/f2/blob/main/CHANGELOG.md#0017---2024-12-31).\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e📌 v0.0.1.6-pw2\u003c/summary\u003e\n\n  - 🛠️ **Configuration File Format Updated**\n    If you are using an old configuration file, please pay attention to the migration.\n  - 🌍 **Time Zone Standardized**\n    The default time zone for all timestamps is set to `UTC/GMT+08:00`.\n  - 📁 **File Format Adjustments**\n    - `douyin` live stream filenames are now adjusted to `flv`.\n    - The gallery format has been reverted to `webp`.\n  - 🔄 **Bug Fixes**\n    Fixed the `tiktok` video address `403` error.\n    👉 [Learn more solutions](https://f2.wiki/faq#tiktok-403-forbidden)\n  - 🛡️ **Algorithm Optimization**\n    `douyin` now uses the `ab` algorithm by default for requests. (The full version of the `ab` algorithm will be open-sourced soon)\n  - 📄 **More Change Details**\n    👉 [View ChangeLog](https://github.com/Johnserf-Seed/f2/blob/main/CHANGELOG.md#0016---2024-05-04)\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e📡 v0.0.1.5-pw2\u003c/summary\u003e\n\n  - 🛡️ **Custom UA Support**\n    The `XBogus` parameter now supports custom `UA`. Please ensure the `UA` conforms to the standard.\n  - 📊 **Database Rebuild**\n    The rebuilt database contains the raw data from the API.\n    👉 If you need to keep old records, please pay attention to migration or backup.\n  - 🔄 **Unified Return Type**\n    The return type for all `fetch` methods has been unified to the filter type. Please pay attention to the changes.\n  - 🛠️ **New Feature**\n    A new `_to_raw` method has been added to convert filters to raw API data.\n  - 📝 **Filename Template Update**\n    If the filename does not meet the new standard, an exception will be thrown. Please check and adjust accordingly.\n  - 🔗 **Link Parsing Fix**\n    Fixed the issue with `douyin` collection page links not being parsed.\n    👉 [Learn more](#抖音合集作品)\n  - 📄 **More Change Details**\n    👉 [View ChangeLog](https://github.com/Johnserf-Seed/f2/blob/main/CHANGELOG.md#0015---2024-04-04)\n\u003c/details\u003e\n\n## 📑 Documentation\n\nThe goal of `F2` is to provide a simple and easy-to-use interface that allows users to quickly retrieve content data.\nIn the `preview` version, many features are not fully developed. If you encounter any issues, please submit an `issue` in the `F2` project.\nThe [project documentation](https://f2.wiki/) is still being improved and may be delayed. Please stay tuned.\n\n## 🗓️ Todo\n\n- Support for `BiliBili` \u0026 `NetEaseMusic` will be added in version `0.0.1.8`.\n- More `API` and `CLI` features will be maintained in version `0.0.1.8`.\n- Optimized the `F2` CLI experience.\n- Added `Socket` proxy support.\n- Added support for `Cookie` pool, `Proxy` pool, `User-Agent` pool, etc.\n- Added the `F2` WebAPI version.\n- [More plans](https://github.com/Johnserf-Seed/f2/discussions/203)\n\n## 🐛 Updates\n\n[ChangeLog](https://github.com/Johnserf-Seed/f2/blob/main/CHANGELOG.md)\n\n## 💡 Applications \u0026 Features\n\nFeature status: 🟢 Represents implemented, 🟡 Represents being implemented, 🟤 Represents temporarily not implemented, 🔵 Represents future implementation, 🔴 Represents deprecation.\nAccount status: ⚪ Represents unknown, 🟣 Represents login required (ignores own account privacy settings), ⚫ Represents not login required (visible to guests only).\n\nFor the complete list of features, please refer to the [API Documentation](https://f2.wiki/guide/api-examples).\n\n\u003cdetails\u003e\n  \u003csummary\u003e 📠 Bark \u003c/summary\u003e\n\n  |Feature|Account Status|Interface|Feature Status|\n  |---|---|---|---|\n  |Send Notification (GET)|⚪|`fetch_bark_notification`|🟢|\n  |Send Notification (POST)|⚪|`post_bark_notification`|🟢|\n  |Send Encrypted Notification|⚪|`cipher_bark_notification`|🟢|\n\n  |Utility|Class Name|Interface|Feature Status|\n  |---|---|---|---|\n  |Manage Client Configuration|`ClientConfManager`|-|🟢|\n  |Generate Random Numeric Bytes|-|`generate_numeric_bytes`|🟢|\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e 🎶 DouYin \u003c/summary\u003e\n\n  - 🟣 Indicates that login is required to download works that are only visible to oneself, favorited works, works in collection folders, or liked works. (After login, ignores own privacy settings and obtains personalized content)\n  - ⚫ Indicates that login is not required to download public works, works in collection folders, liked works, etc. (Only downloads works visible to others and pages)\n\n  | Feature | Account Status | API | Status |\n  | --- | --- | --- | --- |\n  | User Information | 🟣⚫ | `fetch_user_profile` | 🟢 |\n  | Single Video (Video, Album, Daily) | 🟣⚫ | `fetch_one_video` | 🟢 |\n  |Live Gallery|🟣⚫|`fetch_one_video`|🟢|\n  | Homepage Videos | 🟣⚫ | `fetch_user_post_videos` | 🟢 |\n  | Liked Videos | 🟣⚫ | `fetch_user_like_videos` | 🟢 |\n  | Collection Folder Videos | 🟣⚫ | `fetch_user_collects_videos` | 🟢 |\n  | Collected Videos | 🟣 | `fetch_user_collection_videos` | 🟢 |\n  | Collected Music | 🟣 | `fetch_user_music_collection` | 🟢 |\n  | Collected Playlist | 🟣 | `fetch_user_mix_collection` | 🔵 |\n  | Collected Series | 🟣 | `fetch_user_series_collection` | 🟤 |\n  | Playlist Videos | ⚫ | `fetch_user_mix_videos` | 🟢 |\n  | Recommended Videos | 🟣⚫ | `fetch_user_feed_videos` | 🟢 |\n  | Related Videos | ⚫ | `fetch_related_videos` | 🟢 |\n  | Live Room Information (Stream Download) | ⚫ | `fetch_user_live_videos`, `fetch_user_live_videos_by_room_id` | 🟢 |\n  | Live Room Load | ⚫ | `fetch_live_im` | 🟢 |\n  | Live Room Danmaku | ⚫ | `fetch_live_danmaku` | 🟢 |\n  | Query User Basic Information|🟣⚫|`fetch_query_user`|🟢|\n  | Followed Users Live | 🟣⚫ | `fetch_user_following_lives` | 🟢 |\n  | Followed Users Information | 🟣⚫ | `fetch_user_following` | 🟢 |\n  | Followers Information | 🟣⚫ | `fetch_user_follower` | 🟢 |\n  | Followed Users Videos | 🟣⚫ | `fetch_user_following_videos` | 🟤 |\n  | Followers Videos | 🟣⚫ | `fetch_user_follower_videos` | 🟤 |\n  | Friends' Videos | 🟣 | `fetch_friend_feed_videos` | 🟢 |\n  |Increase Play Count|🟣⚫|`fetch_post_stats`|🟢|\n  | Search Videos | ⚫ | `fetch_search_videos` | 🔵 |\n  | Search Users | ⚫ | `fetch_search_users` | 🔵 |\n  | Search Live | ⚫ | `fetch_search_lives` | 🔵 |\n  | Search Suggestions | ⚫ | `fetch_search_suggest` | 🟤 |\n  | Douyin Hot Search | ⚫ | `fetch_hot_search` | 🟤 |\n  | Video Comments | 🟣⚫ | `fetch_video_comments` | 🔵 |\n  | Watch History | 🟣 | `fetch_user_history_read` | 🟤 |\n  | Watch Later | 🟣 | `fetch_user_watch_later` | 🟤 |\n  | ... | ... | ... | ... |\n\n  |Utility|Class Name|Interface|Feature Status|\n  |---|---|---|---|\n  |Manage Client Configuration|`ClientConfManager`| |🟢|\n  |Generate Real msToken|`TokenManager`|`gen_real_msToken`|🟢|\n  |Generate Fake msToken|`TokenManager`|`gen_false_msToken`|🟢|\n  |Generate ttwid|`TokenManager`|`gen_ttwid`|🟢|\n  |Generate webid|`TokenManager`|`gen_webid`|🟢|\n  |Generate verify_fp|`VerifyFpManager`|`gen_verify_fp`|🟢|\n  |Generate s_v_web_id|`VerifyFpManager`|`gen_s_v_web_id`|🟢|\n  |Generate Live Webcast Signature|`DouyinWebcastSignature`|`get_signature`|🟢|\n  |Use Interface Address to Generate Xb Parameters|`XBogusManager`|`str_2_endpoint`|🟢|\n  |Use Interface Model to Generate Xb Parameters|`XBogusManager`|`model_2_endpoint`|🟢|\n  |Use Interface Address to Generate Ab Parameters|`ABogusManager`|`str_2_endpoint`|🟢|\n  |Use Interface Model to Generate Ab Parameters|`ABogusManager`|`model_2_endpoint`|🟢|\n  |Extract Single User ID|`SecUserIdFetcher`|`get_sec_user_id`|🟢|\n  |Extract List of User IDs|`SecUserIdFetcher`|`get_all_sec_user_id`|🟢|\n  |Extract Single Content ID|`AwemeIdFetcher`|`get_aweme_id`|🟢|\n  |Extract List of Content IDs|`AwemeIdFetcher`|`get_all_aweme_id`|🟢|\n  |Extract Single Collection ID|`MixIdFetcher`|`get_mix_id`|🟢|\n  |Extract List of Collection IDs|`MixIdFetcher`|`get_all_mix_id`|🟢|\n  |Extract Single Webcast ID|`WebCastIdFetcher`|`get_webcast_id`|🟢|\n  |Extract List of Webcast IDs|`WebCastIdFetcher`|`get_all_webcast_id`|🟢|\n  |Global File Name Formatter|-|`format_file_name`|🟢|\n  |Create User Directory|-|`create_user_folder`|🟢|\n  |Rename User Directory|-|`rename_user_folder`|🟢|\n  |Create or Rename User Directory|-|`create_or_rename_user_folder`|🟢|\n  |Convert JSON Lyrics to LRC Lyrics|-|`json_2_lrc`|🟢|\n \u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e 🎶 TikTok \u003c/summary\u003e\n\n  - 🟣 Indicates that login is required to download works that are only visible to oneself, favorited works, works in collection folders, or liked works. (After login, ignores own privacy settings and obtains personalized content)\n  - ⚫ Indicates that login is not required to download public works, works in collection folders, liked works, etc. (Only downloads works visible to others and pages)\n\n  | Feature | Account Status | Interface | Feature Status |\n  | --- | --- | --- | --- |\n  | User Information | 🟣⚫ | `fetch_user_profile` | 🟢 |\n  | Single Work | 🟣⚫ | `fetch_one_video` | 🟢 |\n  | Home Page Works | 🟣⚫ | `fetch_user_post_videos` | 🟢 |\n  | Liked Works | 🟣⚫ | `fetch_user_like_videos` | 🟢 |\n  | Favorite Works | 🟣⚫ | `fetch_user_collect_videos` | 🟢 |\n  | Playlist  | 🟣⚫ | `fetch_play_list` | 🟢 |\n  | Playlist Works | 🟣⚫ | `fetch_user_mix_videos` | 🟢 |\n  | Post Search|🟣⚫|`fetch_search_videos`|🟢|\n  | Live Room Information (Stream Download) |⚫|`fetch_user_live_videos`|🟢|\n  |Live Room Danmaku Load|⚫|`fetch_live_im`|🟢|\n  |Live Room Danmaku|⚫|`fetch_live_danmaku`|🟢|\n  | Check If The webcast Is Alive|🟣⚫|`fetch_check_live_alive`|🟢|\n  | ... | ... | ... | ... |\n\n  |Utility|Class Name|Interface|Feature Status|\n  |---|---|---|---|\n  |Manage Client Configuration|`ClientConfManager`| |🟢|\n  |Generate Real msToken|`TokenManager`|`gen_real_msToken`|🟢|\n  |Generate Fake msToken|`TokenManager`|`gen_false_msToken`|🟢|\n  |Generate ttwid|`TokenManager`|`gen_ttwid`|🟢|\n  |Generate odin_tt|`TokenManager`|`gen_odin_tt`|🟢|\n  |Use Interface Address to Generate Xb Parameters|`XBogusManager`|`str_2_endpoint`|🟢|\n  |Use Interface Model to Generate Xb Parameters|`XBogusManager`|`model_2_endpoint`|🟢|\n  |Extract Single User ID|`SecUserIdFetcher`|`get_secuid`|🟢|\n  |Extract List of User IDs|`SecUserIdFetcher`|`get_all_secuid`|🟢|\n  |Extract Single User Unique ID|`SecUserIdFetcher`|`get_uniqueid`|🟢|\n  |Extract List of User Unique IDs|`SecUserIdFetcher`|`get_all_uniqueid`|🟢|\n  |Extract List of User IDs|`SecUserIdFetcher`|`get_all_secUid`|🟢|\n  |Extract Single Content ID|`AwemeIdFetcher`|`get_aweme_id`|🟢|\n  |Extract List of Content IDs|`AwemeIdFetcher`|`get_all_aweme_id`|🟢|\n  |Generate Device ID|`DeviceIdManager`|`gen_device_id`|🟢|\n  |Generate Device ID List|`DeviceIdManager`|`gen_device_ids`|🟢|\n  |Global File Name Formatter|-|`format_file_name`|🟢|\n  |Create User Directory|-|`create_user_folder`|🟢|\n  |Rename User Directory|-|`rename_user_folder`|🟢|\n  |Create or Rename User Directory|-|`create_or_rename_user_folder`|🟢|\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e🐦 Twitter\u003c/summary\u003e\n\n  |Feature|Account Status|Interface|Feature Status|\n  |---|---|---|---|\n  |Tweet Detail|🟣⚫|`fetch_tweet_detail`|🟢|\n  |User Profile|🟣⚫|`fetch_user_profile`|🟢|\n  |Home Tweets|🟣⚫|`fetch_post_tweet`|🟢|\n  |Liked Tweets|🟣|`fetch_like_tweet`|🟢|\n  |Bookmarked Tweets|🟣|`fetch_bookmark_tweet`|🟢|\n\n  |Utility|Class Name|Interface|Feature Status|\n  |---|---|---|---|\n  |Manage Client Configuration|`ClientConfManager`| |🟢|\n  |Extract User Unique ID|`UniqueIdFetcher`|`get_unique_id`|🟢|\n  |Extract List of User Unique IDs|`UniqueIdFetcher`|`get_all_unique_ids`|🟢|\n  |Extract Tweet ID|`TweetIdFetcher`|`get_tweet_id`|🟢|\n  |Extract List of Tweet IDs|`TweetIdFetcher`|`get_all_tweet_ids`|🟢|\n  |Global File Name Formatter|-|`format_file_name`|🟢|\n  |Create User Directory|-|`create_user_folder`|🟢|\n  |Rename User Directory|-|`rename_user_folder`|🟢|\n  |Create or Rename User Directory|-|`create_or_rename_user_folder`|🟢|\n  |Extract Tweet Text|-|`extract_desc`|🟢|\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e📱 WeiBo\u003c/summary\u003e\n\n  |Feature|Account Status|Interface|Feature Status|\n  |---|---|---|---|\n  |User Info|🟣⚫|`fetch_user_info`|🟢|\n  |User Detail|🟣⚫|`fetch_user_detail`|🟢|\n  |Home Weibo|🟣⚫|`fetch_user_weibo`|🟢|\n  |Weibo Detail|🟣⚫|`fetch_weibo_detail`|🟢|\n\n  |Utility|Class Name|Interface|Feature Status|\n  |---|---|---|---|\n  |Manage Client Configuration|`ClientConfManager`| |🟢|\n  |Generate Visitor Cookie|`VisitorManager`|`gen_visitor`|🟢|\n  |Extract Weibo ID|`WeiboIdFetcher`|`get_weibo_id`|🟢|\n  |Extract List of Weibo IDs|`WeiboIdFetcher`|`get_all_weibo_id`|🟢|\n  |Extract Weibo User ID|`WeiboUidFetcher`|`get_weibo_uid`|🟢|\n  |Extract List of Weibo User IDs|`WeiboUidFetcher`|`get_all_weibo_uid`|🟢|\n  |Extract Weibo User Nickname|`WeiboScreenNameFetcher`|`get_weibo_screen_name`|🟢|\n  |Extract List of Weibo User Nicknames|`WeiboScreenNameFetcher`|`get_all_weibo_screen_name`|🟢|\n  |Global File Name Formatter|-|`format_file_name`|🟢|\n  |Create User Directory|-|`create_user_folder`|🟢|\n  |Rename User Directory|-|`rename_user_folder`|🟢|\n  |Create or Rename User Directory|-|`create_or_rename_user_folder`|🟢|\n  |Extract Weibo Text|-|`extract_desc`|🟢|\n\u003c/details\u003e\n\n## 📸 Screenshots\n\n\u003cdetails\u003e\n  \u003csummary\u003e🎬 Bark\u003c/summary\u003e\n\n  ### Send Notification (GET)\n\n  \u003cimg src='https://github.com/user-attachments/assets/9c977737-c172-420a-9d7f-6f05bc843957'\u003e\n\n  \u003cimg src='https://github.com/user-attachments/assets/9a59f9d6-cc8a-48bb-9a75-d075a9e13498'\u003e\n\n  ### Send Notification (POST)\n\n  \u003cimg src='https://github.com/user-attachments/assets/7a3e9054-a156-4be7-bf93-90d0963f8390'\u003e\n\n  \u003cimg src='https://github.com/user-attachments/assets/9a59f9d6-cc8a-48bb-9a75-d075a9e13498'\u003e\n\n  ### Send Encrypted Notification\n\n  \u003cimg src='https://github.com/user-attachments/assets/8a3cb67d-e1b6-40d3-b4c1-543d098eb481'\u003e\n\n  \u003cimg src='https://github.com/user-attachments/assets/9a59f9d6-cc8a-48bb-9a75-d075a9e13498'\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e🎬 DouYin\u003c/summary\u003e\n\n  ### Douyin Single Video\n\n  \u003cimg src='https://github.com/user-attachments/assets/01b62283-322a-42f1-96d7-bc1431cc0e1b'\u003e\n\n  ### Douyin Home Page Videos\n\n  \u003cimg src='https://github.com/user-attachments/assets/6353a309-9f8d-4284-9f90-267d683ac9cd'\u003e\n\n  ### Douyin Liked Videos\n\n  \u003cimg src='https://github.com/user-attachments/assets/018d2b6f-d874-41f9-9c20-e1a17bdf16e0'\u003e\n\n  ### Douyin Bookmarked Videos\n\n  \u003cimg src='https://github.com/user-attachments/assets/0334b1b0-1b61-4cbb-b47a-0ad0ce82e315'\u003e\n\n  ### Douyin Favorites Videos\n\n  \u003cimg src='https://github.com/user-attachments/assets/ef9fc0e4-5d4f-4ad6-9fa1-e305f9b60c83'\u003e\n\n  ### Douyin Favorite Sounds\n\n  \u003cimg src='https://github.com/user-attachments/assets/414e20eb-0837-48b5-8a7b-622e4d0aafe1'\u003e\n\n  ### Douyin Playlist Videos\n\n  Supports parsing any video link in a playlist\n  \u003cimg src='https://github.com/user-attachments/assets/4cd85a9f-d684-4c02-8106-fce567f05f0b'\u003e\n\n  Playlist Link Parsing\n  \u003cimg src='https://github.com/user-attachments/assets/04a3553b-93f8-4f99-a9f2-689bef881899'\u003e\n\n  ### Douyin Live Recording\n\n  Single Live Recording\n  \u003cimg src='https://github.com/user-attachments/assets/63c31ad3-3026-4ae8-8fc1-752ba2117915'\u003e\n\n  Batch Live Recording\n  \u003cimg src='https://github.com/user-attachments/assets/6e8caaa7-2bfe-4542-b896-ae4f3c70877f'\u003e\n\n  ### Douyin Recommendations\n\n  \u003cimg src=\"https://github.com/user-attachments/assets/c64731a1-5383-4810-af15-8125330856a8\"\u003e\n\n  ### Douyin Friend's Videos\n\n  \u003cimg src=\"https://github.com/user-attachments/assets/c73feec7-f158-4eb1-be3b-9a957507ef45\"\u003e\n\n  ### Douyin Live Danmaku\n\n  \u003cvideo src=\"https://github.com/Johnserf-Seed/f2/assets/40727745/500d1eaf-59ba-44ba-849b-666c0ddf8469\" width=\"70%\" height=\"auto\" autoplay loop style=\"border-radius: 8px; overflow: hidden;\"\u003e\u003c/video\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e🎬 TikTok\u003c/summary\u003e\n\n  ### TikTok Single Video\n\n  \u003cimg src='https://github.com/user-attachments/assets/1ddee9ec-cd4c-4dc0-81a0-970e5d1cb831'\u003e\n\n  ### TikTok Home Page Videos\n\n  \u003cimg src='https://github.com/user-attachments/assets/a45f2186-cf0a-4c21-8502-267147936e06'\u003e\n\n  ### TikTok Liked Videos\n\n  \u003cimg src='https://github.com/user-attachments/assets/11e8e70f-ee32-422e-a79d-f65276b12652'\u003e\n\n  ### TikTok Bookmarked Videos\n\n  \u003cimg src='https://github.com/user-attachments/assets/bcd584fa-8c8c-4846-8be0-3c7d2c85ec5d'\u003e\n\n  ### TikTok Playlist Videos\n\n  \u003cimg src='https://github.com/user-attachments/assets/c7ba8740-b9a0-4a8d-98cc-ae8fab2393e2'\u003e\n\n  ### TikTok Video Search\n  \u003cimg src='https://github.com/user-attachments/assets/c69b76e5-b168-4966-af5d-c9325af2015e'\u003e\n\n  ### TikTok Live Danmaku\n\n  \u003cvideo src=\"https://github.com/Johnserf-Seed/f2/assets/40727745/500d1eaf-59ba-44ba-849b-666c0ddf8469\" width=\"70%\" height=\"auto\" autoplay loop style=\"border-radius: 8px; overflow: hidden;\"\u003e\u003c/video\u003e\n  ps. Too lazy to record, using Douyin's danmaku, the effect is the same.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e🎬 Twitter\u003c/summary\u003e\n\n  ### x Single Tweet\n\n  \u003cimg src='https://github.com/user-attachments/assets/5858e19f-e4e6-4279-a1a4-56ac2878afde'\u003e\n\n  ### x Home Page Tweets\n\n  \u003cimg src='https://github.com/user-attachments/assets/43f9665e-3086-4078-a093-59a8081bb77c'\u003e\n\n  ### x Liked Tweets\n\n  \u003cimg src='https://github.com/user-attachments/assets/c8b592f6-84a5-4a7d-b8df-9a8f2e25abb0'\u003e\n\n  ### x Bookmarked Tweets\n\n  \u003cimg src='https://github.com/user-attachments/assets/e4aa7adf-52de-4a7c-a1f4-f61423047ac8'\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e🎬 WeiBo\u003c/summary\u003e\n\n  ### WeiBo Single Weibo\n\n  \u003cimg src='https://github.com/user-attachments/assets/4038766d-d601-42a9-8f35-6243b3744bd7'\u003e\n\n  ### WeiBo Home Page Weibo\n\n  \u003cimg src='https://github.com/user-attachments/assets/e02c5007-4c17-4d97-a648-6aabb328a618'\u003e\n\u003c/details\u003e\n\n## 📦 Structures\n\n\u003cdetails\u003e\n  \u003csummary\u003e📁 Project Catalogs\u003c/summary\u003e\n\n  ```bash\n  .\n  |___.coverage\n  |___.github\n  | |___dependabot.yml\n  | |___ISSUE_TEMPLATE\n  | | |___ask-question.md\n  | | |___bug-report.md\n  | | |___feature_request.md\n  | |___workflows\n  | | |___Codecov.yml\n  | | |___deploy.yml\n  | | |___issue_similarity.yml\n  |___.gitignore\n  |___.vscode\n  | |___launch.json\n  | |___settings.json\n  |___babel.cfg\n  |___CHANGELOG.md\n  |___CNAME\n  |___CODE_OF_CONDUCT.md\n  |___CONTRIBUTING.en.md\n  |___CONTRIBUTING.md\n  |___CONTRIBUTORS.en.md\n  |___CONTRIBUTORS.md\n  |___coverage.xml\n  |___docs\n  | |___.vitepress\n  | | |___config.mts\n  | | |___theme\n  | | | |___index.ts\n  | | | |___Layout.vue\n  | | | |___styles\n  | | | | |___vars.css\n  | |___advance-guide.md\n  | |___cli.md\n  | |___en\n  | | |___advance-guide.md\n  | | |___api-examples.md\n  | | |___cli.md\n  | | |___guide\n  | | | |___api-examples.md\n  | | | |___apps\n  | | | | |___bark\n  | | | | | |___cli.md\n  | | | | | |___index.md\n  | | | | |___douyin\n  | | | | | |___cli.md\n  | | | | | |___index.md\n  | | | | |___f2\n  | | | | | |___cli.md\n  | | | | | |___index.md\n  | | | | |___tiktok\n  | | | | | |___cli.md\n  | | | | | |___index.md\n  | | | | |___twitter\n  | | | | | |___cli.md\n  | | | | | |___index.md\n  | | | | |___weibo\n  | | | | | |___cli.md\n  | | | | | |___index.md\n  | | | |___what-is-f2.md\n  | | |___index.md\n  | | |___install.md\n  | | |___markdown-examples.md\n  | | |___question-answer\n  | | | |___qa.md\n  | | |___quick-start.md\n  | | |___site-config.md\n  | | |___snippets\n  | | | |___bark\n  | | | | |___ciphertext.sh\n  | | | | |___client-config.py\n  | | | | |___generate-bytes.py\n  | | | | |___notification.py\n  | | | |___douyin\n  | | | | |___abogus.py\n  | | | | |___aweme-id.py\n  | | | | |___aweme-related.py\n  | | | | |___client-config.py\n  | | | | |___format-file-name.py\n  | | | | |___json-2-lrc.py\n  | | | | |___mix-id.py\n  | | | | |___one-video.py\n  | | | | |___post-stats.py\n  | | | | |___query-user.py\n  | | | | |___sec-user-id.py\n  | | | | |___support-link.md\n  | | | | |___token-manager.py\n  | | | | |___user-collection.py\n  | | | | |___user-collects.py\n  | | | | |___user-feed.py\n  | | | | |___user-folder.py\n  | | | | |___user-follow-live.py\n  | | | | |___user-follower.py\n  | | | | |___user-following.py\n  | | | | |___user-friend.py\n  | | | | |___user-get-add.py\n  | | | | |___user-like.py\n  | | | | |___user-live-im-fetch.py\n  | | | | |___user-live-room-id.py\n  | | | | |___user-live.py\n  | | | | |___user-mix.py\n  | | | | |___user-post.py\n  | | | | |___user-profile.py\n  | | | | |___video-get-add.py\n  | | | | |___webcast-id.py\n  | | | | |___webcast-signature.py\n  | | | | |___xbogus.py\n  | | | |___QA.md\n  | | | |___set-debug.py\n  | | | |___tiktok\n  | | | | |___aweme-id.py\n  | | | | |___check-live-alive.py\n  | | | | |___client-config.py\n  | | | | |___device-id.py\n  | | | | |___format-file-name.py\n  | | | | |___one-video.py\n  | | | | |___sec-uid.py\n  | | | | |___token-manager.py\n  | | | | |___unique-id.py\n  | | | | |___user-collect.py\n  | | | | |___user-folder.py\n  | | | | |___user-get-add.py\n  | | | | |___user-like.py\n  | | | | |___user-live-im-fetch.py\n  | | | | |___user-mix.py\n  | | | | |___user-playlist.py\n  | | | | |___user-post.py\n  | | | | |___user-profile.py\n  | | | | |___video-get-add.py\n  | | | | |___xbogus.py\n  | | | |___twitter\n  | | | | |___client-config.py\n  | | | | |___extract-desc.py\n  | | | | |___format-file-name.py\n  | | | | |___one-tweet.py\n  | | | | |___tweet-ids.py\n  | | | | |___user-bookmark.py\n  | | | | |___user-folder.py\n  | | | | |___user-get-add.py\n  | | | | |___user-like.py\n  | | | | |___user-profile.py\n  | | | | |___user-tweet.py\n  | | | | |___user-unique-ids.py\n  | | | |___weibo\n  | | | | |___client-config.py\n  | | | | |___extract-desc.py\n  | | | | |___extract-uid.py\n  | | | | |___format-file-name.py\n  | | | | |___one-weibo.py\n  | | | | |___user-detail.py\n  | | | | |___user-folder.py\n  | | | | |___user-get-add.py\n  | | | | |___user-profile-by-name.py\n  | | | | |___user-profile.py\n  | | | | |___user-weibo.py\n  | | | | |___visitor-cookie.py\n  | | | | |___weibo-id.py\n  | | | | |___weibo-screen-name.py\n  | | | | |___weibo-uid.py\n  | | |___team.md\n  | |___faq.md\n  | |___guide\n  | | |___api-examples.md\n  | | |___apps\n  | | | |___bark\n  | | | | |___cli.md\n  | | | | |___index.md\n  | | | |___douyin\n  | | | | |___cli.md\n  | | | | |___index.md\n  | | | |___f2\n  | | | | |___cli.md\n  | | | | |___index.md\n  | | | |___tiktok\n  | | | | |___cli.md\n  | | | | |___index.md\n  | | | |___twitter\n  | | | | |___cli.md\n  | | | | |___index.md\n  | | | |___weibo\n  | | | | |___cli.md\n  | | | | |___index.md\n  | | |___what-is-f2.md\n  | |___index.md\n  | |___install.md\n  | |___package.json\n  | |___public\n  | | |___bark\n  | | | |___bark-ciphertext-setting.jpg\n  | | | |___bark-ciphertext.jpg\n  | | | |___bark-key.jpg\n  | | | |___bark-token.jpg\n  | | |___douyin\n  | | | |___batch-lives.png\n  | | | |___cli-start-2.png\n  | | | |___cli-start.png\n  | | | |___code-start-2.png\n  | | | |___code-start.png\n  | | | |___log-2-console.png\n  | | | |___pytest-ok.png\n  | | | |___set-debug.png\n  | | | |___wss-connect.png\n  | | |___f2-help.png\n  | | |___f2-logo-with-no-shadow.png\n  | | |___f2-logo-with-shadow-mini.png\n  | | |___f2-logo-with-shadow-svg@0.25x.svg\n  | | |___f2-logo-with-shadow-svg@0.5x.svg\n  | | |___f2-logo-with-shadow-svg@0.75x.svg\n  | | |___f2-logo-with-shadow-svg@1.0x.svg\n  | | |___f2-logo-with-shadow-svg@1.5x.svg\n  | | |___f2-logo-with-shadow-svg@2.0x.svg\n  | | |___f2-logo-with-shadow.png\n  | | |___f2-logo.ico\n  | |___quick-start.md\n  | |___site-config.md\n  | |___snippets\n  | | |___bark\n  | | | |___ciphertext.sh\n  | | | |___client-config.py\n  | | | |___generate-bytes.py\n  | | | |___notification.py\n  | | |___douyin\n  | | | |___abogus.py\n  | | | |___aweme-id.py\n  | | | |___aweme-related.py\n  | | | |___batch-lives.py\n  | | | |___client-config.py\n  | | | |___format-file-name.py\n  | | | |___json-2-lrc.py\n  | | | |___mix-id.py\n  | | | |___one-video.py\n  | | | |___post-stats.py\n  | | | |___query-user.py\n  | | | |___sec-user-id.py\n  | | | |___support-link.md\n  | | | |___token-manager.py\n  | | | |___user-collection.py\n  | | | |___user-collects.py\n  | | | |___user-feed.py\n  | | | |___user-folder.py\n  | | | |___user-follow-live.py\n  | | | |___user-follower.py\n  | | | |___user-following.py\n  | | | |___user-friend.py\n  | | | |___user-get-add.py\n  | | | |___user-like.py\n  | | | |___user-live-im-fetch.py\n  | | | |___user-live-room-id.py\n  | | | |___user-live.py\n  | | | |___user-mix.py\n  | | | |___user-post.py\n  | | | |___user-profile.py\n  | | | |___video-get-add.py\n  | | | |___webcast-id.py\n  | | | |___webcast-signature.py\n  | | | |___xbogus.py\n  | | |___set-debug.py\n  | | |___tiktok\n  | | | |___aweme-id.py\n  | | | |___check-live-alive.py\n  | | | |___client-config.py\n  | | | |___device-id.py\n  | | | |___format-file-name.py\n  | | | |___one-video.py\n  | | | |___sec-uid.py\n  | | | |___token-manager.py\n  | | | |___unique-id.py\n  | | | |___user-collect.py\n  | | | |___user-folder.py\n  | | | |___user-get-add.py\n  | | | |___user-like.py\n  | | | |___user-live-im-fetch.py\n  | | | |___user-mix.py\n  | | | |___user-playlist.py\n  | | | |___user-post.py\n  | | | |___user-profile.py\n  | | | |___video-get-add.py\n  | | | |___xbogus.py\n  | | |___twitter\n  | | | |___client-config.py\n  | | | |___extract-desc.py\n  | | | |___format-file-name.py\n  | | | |___one-tweet.py\n  | | | |___tweet-ids.py\n  | | | |___user-bookmark.py\n  | | | |___user-folder.py\n  | | | |___user-get-add.py\n  | | | |___user-like.py\n  | | | |___user-profile.py\n  | | | |___user-tweet.py\n  | | | |___user-unique-ids.py\n  | | |___weibo\n  | | | |___client-config.py\n  | | | |___extract-desc.py\n  | | | |___extract-uid.py\n  | | | |___format-file-name.py\n  | | | |___one-weibo.py\n  | | | |___user-detail.py\n  | | | |___user-folder.py\n  | | | |___user-get-add.py\n  | | | |___user-profile-by-name.py\n  | | | |___user-profile.py\n  | | | |___user-weibo.py\n  | | | |___visitor-cookie.py\n  | | | |___weibo-id.py\n  | | | |___weibo-screen-name.py\n  | | | |___weibo-uid.py\n  | |___team.md\n  |___f2\n  | |___apps\n  | | |___bark\n  | | | |___api.py\n  | | | |___cli.py\n  | | | |___crawler.py\n  | | | |___filter.py\n  | | | |___handler.py\n  | | | |___help.py\n  | | | |___model.py\n  | | | |___test\n  | | | | |___test_bark_crawler.py\n  | | | |___utils.py\n  | | |___douyin\n  | | | |___algorithm\n  | | | | |___webcast_signature.js\n  | | | | |___webcast_signature.py\n  | | | |___api.py\n  | | | |___cli.py\n  | | | |___crawler.py\n  | | | |___db.py\n  | | | |___dl.py\n  | | | |___filter.py\n  | | | |___handler.py\n  | | | |___help.py\n  | | | |___model.py\n  | | | |___proto\n  | | | | |___douyin_webcast.proto\n  | | | | |___douyin_webcast_pb2.py\n  | | | |___test\n  | | | | |___test_douyin_apps_model.py\n  | | | | |___test_douyin_aweme_id.py\n  | | | | |___test_douyin_crawler.py\n  | | | | |___test_douyin_handler.py\n  | | | | |___test_douyin_lrc.py\n  | | | | |___test_douyin_room_id.py\n  | | | | |___test_douyin_sec_user_id.py\n  | | | | |___test_douyin_token.py\n  | | | | |___test_douyin_webcast_id.py\n  | | | | |___test_douyin_webcast_signature.py\n  | | | |___utils.py\n  | | |___tiktok\n  | | | |___api.py\n  | | | |___cli.py\n  | | | |___crawler.py\n  | | | |___db.py\n  | | | |___dl.py\n  | | | |___filter.py\n  | | | |___handler.py\n  | | | |___help.py\n  | | | |___model.py\n  | | | |___proto\n  | | | | |___tiktok_webcast.proto\n  | | | | |___tiktok_webcast_pb2.py\n  | | | |___test\n  | | | | |___test_tiktok_aweme_id.py\n  | | | | |___test_tiktok_crawler.py\n  | | | | |___test_tiktok_device_id.py\n  | | | | |___test_tiktok_sec_user_id_fetcher.py\n  | | | | |___test_tiktok_token.py\n  | | | |___utils.py\n  | | |___twitter\n  | | | |___api.py\n  | | | |___cli.py\n  | | | |___crawler.py\n  | | | |___db.py\n  | | | |___dl.py\n  | | | |___filter.py\n  | | | |___handler.py\n  | | | |___help.py\n  | | | |___model.py\n  | | | |___test\n  | | | | |___test_model.py\n  | | | | |___test_tweet_desc.py\n  | | | | |___test_tweet_id.py\n  | | | | |___test_unique_id.py\n  | | | |___utils.py\n  | | |___weibo\n  | | | |___api.py\n  | | | |___cli.py\n  | | | |___crawler.py\n  | | | |___db.py\n  | | | |___dl.py\n  | | | |___filter.py\n  | | | |___handler.py\n  | | | |___help.py\n  | | | |___model.py\n  | | | |___test\n  | | | | |___test_gen_visitor.py\n  | | | | |___test_handler.py\n  | | | | |___test_weibo_desc.py\n  | | | | |___test_weibo_id.py\n  | | | | |___test_weibo_screen_name.py\n  | | | | |___test_weibo_uid.py\n  | | | |___utils.py\n  | | |_____apps__.py\n  | | |_____init__.py\n  | |___cli\n  | | |___cli_commands.py\n  | | |___cli_console.py\n  | | |_____init__.py\n  | |___conf\n  | | |___app.yaml\n  | | |___conf.yaml\n  | | |___defaults.yaml\n  | | |___test.yaml\n  | |___crawlers\n  | | |___base_crawler.py\n  | |___db\n  | | |___base_db.py\n  | |___dl\n  | | |___base_downloader.py\n  | |___exceptions\n  | | |___api_exceptions.py\n  | | |___conf_exceptions.py\n  | | |___db_exceptions.py\n  | | |___file_exceptions.py\n  | | |_____init__.py\n  | |___helps.py\n  | |___i18n\n  | | |___translator.py\n  | |___languages\n  | | |___en_US\n  | | | |___LC_MESSAGES\n  | | | | |___en_US.mo\n  | | |___zh_CN\n  | | | |___LC_MESSAGES\n  | | | | |___zh_CN.mo\n  | |___log\n  | | |___logger.py\n  | |___utils\n  | | |___abogus.py\n  | | |___conf_manager.py\n  | | |___decorators.py\n  | | |___json_filter.py\n  | | |___utils.py\n  | | |___xbogus.py\n  | | |____dl.py\n  | | |____signal.py\n  | | |____singleton.py\n  | | |_____init__.py\n  | |_____init__.py\n  | |_____main__.py\n  |___LICENSE\n  |___make_pot.bat\n  |___make_pot.sh\n  |___pnpm-lock.yaml\n  |___pyproject.toml\n  |___pytest.ini\n  |___README.en.md\n  |___README.md\n  |___SECURITY.md\n  |___tests\n  | |___data\n  | | |___douyin\n  | | | |___webcast\n  | | | | |___dict\n  | | | | | |___WebcastGiftMessage.json\n  | | | | | |___WebcastLiveShoppingMessage.json\n  | | | | | |___WebcastProductChangeMessage.json\n  | | | | | |___WebcastRoomUserSeqMessage.json\n  | | | | | |___WebcastSocialMessage.json\n  | | | | | |___WebcastStatsMessage.json\n  | | | | | |___WebcastUpdateFanTicketMessage.json\n  | | |___tiktok\n  | | | |___webcast\n  | | | | |___dict\n  | | | | | |___WebcastChatMessage.json\n  | | | | | |___WebcastGiftMessage.json\n  | | | | | |___WebcastLikeMessage.json\n  | | | | | |___WebcastLinkMicFanTicketMethod.json\n  | | | | | |___WebcastMemberMessage.json\n  | | | | | |___WebcastRoomStreamAdaptationMessage.json\n  | | | | | |___WebcastRoomUserSeqMessage.json\n  | | | | | |___WebcastSocialMessage.json\n  | | | | | |___WebcastStatsMessage.json\n  | | | | |___protobuf\n  | | | | | |___WebcastOecLiveShoppingMessage_0.bin\n  | | | | | |___WebcastOecLiveShoppingMessage_1.bin\n  | | | | | |___WebcastOecLiveShoppingMessage_2.bin\n  | |___package-lock.json\n  | |___test_abogus.py\n  | |___test_aes.py\n  | |___test_cli_commands.py\n  | |___test_cli_console.py\n  | |___test_desc_limit.py\n  | |___test_dl.py\n  | |___test_excetions.py\n  | |___test_gzip.py\n  | |___test_i18n.py\n  | |___test_json_filter.py\n  | |___test_logger.py\n  | |___test_py_version.py\n  | |___test_rsa.py\n  | |___test_signal.py\n  | |___test_singleton.py\n  | |___test_timestamp.py\n  | |___test_utils.py\n  | |___test_xbogus.py\n  ```\n\u003c/details\u003e\n\n## 💰 Sponsor\n\n\u003ca href=\"https://tikhub.io/\"\u003e\u003cimg style=\"border-radius:20px\" src=\"https://github.com/Johnserf-Seed/f2/assets/40727745/70a67dd1-dccb-44a9-b635-c29a950f1daf\"\u003e\u003c/a\u003e\n\n[TikHub](https://tikhub.io/) is a provider of premium data interface services. You can get free credits by signing up daily. You can use my signup invite link: [https://beta-web.tikhub.io/users/signup?referral_code=6hLcGD94](https://beta-web.tikhub.io/users/signup?referral_code=6hLcGD94) or Invitation code: `6hLcGD94` to get `$2` credit by signing up and recharging.\n\n[TikHub](https://tikhub.io/) offers the following services:\n\n- Rich data interface\n- Sign up daily to get free credits\n- High quality API service\n- Official website: https://tikhub.io/\n- Project address: https://github.com/TikHubIO/\n## 👨‍💻 Contribute\n\nIf you're interested in contributing code to `F2`, please refer to the [contributing guide](https://github.com/Johnserf-Seed/f2/blob/main/CONTRIBUTING.md).\n\n## 🙏 Acknowledgements\n\n- [Windows Terminal](https://aka.ms/terminal)\n- [Python](https://www.python.org/)\n- [Nvm](https://github.com/nvm-sh/nvm)\n- [Node.js](https://nodejs.org/)\n- [Babel](https://babel.pocoo.org/)\n- [click](https://github.com/pallets/click)\n- [rich](https://github.com/Textualize/rich)\n- [httpx](https://github.com/encode/httpx)\n- [aiofiles](https://github.com/Tinche/aiofiles)\n- [aiosqlite](https://github.com/omnilib/aiosqlite)\n- [jsonpath-ng](https://github.com/h2non/jsonpath-ng)\n- [importlib_resources](https://github.com/python/importlib_resources)\n- [m3u8](https://github.com/globocom/m3u8)\n- [pyyaml](https://github.com/yaml/pyyaml)\n- [pytest](https://github.com/pytest-dev/pytest)\n- [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio)\n- [browser_cookie3](https://github.com/borisbabic/browser_cookie3)\n- [pydantic](https://github.com/samuelcolvin/pydantic)\n- [vitepress](https://github.com/vuejs/vitepress)\n- [websockets](https://github.com/python-websockets/websockets)\n- [websockets_proxy](https://github.com/racinette/websockets_proxy)\n- [protobuf](https://github.com/protocolbuffers/protobuf)\n- [PyExecJS](https://github.com/doloopwhile/PyExecJS)\n- [gmssl](https://github.com/duanhongyi/gmssl)\n- [cryptography](https://github.com/pyca/cryptography)\n\nWithout these libraries and programs, `F2` would not have been able to achieve its functionality. We sincerely thank them for their contributions and efforts.\n\n## ⚖️ Terms \u0026 Disclaimers\n\n- **Please strictly follow web scraping guidelines and do not use this project for any illegal activities.**\n- **Do not sell, share, encrypt, upload, research, or disseminate any personal information.**\n- **This project and its related code are for learning and research purposes only and do not constitute any explicit or implied guarantees.**\n- **Users are responsible for any risks and losses resulting from the use of this project and its code.**\n- **Please comply with the Apache-2.0 open-source license, and do not remove or modify any copyright information in the code.**\n- **If users wish to commercialize this project, they must specify the project repository address and not remove or modify any copyright information.**\n- **By using this project and its code, users agree to comply with the above regulations.**\n\n## 📜 License\n\n[Apache-2.0 license](https://www.apache.org/licenses/LICENSE-2.0.html)\n\nCopyright (c) 2023 JohnserfSeed\n\n## 📧 Contact\n\nFor inquiries related to `F2`, you can contact me using the following methods. Please be patient, and I will reply as soon as possible.\n\n- Mail: [support@f2.wiki](mailto:support@f2.wiki) (preferred)\n- Discord: [F2](https://discord.gg/3PhtPmgHf8)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnserf-seed%2Ff2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjohnserf-seed%2Ff2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnserf-seed%2Ff2/lists"}