Simple script for downloading YouTube comments without using the YouTube API. The output is in JSON format.
Note: This project follows a different philosophy from the original.
- The original (youtube-comment-downloader) is intentionally minimal and will be fixed if it breaks.
- This fork (
yt-comment-dl) focuses on maintainability, and modern tooling, while preserving the same core functionality.
Preferably inside and python virtual environment install this package via:
pip install yt-comment-dlOr directly from the GitHub repository:
pip install git+https://github.com/youssefadly237/yt-comment-dl.git$ yt-comment-dl --help
usage: yt-comment-dl [-h] [--output OUTPUT] [--pretty] [--limit LIMIT]
[--language LANGUAGE] [--sort {0,1}] url
Download YouTube comments without using the YouTube API
positional arguments:
url YouTube video URL or video ID
options:
-h, --help Show this help message and exit
--output OUTPUT, -o OUTPUT Output filename (default: comments_<video_id>.json)
--pretty, -p Pretty-print JSON output
--limit LIMIT, -l LIMIT Maximum number of comments to download
--language LANGUAGE, -a LANGUAGE YouTube generated text language (en)
--sort {0,1}, -s {0,1} Sort by: 0=popular, 1=recent (default: 1)Download comments using a YouTube URL:
yt-comment-dl "https://www.youtube.com/watch?v=ScMzIvxBSi4" --output ScMzIvxBSi4.jsonDownload comments using just the video ID:
yt-comment-dl ScMzIvxBSi4 --output ScMzIvxBSi4.jsonDownload the 50 most popular comments with pretty formatting:
yt-comment-dl ScMzIvxBSi4 --sort 0 --limit 50 --prettyFor YouTube IDs starting with - (dash), you may need to use quotes:
yt-comment-dl "-idwithdash"You can also use this script as a library. For instance, if you want to print out the 10 most popular comments for a particular YouTube video you can do the following:
from itertools import islice
from yt_comment_dl import YoutubeCommentDownloader
downloader = YoutubeCommentDownloader()
comments = downloader.get_comments('ScMzIvxBSi4', sort_by=0) # 0 = popular
for comment in islice(comments, 10):
print(comment.to_dict())The output is a JSON array containing comment objects. Each comment has the following structure:
[
{
"cid": "comment_id",
"text": "Comment text",
"time": "2 hours ago",
"author": "Author Name",
"channel": "author_channel_id",
"votes": 42,
"photo": "author_profile_photo_url",
"heart": false,
"reply": false,
"time_parsed": 1234567890
}
]MIT License - see LICENSE file for details