aboutsummaryrefslogtreecommitdiffstats
path: root/youtube
diff options
context:
space:
mode:
Diffstat (limited to 'youtube')
-rw-r--r--youtube/accounts.py10
-rw-r--r--youtube/common.py13
-rw-r--r--youtube/post_comment.py23
-rw-r--r--youtube/watch.py6
4 files changed, 28 insertions, 24 deletions
diff --git a/youtube/accounts.py b/youtube/accounts.py
index 9696899..f9bbc75 100644
--- a/youtube/accounts.py
+++ b/youtube/accounts.py
@@ -180,7 +180,8 @@ def _login(username, password, cookie_jar):
Taken from youtube-dl
"""
- login_page = common.fetch_url(_LOGIN_URL, yt_dl_headers, report_text='Downloaded login page', cookie_jar_receive=cookie_jar).decode('utf-8')
+
+ login_page = common.fetch_url(_LOGIN_URL, yt_dl_headers, report_text='Downloaded login page', cookie_jar_receive=cookie_jar, use_tor=False).decode('utf-8')
'''with open('debug/login_page', 'w', encoding='utf-8') as f:
f.write(login_page)'''
#print(cookie_jar.as_lwp_str())
@@ -206,7 +207,7 @@ def _login(username, password, cookie_jar):
'Google-Accounts-XSRF': 1,
}
headers.update(yt_dl_headers)
- result = common.fetch_url(url, headers, report_text=note, data=data, cookie_jar_send=cookie_jar, cookie_jar_receive=cookie_jar).decode('utf-8')
+ result = common.fetch_url(url, headers, report_text=note, data=data, cookie_jar_send=cookie_jar, cookie_jar_receive=cookie_jar, use_tor=False).decode('utf-8')
#print(cookie_jar.as_lwp_str())
'''with open('debug/' + note, 'w', encoding='utf-8') as f:
f.write(result)'''
@@ -338,10 +339,13 @@ def _login(username, password, cookie_jar):
return False
try:
- check_cookie_results = common.fetch_url(check_cookie_url, headers=yt_dl_headers, report_text="Checked cookie", cookie_jar_send=cookie_jar, cookie_jar_receive=cookie_jar).decode('utf-8')
+ check_cookie_results = common.fetch_url(check_cookie_url, headers=yt_dl_headers, report_text="Checked cookie", cookie_jar_send=cookie_jar, cookie_jar_receive=cookie_jar, use_tor=False).decode('utf-8')
except (urllib.error.URLError, compat_http_client.HTTPException, socket.error) as err:
return False
+ '''with open('debug/check_cookie_results', 'w', encoding='utf-8') as f:
+ f.write(check_cookie_results)'''
+
if 'https://myaccount.google.com/' not in check_cookie_results:
warn('Unable to log in')
return False
diff --git a/youtube/common.py b/youtube/common.py
index 655f24c..6b0051b 100644
--- a/youtube/common.py
+++ b/youtube/common.py
@@ -1,5 +1,6 @@
from youtube.template import Template
from youtube import local_playlist
+import settings
import html
import json
import re
@@ -7,7 +8,7 @@ import urllib.parse
import gzip
import brotli
import time
-
+import socks, sockshandler
URL_ORIGIN = "/https://www.youtube.com"
@@ -148,7 +149,7 @@ def decode_content(content, encoding_header):
content = gzip.decompress(content)
return content
-def fetch_url(url, headers=(), timeout=15, report_text=None, data=None, cookie_jar_send=None, cookie_jar_receive=None):
+def fetch_url(url, headers=(), timeout=15, report_text=None, data=None, cookie_jar_send=None, cookie_jar_receive=None, use_tor=True):
'''
When cookie_jar_send is set to a CookieJar object,
those cookies will be sent in the request (but cookies in response will not be merged into it)
@@ -168,10 +169,16 @@ def fetch_url(url, headers=(), timeout=15, report_text=None, data=None, cookie_j
start_time = time.time()
+
req = urllib.request.Request(url, data=data, headers=headers)
if cookie_jar_send is not None:
cookie_jar_send.add_cookie_header(req)
- response = urllib.request.urlopen(req, timeout=timeout)
+
+ if use_tor and settings.route_tor:
+ opener = urllib.request.build_opener(sockshandler.SocksiPyHandler(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9150))
+ response = opener.open(req, timeout=timeout)
+ else:
+ response = urllib.request.urlopen(req, timeout=timeout)
response_time = time.time()
if cookie_jar_receive is not None:
diff --git a/youtube/post_comment.py b/youtube/post_comment.py
index d43d5f4..7478a5d 100644
--- a/youtube/post_comment.py
+++ b/youtube/post_comment.py
@@ -13,7 +13,6 @@ def _post_comment(text, video_id, session_token, cookie_jar):
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
'Accept': '*/*',
'Accept-Language': 'en-US,en;q=0.5',
- 'Accept-Encoding': 'gzip, deflate, br',
'X-YouTube-Client-Name': '2',
'X-YouTube-Client-Version': '2.20180823',
'Content-Type': 'application/x-www-form-urlencoded',
@@ -31,11 +30,9 @@ def _post_comment(text, video_id, session_token, cookie_jar):
}
data = urllib.parse.urlencode(data_dict).encode()
- req = urllib.request.Request("https://m.youtube.com/service_ajax?name=createCommentEndpoint", headers=headers, data=data)
- cookie_jar.add_cookie_header(req)
- response = urllib.request.urlopen(req, timeout = 5)
- content = response.read()
- content = common.decode_content(content, response.getheader('Content-Encoding', default='identity'))
+
+ content = common.fetch_url("https://m.youtube.com/service_ajax?name=createCommentEndpoint", headers=headers, data=data, cookie_jar_send=cookie_jar)
+
code = json.loads(content)['code']
print("Comment posting code: " + code)
return code
@@ -48,7 +45,6 @@ def _post_comment_reply(text, video_id, parent_comment_id, session_token, cookie
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
'Accept': '*/*',
'Accept-Language': 'en-US,en;q=0.5',
- 'Accept-Encoding': 'gzip, deflate, br',
'X-YouTube-Client-Name': '2',
'X-YouTube-Client-Version': '2.20180823',
'Content-Type': 'application/x-www-form-urlencoded',
@@ -66,11 +62,8 @@ def _post_comment_reply(text, video_id, parent_comment_id, session_token, cookie
}
data = urllib.parse.urlencode(data_dict).encode()
- req = urllib.request.Request("https://m.youtube.com/service_ajax?name=createCommentReplyEndpoint", headers=headers, data=data)
- cookie_jar.add_cookie_header(req)
- response = urllib.request.urlopen(req, timeout = 5)
- content = response.read()
- content = common.decode_content(content, response.getheader('Content-Encoding', default='identity'))
+ content = common.fetch_url("https://m.youtube.com/service_ajax?name=createCommentReplyEndpoint", headers=headers, data=data, cookie_jar_send=cookie_jar)
+
code = json.loads(content)['code']
print("Comment posting code: " + code)
return code
@@ -82,7 +75,6 @@ def delete_comment(video_id, comment_id, author_id, session_token, cookie_jar):
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
'Accept': '*/*',
'Accept-Language': 'en-US,en;q=0.5',
- 'Accept-Encoding': 'gzip, deflate, br',
'X-YouTube-Client-Name': '2',
'X-YouTube-Client-Version': '2.20180823',
'Content-Type': 'application/x-www-form-urlencoded',
@@ -98,10 +90,7 @@ def delete_comment(video_id, comment_id, author_id, session_token, cookie_jar):
}
data = urllib.parse.urlencode(data_dict).encode()
- req = urllib.request.Request("https://m.youtube.com/service_ajax?name=performCommentActionEndpoint", headers=headers, data=data)
- cookie_jar.add_cookie_header(req)
- response = urllib.request.urlopen(req, timeout = 5)
- content = response.read()
+ content = common.fetch_url("https://m.youtube.com/service_ajax?name=performCommentActionEndpoint", headers=headers, data=data, cookie_jar_send=cookie_jar)
xsrf_token_regex = re.compile(r'''XSRF_TOKEN"\s*:\s*"([\w-]*(?:=|%3D){0,2})"''')
def post_comment(parameters, fields):
diff --git a/youtube/watch.py b/youtube/watch.py
index 2d10ec1..4051a3f 100644
--- a/youtube/watch.py
+++ b/youtube/watch.py
@@ -232,7 +232,11 @@ def get_watch_page(query_string):
parsed_qs = urllib.parse.parse_qs(query_string)
id = parsed_qs['v'][0]
lc = common.default_multi_get(parsed_qs, 'lc', 0, default='')
- downloader = YoutubeDL(params={'youtube_include_dash_manifest':False})
+ if settings.route_tor:
+ proxy = 'socks5://127.0.0.1:9150/'
+ else:
+ proxy = ''
+ downloader = YoutubeDL(params={'youtube_include_dash_manifest':False, 'proxy':proxy})
tasks = (
gevent.spawn(comments.video_comments, id, int(settings.default_comment_sorting), lc=lc ),
gevent.spawn(extract_info, downloader, "https://www.youtube.com/watch?v=" + id, download=False)