Tiktok Downloader & Stalk User



# Table of Contents - [Description](#description) - [Quick Installation](#quick-installation) - [Installation Methods](#installation-methods) - [Using Installation Script](#using-installation-script) - [Using NPM](#using-npm) - [Using Yarn](#using-yarn) - [Using Github](#using-github) - [Usage Guide](#usage-guide) - [Getting Tiktok Cookie](#getting-tiktok-cookie) - [Using CLI](#using-cli) - [Building from Source](#building-from-source) - [Features](#features) - [Tiktok Downloader](#tiktok-downloader) - [Tiktok Search](#tiktok-search) - [Tiktok Stalk User Profile](#tiktok-stalk-user-profile) - [Tiktok Video User Comments](#tiktok-video-comments) - [Tiktok Get User Posts](#tiktok-get-user-posts) - [Tiktok Get User Favorite Videos](#tiktok-get-user-favorite-videos) - [Tiktok Collection](#tiktok-collection) - [Tiktok Playlist](#tiktok-playlist) - [API Response Types](#api-response-types) - [Tiktok Downloader](#tiktok-downloader-1) - [Version 1 Response](#version-1-response) - [Version 2 Response](#version-2-response) - [Version 3 Response](#version-3-response) - [Tiktok Search](#tiktok-search-1) - [Tiktok Stalk User Profile](#tiktok-stalk-user-profile-1) - [Tiktok Video Comments](#tiktok-video-comments-1) - [Tiktok User Posts](#tiktok-user-posts) - [Tiktok User Liked Videos](#tiktok-user-liked-videos) - [Tiktok Collection](#tiktok-collection) - [Contributing](#contributing) - [License](#license) # Description Note : `This project uses the API from Tiktok. This project is made for educational purposes only. This project is not affiliated with Tiktok. This project is not intended to harm or damage the Tiktok platform.` - This project is made to help users to download videos, images / slides and music from Tiktok. - This project is also made to help users to view someone's profile from Tiktok. - This project is also made to help users to view comments from a video on Tiktok. # Quick Installation Install using our automated script: ```bash curl -o install.sh https://raw.githubusercontent.com/TobyG74/tiktok-api-dl/master/install.sh chmod +x install.sh ./install.sh ``` The script automatically: - Verifies Node.js installation and version - Installs the library using npm or yarn - Provides usage examples # Installation Methods ## Using NPM ```bash npm install @tobyg74/tiktok-api-dl ``` ## Using Yarn ```bash yarn add @tobyg74/tiktok-api-dl ``` ## Using Github ```bash npm install github:TobyG74/tiktok-api-dl ``` # Usage Guide ## Getting Tiktok Cookie 1. Install [Cookie-Editor](https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm) 2. Login to [Tiktok](https://tiktok.com) 3. Open Cookie-Editor 4. Copy the cookie and use it in your code: `COOKIE: "YOUR_COOKIE"` ## Using CLI ### Global Installation ```bash npm install -g @tobyg74/tiktok-api-dl tiktokdl [command] [options] ``` ### Direct Usage ```bash git clone https://github.com/TobyG74/tiktok-api-dl.git cd tiktok-api-dl npm install npx ts-node src/cli/index.ts [command] [options] ``` ### NPM Script ```bash npm run cli -- [command] [options] ``` ### Examples ```bash $ tiktokdl -h Usage: tiktokdl [options] [command] Tiktok downloader and search CLI tool Options: -V, --version output the version number -h, --help display help for command Commands: download [options] Download Tiktok Video / Slide / Music cookie Cookie Manager search Search Tiktok users or live streams getcomments [options] Get comments from a Tiktok video stalk [options] Stalk a Tiktok user help [command] display help for command ``` ## Building from Source ```bash git clone https://github.com/TobyG74/tiktok-api-dl.git cd tiktok-api-dl npm install npm run build ``` # Features ## Tiktok Downloader ```javascript const Tiktok = require("@tobyg74/tiktok-api-dl") const url = "https://vt.tiktok.com/xxxxxxxx" Tiktok.Downloader(url, { version: "v1", // "v1" | "v2" | "v3" proxy: "YOUR_PROXY", // optional showOriginalResponse: true // optional, v1 only }).then((result) => console.log(result)) ``` ### CLI Usage ```bash # Download Tiktok Video tiktokdl download "https://vt.tiktok.com/xxxxxxxx" # Download Tiktok Video with version tiktokdl download "https://vt.tiktok.com/xxxxxxxx" -v v1 # Download Tiktok Video with Custom Output Directory Path tiktokdl download "https://vt.tiktok.com/xxxxxxxx" -v v1 -o "/path/to/save/video.mp4" # Download Tiktok Video with Proxy tiktokdl download "https://vt.tiktok.com/xxxxxxxx" -v v1 -proxy "http://your-proxy-url" ``` - [Version 1 Response](#version-1-response) - [Version 2 Response](#version-2-response) - [Version 3 Response](#version-3-response) ## Tiktok Search ```javascript const Tiktok = require("@tobyg74/tiktok-api-dl") Tiktok.Search("username", { type: "user", // "user" | "live" | "video" page: 1, cookie: "YOUR_COOKIE", // needed proxy: "YOUR_PROXY" // optional }).then((result) => console.log(result)) ``` ### CLI Usage ```bash # Search Tiktok Users tiktokdl search user # Search Tiktok Users with pagination tiktokdl search user -p 1 # Search Tiktok Users with proxy tiktokdl search user -p 1 -proxy "http://your-proxy-url" # Search Tiktok Live Streams tiktokdl search live # Search Tiktok Live Streams with pagination tiktokdl search live -p 1 # Search Tiktok Live Streams with proxy tiktokdl search live -p 1 -proxy "http://your-proxy-url" # Search Tiktok Videos tiktokdl search video # Search Tiktok Videos with pagination tiktokdl search video -p 1 # Search Tiktok Videos with proxy tiktokdl search video -p 1 -proxy "http://your-proxy-url" ``` - [User Search Response](#user-search-response) - [Live Search Response](live-search-response) - [Video Search Response](#video-search-response) ## Tiktok Stalk User Profile ```javascript const Tiktok = require("@tobyg74/tiktok-api-dl") const username = "Tobz2k19" Tiktok.Stalker(username, { proxy: "YOUR_PROXY" // optional }).then((result) => console.log(result)) ``` ### CLI Usage ```bash # Stalk User Profile tiktokdl stalk # Stalk User Profile with proxy tiktokdl stalk -proxy "http://your-proxy-url" ``` - [Tiktok Stalk User Response](#tiktok-stalk-user-profile-1) ## Tiktok Video Comments ```javascript const Tiktok = require("@tobyg74/tiktok-api-dl") const url = "https://vt.tiktok.com/xxxxxxxx" Tiktok.GetVideoComments(url, { commentLimit: 10, // optional, default is 30 proxy: "YOUR_PROXY" // optional }).then((result) => console.log(result)) ``` ### CLI Usage ```bash # Get Video Comments tiktokdl getvideocomments "https://vt.tiktok.com/xxxxxxxx" # Get Video Comments with limit of comments tiktokdl getvideocomments "https://vt.tiktok.com/xxxxxxxx" -l 10 # Get Video Comments with proxy tiktokdl getvideocomments "https://vt.tiktok.com/xxxxxxxx" -l 10 -proxy "http://your-proxy-url" ``` - [Tiktok Video Comments Response](#tiktok-video-comments-1) ## Tiktok Get User Posts ```javascript const Tiktok = require("@tobyg74/tiktok-api-dl") const username = "Tobz2k19" Tiktok.GetUserPosts(username, { postLimit: 10, // optional, default is 30 proxy: "YOUR_PROXY" // optional }).then((result) => console.log(result)) ``` ### CLI Usage ```bash # Get User Posts tiktokdl getuserposts # Get User Posts with limit of posts tiktokdl getuserposts -l 10 # Get User Posts with proxy tiktokdl getuserposts -l 10 -proxy "http://your-proxy-url" ``` - [Tiktok User Posts Response](#tiktok-user-posts) ## Tiktok Get User Liked Videos - Note: To use this feature, you must be logged in with valid TikTok cookies to access user's liked videos ```javascript const Tiktok = require("@tobyg74/tiktok-api-dl") const username = "Tobz2k19" Tiktok.GetUserLiked(username, { postLimit: 10, // optional, default is 30 cookie: "YOUR_COOKIE", // needed proxy: "YOUR_PROXY" // optional }) ``` ### CLI Usage ```bash # Get User Liked Videos tiktokdl getuserliked # Get User Liked Videos with limit of posts tiktokdl getuserliked -l 10 # Get User Liked Videos with proxy tiktokdl getuserliked -l 10 -proxy "http://your-proxy-url" ``` - [Tiktok User Liked Videos Response](#tiktok-user-liked-videos) ## Tiktok Collection Get videos from a TikTok collection (supports collection ID or URL) ```javascript const Tiktok = require("@tobyg74/tiktok-api-dl") // Using collection ID const collectionId = "7507916135931218695" Tiktok.Collection(collectionId, { page: 1, // optional, default is 1 count: 5, // optional, default is 5 proxy: "YOUR_PROXY" // optional }).then((result) => console.log(result)) // Using collection URL const collectionUrl = "https://www.tiktok.com/@username/collection/name-id" Tiktok.Collection(collectionUrl, { page: 1, count: 5, proxy: "YOUR_PROXY" }).then((result) => console.log(result)) ``` ### CLI Usage ```bash # Using collection ID tiktokdl collection 7507916135931218695 -n 5 # Using collection URL tiktokdl collection "https://www.tiktok.com/@username/collection/name-id" -n 5 # With page for pagination tiktokdl collection 7507916135931218695 -p 1 -n 5 # With proxy tiktokdl collection 7507916135931218695 -n 5 -proxy "http://your-proxy-url" ``` - [Tiktok Collection Response](#tiktok-collection-1) ## Tiktok Playlist Get videos from a TikTok playlist (supports playlist ID or URL) ```javascript const Tiktok = require("@tobyg74/tiktok-api-dl") const playlistIdOrUrl = "https://www.tiktok.com/@username/playlist/name-id" Tiktok.Playlist(playlistIdOrUrl, { page: 1, count: 5, proxy: "YOUR_PROXY" }).then((result) => console.log(result)) ``` ### CLI Usage ```bash # Using playlist ID tiktokdl playlist 7507916135931218695 -n 5 # Using playlist URL tiktokdl playlist "https://www.tiktok.com/@username/playlist/name-id" -n 5 # With page for pagination tiktokdl playlist 7507916135931218695 -p 1 -n 5 # With proxy tiktokdl playlist 7507916135931218695 -n 5 -proxy "http://your-proxy-url" ``` - [Tiktok Playlist Response](#tiktok-playlist-1) # API Response Types ## Tiktok Downloader ### Version 1 Response ```typescript interface TiktokAPIResponse { status: "success" | "error" message?: string result?: { type: "video" | "image" id: string createTime: number desc: string author: { uid: number username: string nickname: string signature: string region: string avatarThumb: string[] avatarMedium: string[] url: string } statistics: { playCount: number downloadCount: number shareCount: number commentCount: number likeCount: number collectCount: number forwardCount: number whatsappShareCount: number loseCount: number loseCommentCount: number repostCount: number } hashtag: string[] isTurnOffComment: boolean isADS: boolean cover?: string[] dynamicCover?: string[] originCover?: string[] video?: { ratio: string duration: number playAddr: string[] downloadAddr: string[] cover: string[] dynamicCover: string[] originCover: string[] } images?: string[] music: { id: number title: string author: string album: string playUrl: string[] coverLarge: string[] coverMedium: string[] coverThumb: string[] duration: number isCommerceMusic: boolean isOriginalSound: boolean isAuthorArtist: boolean } } resultNotParsed?: any } ``` ### Version 2 Response ```typescript interface SSSTikResponse { status: "success" | "error" message?: string result?: { type: "image" | "video" | "music" desc?: string author?: { avatar: string nickname: string } statistics?: { likeCount: string commentCount: string shareCount: string } images?: string[] video?: { playAddr: string } music?: { playUrl: string } direct?: string } } ``` ### Version 3 Response ```typescript interface MusicalDownResponse { status: "success" | "error" message?: string result?: { type: "video" | "image" desc?: string author?: { avatar?: string nickname?: string } music?: string images?: string[] videoHD?: string videoWatermark?: string } } ``` ## Tiktok Search ### User Search Response ```typescript interface TiktokUserSearchResponse { status: "success" | "error" message?: string result?: Array<{ uid: string username: string nickname: string signature: string followerCount: number avatarThumb: string isVerified: boolean secUid: string url: string }> page?: number totalResults?: number } ``` ### Live Search Response ```typescript interface TiktokLiveSearchResponse { status: "success" | "error" message?: string result?: Array<{ id: string title: string cover: string[] squareCover: string[] rectangleCover: string[] liveTypeThirdParty: boolean hashtag: string startTime: number stats: { totalUser: number viewerCount: number likeCount: number } owner: { id: string nickname: string username: string signature: string avatarThumb: string[] avatarMedium: string[] avatarLarge: string[] modifyTime: number stats: { followingCount: number followerCount: number } isVerified: boolean } }> page?: number totalResults?: number } ``` ### Video Search Response ```typescript interface TiktokVideoSearchResponse { status: "success" | "error" message?: string result?: Array<{ id: string desc: string createTime: number author: { id: string uniqueId: string nickname: string avatarThumb: string avatarMedium: string avatarLarger: string signature: string verified: boolean secUid: string openFavorite: boolean privateAccount: boolean isADVirtual: boolean tiktokSeller: boolean isEmbedBanned: boolean } stats: { collectCount: number commentCount: number likeCount: number playCount: number shareCount: number } video: { id: string ratio: string cover: string originCover: string dynamicCover: string playAddr: string downloadAddr: string format: string } music: { id: string title: string playUrl: string coverThumb: string coverMedium: string coverLarge: string authorName: string original: boolean album: string duration: number isCopyrighted: boolean } }> page?: number totalResults?: number } ``` ## Tiktok Stalk User Profile ### Profile Response ```typescript interface TiktokStalkUserResponse { status: "success" | "error" message?: string result?: { user: { username: string nickname: string avatar: string signature: string verified: boolean region: string } stats: { followerCount: number followingCount: number heartCount: number videoCount: number likeCount: number } } } ``` ## Tiktok Video Comments ### Comments Response ```typescript interface TiktokVideoCommentsResponse { status: "success" | "error" message?: string result?: Array<{ cid: string text: string commentLanguage: string createTime: number likeCount: number isAuthorLiked: boolean isCommentTranslatable: boolean replyCommentTotal: number replyComment: [] user: User url: string }> totalComments?: number } ``` ## Tiktok User Posts ### User Posts Response ```typescript interface TiktokUserPostsResponse { status: "success" | "error" message?: string result?: Array<{ id: string desc: string createTime: number digged: number duetEnabled: number forFriend: number officalItem: number originalItem: number privateItem: number shareEnabled: number stitchEnabled: number stats: { collectCount: number commentCount: number likeCount: number playCount: number shareCount: number } author: { id: string username: string nickname: string avatarLarger: string avatarThumb: string avatarMedium: string signature: string verified: boolean openFavorite: boolean privateAccount: boolean isADVirtual: boolean isEmbedBanned: boolean } video?: { id: string duration: number ratio: string cover: string originCover: string dynamicCover: string playAddr: string downloadAddr: string format: string bitrate: number } music: { authorName: string coverLarge: string coverMedium: string coverThumb: string duration: number id: string title: string playUrl: string original: boolean } images?: string[] }> totalPosts?: number } ``` ## Tiktok User Liked Videos ### User Liked Videos Response ```typescript interface TiktokUserFavoriteVideosResponse { status: "success" | "error" message?: string result?: Array<{ id: string desc: string createTime: string duetEnabled: boolean digged: boolean forFriend: boolean isAd: boolean originalItem: boolean privateItem: boolean officialItem: boolean secret: boolean shareEnabled: boolean stitchEanbled: boolean textTranslatable: boolean author: { id: string username: string nickname: string avatarLarger: string avatarThumb: string avatarMedium: string signature: string verified: string openFavorite: string privateAccount: string isADVirtual: string isEmbedBanned: string } stats: { collectCount: string commentCount: string likeCount: string playCount: string repostCount: string shareCount: string } video?: { id: string videoID: string duration: number ratio: string cover: string originCover: string dynamicCover: string playAddr: string downloadAddr: string format: string bitrate: number bitrateInfo: any[] } imagePost?: Array<{ title: string images: string[] }> music: { id: string title: string playUrl: string coverThumb: string coverMedium: string coverLarge: string authorName: string original: boolean album: string duration: number isCopyrighted: boolean private: boolean } }> totalPosts?: number } ``` ## Tiktok Collection ### Collection Response ```typescript interface TiktokCollectionResponse { status: "success" | "error" message?: string result?: { itemList: Array<{ id: string desc: string createTime: number author?: { id: string uniqueId: string nickname: string avatarThumb: string avatarMedium: string avatarLarger: string signature: string verified: boolean } statistics?: { playCount: number diggCount: number shareCount: number commentCount: number collectCount: number } video?: { id: string height: number width: number duration: number ratio: string cover: string originCover: string dynamicCover: string playAddr: string downloadAddr: string format: string bitrate: number } textExtra?: Array<{ hashtagName: string hashtagId: string type: number }> }> hasMore: boolean cursor: string } } ``` ## Tiktok Playlist ### Playlist Response ```typescript status: "success" | "error" message?: string result?: { hasMore: boolean itemList: Array<{ id: string desc: string createTime: number author: PlaylistAuthor stats: Statistics video: VideoTiktokAPI music: MusicTiktokAPI challenges: Array<{ id: string title: string desc: string coverLarger: string coverMedium: string coverThumb: string profileLarger: string profileMedium: string profileThumb: string }> collected: boolean digged: boolean duetDisplay: number forFriend: boolean officalItem: boolean originalItem: boolean privateItem: boolean shareEnabled: boolean stitchDisplay: number textExtra: Array<{ awemeId: string end: number hashtagName: string isCommerce: boolean start: number subType: number type: number }> }> extra?: { fatal_item_ids: string[] logid: string now: number } } ``` # Changelog - All changes will be documented in the [CHANGELOG.md](https://github.com/TobyG74/tiktok-api-dl/blob/master/CHANGELOG.md) file. # Contributing - This repository is open source. We really appreciate it if you want to participate in developing this repository... - Please read our [CONTRIBUTING.md](https://github.com/TobyG74/tiktok-api-dl/blob/master/CONTRIBUTING.md) and [CODE_OF_CONDUCT.md](https://github.com/TobyG74/tiktok-api-dl/blob/master/CODE_OF_CONDUCT.md) before contributing. # License - This project is licensed under the Apache License - see the [LICENSE](https://github.com/TobyG74/tiktok-api-dl/blob/master/LICENSE) file for details.