Advertisement
Guest User

Untitled

a guest
Jan 27th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 17.63 KB | None | 0 0
  1. from __future__ import unicode_literals
  2. import youtube_dl
  3. import time
  4. import datetime
  5. import os
  6. from tkinter import *
  7. from tkinter.filedialog import askdirectory
  8. from tkinter.messagebox import *
  9. import re
  10. from subprocess import call
  11. import ffmpeg
  12. import ffmpy
  13. from selenium import webdriver
  14. from selenium.webdriver.common.keys import Keys
  15. from selenium.webdriver.common.by import By
  16. from selenium.webdriver.support.ui import WebDriverWait
  17. from selenium.webdriver.support import expected_conditions as EC
  18. from selenium.webdriver.common.action_chains import ActionChains
  19. from pytube import Playlist
  20. from selenium.common.exceptions import NoSuchElementException
  21. # from moviepy.editor import *
  22. """
  23. print('Please enter your username/email:')
  24. usernameStr = str(input())
  25. print('Please enter your password:')
  26. passwordStr = str(input())
  27. print('mix or normal playlist:')
  28. mnp = str(input())
  29. print('Link:')
  30. ul = str(input())
  31. print('How many songs in mix:')
  32. q = int(input())
  33. print('mp3 or mp4?')
  34. mp5 = str(input())
  35. print('Where download? NOTE: if you want mp3 all files in the folder are going to be converted to mp3')
  36. dp = str(input()) + "%(title)s-%(id)s.%(ext)s"
  37. print('Browser? chrome; firefox; edge; safari')
  38. brwr = str(input())
  39. """
  40.  
  41. master = Tk()
  42.  
  43.  
  44. def directory_ptah():
  45.     dtp = askdirectory()
  46.     e5dp.insert(10, dtp)
  47.  
  48.  
  49. def form_to_fill_out():
  50.     e1mail.get()
  51.     e2pass.get()
  52.     e3url.get()
  53.     e4number_songs.get()
  54.     e5dp.get()
  55.     e6mp3.get()
  56.     e7mp4.get()
  57.     e8chrome.get()
  58.     e9firefox.get()
  59.     e10safari.get()
  60.     e11edge.get()
  61.     # print(usernameStr, passwordStr, ul, q, dp, mp5mp3, mp5mp4, brwrchrome, brwrfirefox, brwrsafari, brwredge)
  62.  
  63.  
  64. Label(master, text="Youtube email:").grid(row=0)
  65. Label(master, text="Youtube password:").grid(row=1)
  66. Label(master, text="Playlist url:").grid(row=2)
  67. Label(master, text="File format:").grid(row=5)
  68. Label(master, text="Number of songs to download:").grid(row=3)
  69. Label(master, text="Browser:").grid(row=6)
  70.  
  71. e1mail = Entry(master)
  72. e2pass = Entry(master)
  73. e3url = Entry(master)
  74. e4number_songs = Entry(master)
  75. e5dp = Entry(master)
  76. e6mp3 = IntVar()
  77. e7mp4 = IntVar()
  78. e8chrome = IntVar()
  79. e9firefox = IntVar()
  80. e10safari = IntVar()
  81. e11edge = IntVar()
  82.  
  83.  
  84. e1mail.grid(row=0, column=1)
  85. e2pass.grid(row=1, column=1)
  86. e3url.grid(row=2, column=1)
  87. e5dp.grid(row=4, column=1)
  88. e4number_songs.grid(row=3, column=1)
  89.  
  90. Button(master, text='Download path', command=directory_ptah).grid(row=4, column=0, sticky=W, pady=4)
  91. Checkbutton(master, text="mp3", variable=e6mp3).grid(row=5, column=1, sticky=W)
  92. Checkbutton(master, text="mp4", variable=e7mp4).grid(row=5, column=2, sticky=W)
  93. Checkbutton(master, text="chrome", variable=e8chrome).grid(row=6, column=1, sticky=W)
  94. Checkbutton(master, text="firefox", variable=e9firefox).grid(row=6, column=2, sticky=W)
  95. Checkbutton(master, text="safari", variable=e10safari).grid(row=6, column=3, sticky=W)
  96. Checkbutton(master, text="edge", variable=e11edge).grid(row=6, column=4, sticky=W)
  97. Button(master, text='quit', command=master.quit).grid(row=7, column=0, sticky=W, pady=4)
  98. Button(master, text='start program', command=form_to_fill_out).grid(row=7, column=1, sticky=W, pady=4)
  99.  
  100. usernameStr = e1mail.get()
  101. passwordStr = e2pass.get()
  102. ul = e3url.get()
  103. q = e4number_songs.get()
  104. dp = e5dp.get()
  105. mp5mp3 = e6mp3.get()
  106. mp5mp4 = e7mp4.get()
  107. brwrchrome = e8chrome.get()
  108. brwrfirefox = e9firefox.get()
  109. brwrsafari = e10safari.get()
  110. brwredge = e11edge.get()
  111.  
  112. mainloop()
  113.  
  114.  
  115. """
  116. usernamestr = e1mail.get()
  117. passwordstr = e2pass.get()
  118. ul = e3url.get()
  119. q = e4number_songs.get()
  120. dp = e5dp.get()
  121. k = e6mp3.get()
  122. n = e7mp4.get()
  123. a = e8chrome.get()
  124. b = e9firefox.get()
  125. c = e10safari.get()
  126. d = e11edge.get()
  127. print(usernamestr)
  128. print(passwordstr)
  129. print(ul)
  130. print(q)
  131. print(dp)
  132. print(k)
  133. print(n)
  134. print(a)
  135. print(b)
  136. print(c)
  137. print(d)
  138. """
  139.  
  140. if brwrchrome == '1':
  141.     cytd = webdriver.Chrome()
  142.     cytd.maximize_window()
  143.     cytd.get("https://www.youtube.com/")
  144.     cytd.find_element_by_xpath('//div[2]/ytd-button-renderer/a/paper-button/yt-formatted-string').click()
  145.     cytd.find_element_by_id('identifierId').send_keys(usernameStr)
  146.     cytd.find_element_by_id('identifierId').send_keys(Keys.ENTER)
  147.     time.sleep(1)
  148.     cytd.find_element_by_xpath('//div/input').send_keys(passwordStr)
  149.     cytd.find_element_by_xpath('//div/input').send_keys(Keys.ENTER)
  150.     time.sleep(1)
  151.     cytd.get(ul)
  152.     """
  153.    if mnp == 'playlist':
  154.    """
  155.     pattern_ul = r"playlist"
  156.     match_ul = re.search(pattern_ul, ul)
  157.     if match_ul:
  158.         wait = WebDriverWait(cytd, 10)
  159.         il = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.ytd-playlist-sidebar-primary-info-renderer > #thumbnail > #playlist-thumbnails #img')))
  160.         il.click()
  161.     vv = "!!!Download"
  162.     suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
  163.     plname = "_".join([vv, suffix])
  164.     time.sleep(0.5)
  165.     wait031 = ActionChains(cytd)
  166.     wait031.send_keys('k')
  167.     wait031.perform()
  168.     time.sleep(0.5)
  169.     cytd.find_element_by_css_selector('.style-scope:nth-child(4) > .yt-simple-endpoint > #button > #button').click()
  170.     time.sleep(0.5)
  171.     cytd.find_element_by_css_selector('.content-icon > .style-scope:nth-child(2)').click()
  172.     cytd.find_element_by_css_selector('#input-1').click()
  173.     cytd.find_element_by_css_selector('#input-1').send_keys(plname)
  174.     cytd.find_element_by_css_selector('.ytd-add-to-playlist-create-renderer #text').click()
  175.     i = 2
  176.     while i <= q:  # True?
  177.         if i <= q:
  178.             try:
  179.                 time.sleep(1)
  180.                 cytd.find_element_by_css_selector('.ytp-next-button').click()
  181.                 time.sleep(1)
  182.                 wait31 = ActionChains(cytd)
  183.                 wait31.send_keys('k')
  184.                 wait31.perform()
  185.                 time.sleep(1)
  186.                 cytd.find_element_by_css_selector('.style-scope:nth-child(4) > .yt-simple-endpoint > #button > #button').click()
  187.                 time.sleep(1)
  188.                 cytd.find_element_by_css_selector('.style-scope:nth-child(2) > #checkbox > #checkboxLabel > #checkbox-container #label').click()
  189.                 time.sleep(1)
  190.                 cytd.find_element_by_css_selector('.style-scope:nth-child(4) > .yt-simple-endpoint > #button > #button').click()
  191.                 i = i + 1
  192.             # .yt-button-renderer #text
  193.             except NoSuchElementException:
  194.                 cytd.find_element_by_xpath('xpath=//yt-button-renderer/a/paper-button/yt-formatted-string').click()
  195.                 time.sleep(1)
  196.                 wait31 = ActionChains(cytd)
  197.                 wait31.send_keys('k')
  198.                 wait31.perform()
  199.                 time.sleep(1)
  200.                 cytd.find_element_by_css_selector('.style-scope:nth-child(4) > .yt-simple-endpoint > #button > #button').click()
  201.                 time.sleep(1)
  202.                 cytd.find_element_by_css_selector('.style-scope:nth-child(2) > #checkbox > #checkboxLabel > #checkbox-container #label').click()
  203.                 time.sleep(1)
  204.                 cytd.find_element_by_css_selector('.style-scope:nth-child(4) > .yt-simple-endpoint > #button > #button').click()
  205.                 i = i + 1
  206.                 continue
  207.     cytd.find_element_by_css_selector('#container > #guide-button > #button').click()
  208.     time.sleep(2)
  209.     cytd.find_element_by_css_selector('.ytd-guide-collapsible-section-entry-renderer:nth-child(3) .title').click()
  210.     time.sleep(1)
  211.     """
  212.    wait = WebDriverWait(cytd, 10)
  213.    il = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.ytd-playlist-sidebar-primary-info-renderer > #thumbnail > #playlist-thumbnails #img')))
  214.    il.click()
  215.    """
  216.     cytd.find_element_by_css_selector('.ytd-playlist-sidebar-primary-info-renderer > #thumbnail > #playlist-thumbnails #img').click()
  217.     time.sleep(1)
  218.     wait31 = ActionChains(cytd)
  219.     wait31.send_keys('k')
  220.     wait31.perform()
  221.     plurl = cytd.current_url
  222.     print(plurl)
  223.     """
  224.    pattern = r"watch"  # basically searching for watch + list to merge to ideal form # ideal form = https://www.youtube.com/watch?list.... or not>? it doesn't any longer
  225.    pattern2 = r"list"
  226.    match = re.search(pattern, plurl)
  227.    match2 = re.search(pattern2, plurl)
  228.    i = match.end() + 1
  229.    print(i)
  230.    li = plurl[:i]
  231.    print(li)
  232.    j = match2.start()
  233.    print(j)
  234.    ji = plurl[j:]
  235.    print(ji)
  236.    liji = li + ji
  237.    print(liji)
  238.    """
  239.     # https://github.com/rg3/youtube-dl
  240.     if mp5mp4 == '1':
  241.         os.chdir(str({}).format(dp))
  242.         ydl_downloadpl = {'format': 'mp4'}
  243.         with youtube_dl.YoutubeDL(ydl_downloadpl) as ydl:
  244.             ydl.download(['{}'.format(plurl)])  # brackets necessary? probably
  245.             path, dirs, files = os.walk(dp).__next__()
  246.             s = len(files)
  247.             print(s)
  248.  
  249.     if mp5mp3 == '1':
  250.         os.chdir(str({}).format(dp))
  251.         ydl_downloadpl = {'format': 'bestaudio/best', 'postprocessors': [{
  252.             'key': 'FFmpegExtractAudio',
  253.             'preferredcodec': 'mp3',
  254.             'preferredquality': '192', }]}
  255.         with youtube_dl.YoutubeDL(ydl_downloadpl) as ydl:
  256.             ydl.download(['{}'.format(plurl)])
  257.             path, dirs, files = os.walk(dp).__next__()
  258.             s = len(files)
  259.             print(s)
  260.  
  261.         """
  262.                        if plurl[0:4] != 'list':
  263.                strg = plurl.lstrip("qwertyuiopasdfghjkzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890:&//?_=.")
  264.                print(strg)
  265.                if strg[0:1] == 'l':
  266.                    print('l found')
  267.                    if strg[0:4] == 'list':
  268.                        plurlk = "https://www.youtube.com/watch?" + strg
  269.                        plurldp = (dp, plurlk)
  270.                        # https://github.com/rg3/youtube-dl
  271.                        # chill implement see github # re first
  272.                        if mp5 == 'mp4':
  273.                            os.system("youtube-dl -o {0} {1}".format(*plurldp))
  274.                        if mp5 == 'mp3':
  275.                            os.system("youtube-dl -x --audio-format mp3 -o {0} {1}".format(*plurldp))
  276.            """
  277.         """
  278.                                                        if strg[0:4] != 'list':
  279.                                str1 = strg.lstrip("l")
  280.                                print(str1)
  281.                                print('l found')
  282.                                str1 = str1.lstrip("qwertyuiopasdfghjkzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890:&//?_=.")
  283.                                print(str1)
  284.                                if str1[0:4] == 'list':
  285.                                    plurlk = "https://www.youtube.com/watch?" + str1
  286.                                    plurldp = (dp, plurlk)
  287.                                    # https://github.com/rg3/youtube-dl
  288.                                    if mp5 == 'mp4':
  289.                                        os.system("youtube-dl -o {0} {1}".format(*plurldp))
  290.                                    if mp5 == 'mp3':
  291.                                        os.system("youtube-dl -x --audio-format mp3 -o {0} {1}".format(*plurldp))
  292.                                if str1[0:4] != 'list':
  293.                                    str2 = str1.lstrip("l")
  294.                                    print(str2)
  295.                                    print('l found')
  296.                                    str2 = str2.lstrip("qwertyuiopasdfghjkzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890:&//?_=.")
  297.                                    print(str2)
  298.                                    if str2[0:4] == 'list':
  299.                                        plurlk = "https://www.youtube.com/watch?" + str2
  300.                                        plurldp = (dp, plurlk)
  301.                                        # https://github.com/rg3/youtube-dl
  302.                                        if mp5 == 'mp4':
  303.                                            os.system("youtube-dl -o {0} {1}".format(*plurldp))
  304.                                        if mp5 == 'mp3':
  305.                                            os.system("youtube-dl -x --audio-format mp3 -o {0} {1}".format(*plurldp))
  306.                                    if str2[0:4] != 'list':
  307.                                        str3 = str2.lstrip("l")
  308.                                        print(str3)
  309.                                        print('l found')
  310.                                        str3 = str3.lstrip("qwertyuiopasdfghjkzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890:&//?_=.")
  311.                                        print(str3)
  312.                                        if str3[0:4] == 'list':
  313.                                            plurlk = "https://www.youtube.com/watch?" + str3
  314.                                            plurldp = (dp, plurlk)
  315.                                            # https://github.com/rg3/youtube-dl
  316.                                            if mp5 == 'mp4':
  317.                                                os.system("youtube-dl -o {0} {1}".format(*plurldp))
  318.                                            if mp5 == 'mp3':
  319.                                                os.system("youtube-dl -x --audio-format mp3 -o {0} {1}".format(*plurldp))
  320.                                        if str3[0:4] != 'list':
  321.                                            str4 = str3.lstrip("l")
  322.                                            print(str4)
  323.                                            print('l found')
  324.                                            str4 = str4.lstrip("qwertyuiopasdfghjkzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890:&//?_=.")
  325.                                            print(str4)
  326.                                            if str4[0:4] == 'list':
  327.                                                plurlk = "https://www.youtube.com/watch?" + str4
  328.                                                plurldp = (dp, plurlk)
  329.                                                # https://github.com/rg3/youtube-dl
  330.                                                if mp5 == 'mp4':
  331.                                                    os.system("youtube-dl -o {0} {1}".format(*plurldp))
  332.                                                if mp5 == 'mp3':
  333.                                                    os.system("youtube-dl -x --audio-format mp3 -o {0} {1}".format(*plurldp))
  334.                                            if str4[0:4] != 'list':
  335.                                                str5 = str4.lstrip("l")
  336.                                                print(str5)
  337.                                                print('l found')
  338.                                                str5 = str5.lstrip("qwertyuiopasdfghjkzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890:&//?_=.")
  339.                                                print(str5)
  340.                                                if str5[0:4] == 'list':
  341.                                                    plurlk = "https://www.youtube.com/watch?" + str5
  342.                                                    plurldp = (dp, plurlk)
  343.                                                    # https://github.com/rg3/youtube-dl
  344.                                                    if mp5 == 'mp4':
  345.                                                        os.system("youtube-dl -o {0} {1}".format(*plurldp))
  346.                                                    if mp5 == 'mp3':
  347.                                                        os.system("youtube-dl -x --audio-format mp3 -o {0} {1}".format(*plurldp))
  348.                                                if str5[0:4] != 'list':
  349.                                                    str6 = str5.lstrip("l")
  350.                                                    print(str6)
  351.                                                    print('l found')
  352.                                                    str6 = str6.lstrip("qwertyuiopasdfghjkzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890:&//?_=.")
  353.                                                    print(str6)
  354.                                                    if str6[0:4] == 'list':
  355.                                                        plurlk = "https://www.youtube.com/watch?" + str6
  356.                                                        plurldp = (dp, plurlk)
  357.                                                        # https://github.com/rg3/youtube-dl
  358.                                                        if mp5 == 'mp4':
  359.                                                            os.system("youtube-dl -o {0} {1}".format(*plurldp))
  360.                                                        if mp5 == 'mp3':
  361.                                                            os.system("youtube-dl -x --audio-format mp3 -o {0} {1}".format(*plurldp))
  362.  
  363.                            """
  364.         """
  365.            if mp5 == 'mp4':
  366.                call(["youtube-dl -o {0} {1}".format(*plurldp)])
  367.            elif mp5 == 'mp3':
  368.                call(["youtube-dl -x --audio-format mp3 -o {0} {1}".format(*plurldp)])
  369.            """
  370.         """
  371.            pl = Playlist(plurl)
  372.            pl.download_all(dp)
  373.            # path, dirs, files = os.walk(dp).__next__()
  374.            # s = len(files)
  375.            if mp5 == 'mp3':
  376.                for filename in os.listdir(dp):
  377.                    if filename.endswith(".mp4"):
  378.                        os.system("ffmpeg -i {0} {0}.mp3".format(filename))
  379.                    else:
  380.                        continue
  381.            """
  382.  
  383.         """
  384.            mpf = dp
  385.            for file in [n for n in os.listdir(mpf) if re.search('mp4', n)]:
  386.                fp = os.path.join(mpf, file)
  387.                opp = os.path.join(mpf, os.path.splitext(file)[0] + '.mp3')
  388.                c = mp.AudioFileClip(fp).subclip(10, )
  389.                c.write_audiofile(opp)
  390.                print('done')
  391. """
  392.  
  393. """
  394.  
  395. """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement