|
1 | 1 | from bs4 import BeautifulSoup
|
2 | 2 | import requests
|
3 |
| -import urllib.request |
4 | 3 | import json
|
5 |
| -import time |
6 | 4 | import selenium
|
7 | 5 | from selenium import webdriver
|
8 | 6 | from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
|
9 | 7 | from selenium.webdriver.common.keys import Keys
|
| 8 | +from urllib.request import urlopen |
| 9 | +from getopt import GetoptError, getopt |
| 10 | +import sys |
| 11 | +import os |
| 12 | +from getpass import getuser |
| 13 | +from time import time, sleep |
| 14 | +from colorama import Fore, Style |
| 15 | +from colorama import init |
| 16 | +init() |
10 | 17 |
|
11 | 18 |
|
| 19 | +def progressBar(length): |
| 20 | + show = '' |
| 21 | + for i in range(length): |
| 22 | + show += "#" |
| 23 | + for j in range(30-length): |
| 24 | + show += "-" |
| 25 | + show = "|"+show+"|" |
| 26 | + if length != 30: |
| 27 | + if length % 3 == 0: |
| 28 | + show = "/ " + show |
| 29 | + elif length % 3 == 1: |
| 30 | + show = "- " + show |
| 31 | + else: |
| 32 | + show = "\ " + show |
| 33 | + return show |
| 34 | + |
| 35 | +# ================================Transfer Speed Function================= |
| 36 | + |
| 37 | + |
| 38 | +def transferRate(blocksize): |
| 39 | + try: |
| 40 | + global speed, rate, transferData |
| 41 | + interval = time() - rate |
| 42 | + if rate == 0: |
| 43 | + transferData += blocksize |
| 44 | + rate = time() |
| 45 | + elif interval == 0 or interval < 1: |
| 46 | + transferData += blocksize |
| 47 | + else: |
| 48 | + speed = float(transferData/(interval)) |
| 49 | + transferData = 0 |
| 50 | + rate = time() |
| 51 | + return speed |
| 52 | + except Exception: |
| 53 | + pass |
| 54 | + |
| 55 | +# ================================Type of Data============================ |
| 56 | + |
| 57 | + |
| 58 | +def dataSize(block): |
| 59 | + if block/1024 < 1000: |
| 60 | + block = block/1024 |
| 61 | + sizeType = 'KB' |
| 62 | + elif block/1048576 < 1000: |
| 63 | + block = block/1048576 |
| 64 | + sizeType = 'MB' |
| 65 | + elif block/1073741824 < 1000: |
| 66 | + block = block/1073741824 |
| 67 | + sizeType = 'GB' |
| 68 | + return block, sizeType |
| 69 | + |
| 70 | +# ================================Main Integrating function=============== |
| 71 | + |
| 72 | + |
| 73 | +def reporthook(blocknum, blocksize, total): |
| 74 | + size = 0 |
| 75 | + currentType = '' |
| 76 | + length = 30 |
| 77 | + percentage = 100.00 |
| 78 | + global speed, speedType, totalsize, sizeType |
| 79 | + desc = int(blocknum*blocksize) |
| 80 | + if total > 0: |
| 81 | + length = int((desc/total)*30) |
| 82 | + percentage = float(desc/total*100) |
| 83 | + speed = transferRate(blocksize) |
| 84 | + speedShow, speedType = dataSize(speed) |
| 85 | + if totalsize == 0: |
| 86 | + totalsize, sizeType = dataSize(total) |
| 87 | + size, currentType = dataSize(desc) |
| 88 | + progress = progressBar(length) |
| 89 | + |
| 90 | + if percentage > 100: |
| 91 | + percentage = 100 |
| 92 | + size = totalsize |
| 93 | + elif percentage == 100 and total < 0: |
| 94 | + totalsize = size |
| 95 | + p1 = " %.2f %%" % (percentage) |
| 96 | + p2 = " %s" % (progress) |
| 97 | + p3 = " %.2f %s / %.2f %s %.2f %s/s " % ( |
| 98 | + size, currentType, totalsize, sizeType, speedShow, speedType) |
| 99 | + sys.stderr.write("\r" + |
| 100 | + p1 + Fore.GREEN + p2 + Style.RESET_ALL + p3 + Style.RESET_ALL) |
| 101 | + sys.stderr.flush() |
| 102 | + |
| 103 | +# =====================================Globar Variables=================== |
| 104 | + |
| 105 | +argv = sys.argv[1:] |
| 106 | +url = '' |
| 107 | +name = 'default' |
| 108 | +opts = '' |
| 109 | +args = '' |
| 110 | +rate = 0 |
| 111 | +speed = 0 |
| 112 | +transferData = 0 |
| 113 | +totalsize = 0 |
| 114 | +speedType = '' |
| 115 | +sizeType = '' |
| 116 | +flag = 0 |
| 117 | + |
12 | 118 | url = input("Enter the Youtube-url\n")
|
13 | 119 | name = input("Enter the name for the video\n")
|
14 |
| -name=name+".mp4" |
| 120 | +name = name+".mp4" |
15 | 121 | try:
|
16 | 122 |
|
17 | 123 | # Phantom JS
|
18 | 124 |
|
19 |
| - driver = webdriver.PhantomJS(executable_path=r'C:\Users\ankit\Downloads\phantomjs-2.1.1-windows (1)\phantomjs-2.1.1-windows\bin\phantomjs.exe') |
| 125 | + driver = webdriver.PhantomJS( |
| 126 | + executable_path=r'C:\Users\ankit\Downloads\phantomjs-2.1.1-windows (1)\phantomjs-2.1.1-windows\bin\phantomjs.exe') |
20 | 127 | driver.set_window_size(1120, 550)
|
21 | 128 |
|
22 | 129 | # FireFox
|
|
25 | 132 | # driver = webdriver.Firefox(firefox_binary=binary)
|
26 | 133 |
|
27 | 134 | driver.get("http://en.savefrom.net")
|
28 |
| - shURL = driver.find_element_by_xpath('//input[@id="sf_url" and @type="text"]') |
| 135 | + shURL = driver.find_element_by_xpath( |
| 136 | + '//input[@id="sf_url" and @type="text"]') |
29 | 137 | shURL.send_keys(url)
|
30 |
| - time.sleep(2) |
31 |
| - shSubmit = driver.find_element_by_xpath('//button[@id="sf_submit" and @class="submit" and @name="sf_submit"]') |
| 138 | + sleep(2) |
| 139 | + shSubmit = driver.find_element_by_xpath( |
| 140 | + '//button[@id="sf_submit" and @class="submit" and @name="sf_submit"]') |
32 | 141 | shSubmit.click()
|
33 |
| - time.sleep(10) |
| 142 | + sleep(10) |
34 | 143 | soup = BeautifulSoup(driver.page_source, 'html.parser')
|
35 |
| - click = soup.find("a", class_="link link-download subname ga_track_events download-icon") |
| 144 | + click = soup.find( |
| 145 | + "a", class_="link link-download subname ga_track_events download-icon") |
36 | 146 | url_parse = click.get("href")
|
37 | 147 | driver.quit()
|
38 | 148 | print("Downloading Starts..\n")
|
39 |
| - # print(url_parse) |
40 |
| - urllib.request.urlretrieve(url_parse, name) |
41 |
| - print("Download Completed..!!!") |
| 149 | + with open(name, 'wb') as out_file: |
| 150 | + with urlopen(url_parse) as fp: |
| 151 | + x = int(fp.info()['Content-Length']) |
| 152 | + i=1 |
| 153 | + block_size = 1024 * 8 |
| 154 | + while True: |
| 155 | + block = fp.read(block_size) |
| 156 | + reporthook(i,block_size,x) |
| 157 | + i+=1 |
| 158 | + if not block: |
| 159 | + break |
| 160 | + out_file.write(block) |
| 161 | + sys.stdout.write("\a") |
| 162 | + print("\nDownload Completed..!!!") |
42 | 163 | except Exception as e:
|
43 | 164 | print(e)
|
0 commit comments