Started developing GUI
This commit is contained in:
+41
-44
@@ -1,50 +1,47 @@
|
||||
from os import access,F_OK,mkdir
|
||||
from PyQt5.uic import loadUi
|
||||
from PyQt5.QtWidgets import (
|
||||
QApplication, QMainWindow, QWidget,
|
||||
QDialog, QFileDialog, QInputDialog
|
||||
)
|
||||
from requests import get as load
|
||||
from bs4 import BeautifulSoup as parse
|
||||
import click
|
||||
from sys import stdout
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.argument('songs',nargs=-1,metavar='<SongID [SongID [...]]>')
|
||||
@click.option('-d','--dist',default='./Downloads',type=click.Path(exists=True),help='Where to save the songs (default: ./Downloads)')
|
||||
def CLI(songs,dist):
|
||||
"""===== Newgrounds Audio Downloader by H1K0 ====="""
|
||||
for song in songs:
|
||||
download(song,dist)
|
||||
class GUI(QMainWindow):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
loadUi('GUI/MainWindow.ui',self)
|
||||
self.dlbtn.clicked.connect(self.download)
|
||||
|
||||
def download(self):
|
||||
# Validating input
|
||||
songID=self.input.text()
|
||||
page=parse(load(f'https://www.newgrounds.com/audio/listen/{songID}').text,'html.parser')
|
||||
if page.find(id='pageerror') is not None:
|
||||
self.input.clear()
|
||||
return
|
||||
songTitle=page.find('title').text
|
||||
# Getting download link
|
||||
link='http://audio.ngfiles.com/'
|
||||
page=str(page)
|
||||
i=page.find('audio.ngfiles.com')+len('audio.ngfiles.com/')
|
||||
while not link.endswith('.mp3'):
|
||||
if page[i]!='\\': link+=page[i]
|
||||
i+=1
|
||||
# Locating file
|
||||
dist=QFileDialog.getSaveFileName(self,'Save File',
|
||||
link.split('/')[-1],
|
||||
'MP3 Audio File (*.mp3)')[0]
|
||||
if not dist: return
|
||||
# Downloading
|
||||
with open(dist,'wb') as out:
|
||||
out.write(load(link).content)
|
||||
self.input.clear()
|
||||
|
||||
|
||||
def download(songID,dist):
|
||||
print(f'Loading https://www.newgrounds.com/audio/listen/{songID}...')
|
||||
page=parse(load(f'https://www.newgrounds.com/audio/listen/{songID}').text,'html.parser')
|
||||
songTitle=page.find('title').text
|
||||
|
||||
print('Searching download link...')
|
||||
link='http://audio.ngfiles.com/'
|
||||
page=str(page)
|
||||
i=page.find('audio.ngfiles.com')+len('audio.ngfiles.com/')
|
||||
while not link.endswith('.mp3'):
|
||||
if page[i]!='\\': link+=page[i]
|
||||
i+=1
|
||||
|
||||
if not access(dist,F_OK): mkdir(dist)
|
||||
print(f'Downloading "{songTitle}"...')
|
||||
BARLEN=50
|
||||
with open(f'{dist}/{link.split("/")[-1]}','wb') as out:
|
||||
file=load(link,stream=True)
|
||||
total=file.headers.get('content-length')
|
||||
if total is None: total=-1
|
||||
else: total=int(total)
|
||||
downloaded=0
|
||||
for data in file.iter_content(chunk_size=max(total//BARLEN,1024)):
|
||||
downloaded+=len(data)
|
||||
out.write(data)
|
||||
done=BARLEN*downloaded//total
|
||||
stdout.write(f'\r[{"█"*done}{"·"*(BARLEN-done)}]')
|
||||
stdout.flush()
|
||||
print()
|
||||
print(f'"{songTitle}" successfully downloaded.')
|
||||
|
||||
|
||||
if __name__=='__main__':
|
||||
CLI()
|
||||
if __name__ == '__main__':
|
||||
from sys import argv
|
||||
app=QApplication(argv)
|
||||
ngad=GUI()
|
||||
ngad.show()
|
||||
app.exec_()
|
||||
Reference in New Issue
Block a user