Tor 経由で YouTube ビデオをダウンロードするのにかかる時間を測定するために、この例を茎にpytubeと組み合わせました。
コードは次のとおりです。
import io
import pycurl
import stem.process
from stem.util import term
import pickle
import socks # SocksiPy module
import socket
import urllib
from pytube import YouTube
import pdb
import time
import string
import random
SOCKS_PORT = 9050
# Set socks proxy and wrap the urllib module
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', SOCKS_PORT)
socket.socket = socks.socksocket
# Perform DNS resolution through the socket
def getaddrinfo(*args):
return [(socket.AF_INET, socket.SOCK_STREAM, 6, '', (args[0], args[1]))]
socket.getaddrinfo = getaddrinfo
def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))
def query(url):
try:
yt = YouTube('https://www.youtube.com/watch?v=5mkm22yO-bs')
yt.set_filename(id_generator(6))
video = yt.get('3gp', '144p')
start = time.time()
video.download('/tmp/')
end = time.time()
time_ = end - start
return time_
except:
return "Unable to reach %s" % url
def print_bootstrap_lines(line):
if "Bootstrapped " in line:
print(term.format(line, term.Color.BLUE))
def main():
print(term.format("Starting Tor:\n", term.Attr.BOLD))
tor_process = stem.process.launch_tor_with_config(
config = {
'SocksPort': str(SOCKS_PORT),
},
init_msg_handler = print_bootstrap_lines,
)
url = 'https://www.youtube.com/watch?v=5mkm22yO-bs'
times = [0]*10
for i in xrange(10):
times[i] = query(url)
tor_process.kill() # stops tor
with open('times_yout_jung.pickle', 'wb') as f:
pickle.dump(times, f)
if __name__ == "__main__":
main()
ただし、「URLに到達できません」というエラーが発生します。そして、このコードを介してトラフィックを通常どおりルーティングしようとすると(pytubeが機能しているかどうかを確認するため)、機能します:
from pytube import YouTube
import pdb
import time
import string
import random
def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))
def main():
pdb.set_trace()
yt = YouTube('https://www.youtube.com/watch?v=5mkm22yO-bs')
yt.set_filename(id_generator(6))
video = yt.get('3gp', '144p')
start = time.time()
video.download('/tmp/')
end = time.time()
print("Time ", end - start)
if __name__ == "__main__":
main()
pdb を使用してコードをデバッグしようとしましたが、何が問題なのかわかりません。誰でも助けてもらえますか?