Created
April 23, 2019 05:15
-
-
Save Noxturnix/4872e22064e23143afe8a3514d396246 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import requests | |
url = input("YouTube URL: ") | |
filename = "commenters.txt" | |
#filename = input("Save to: ") | |
session = requests.Session() | |
headers = { | |
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36", | |
"X-YouTube-Client-Name": "1", | |
"X-YouTube-Client-Version": "2.20190420" | |
} | |
resp = session.get(url, headers=headers) | |
xsrf_token = resp.text.split("XSRF_TOKEN\":\"")[1].split("\"")[0] | |
ctoken = resp.text.split("\"nextContinuationData\":{\"continuation\":\"")[1].split("\"")[0] | |
itct = resp.text.split("\"{}\",\"clickTrackingParams\":\"".format(ctoken))[1].split("\"")[0] | |
commenters = [] | |
while True: | |
print("Scrolling. please wait... ({})".format(len(commenters))) | |
params = { | |
"action_get_comments": "1", | |
"pbj": "1", | |
"ctoken": ctoken, | |
"continuation": ctoken, | |
"itct": itct | |
} | |
data = { | |
"session_token": xsrf_token | |
} | |
resp = session.post("https://www.youtube.com/comment_service_ajax", params=params, headers=headers, data=data) | |
jsonResp = resp.json() | |
doBreak = False | |
if "continuationContents" in jsonResp["response"] and "continuations" in jsonResp["response"]["continuationContents"]["itemSectionContinuation"]: | |
ctoken = jsonResp["response"]["continuationContents"]["itemSectionContinuation"]["continuations"][0]["nextContinuationData"]["continuation"] | |
else: | |
doBreak = True | |
if "continuationContents" in jsonResp["response"] and "contents" in jsonResp["response"]["continuationContents"]["itemSectionContinuation"]: | |
for content in jsonResp["response"]["continuationContents"]["itemSectionContinuation"]["contents"]: | |
commenters.append(content["commentThreadRenderer"]["comment"]["commentRenderer"]["authorText"]["simpleText"]) | |
if doBreak: | |
break | |
commenters = list(set(commenters)) | |
open(filename, "w").write("\n".join(commenters).strip()) | |
print("Warning: YouTube stopped sending a comment info. This means the script has fetch all comments correctly, or YouTube just blocked this script to fetch a comment just now.") | |
print("Saved {} name(s) (removed duplicates) to {}".format(len(commenters), filename)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment