From 52fd85aac0c9cf3d4996a88b5bfe578361edab66 Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sat, 24 Jun 2017 20:09:56 +0530 Subject: [PATCH 01/42] Add .travis.yml --- .travis.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..a20c8ee --- /dev/null +++ b/.travis.yml @@ -0,0 +1,14 @@ +language: python +python: + - "2.7" + - "3.4" + - "3.5" + - "3.6" +before_install: + - sudo apt-get -qq update + - sudo apt-get install -y ffmpeg +install: + - pip install -r requirements.txt +# command to run tests +script: pytest + From fb3c7e9ec32c2abbe8ffa341c8d23bcde8f1f963 Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sat, 24 Jun 2017 20:38:06 +0530 Subject: [PATCH 02/42] Improve metadata fixing mechanism --- core/metadata.py | 22 +++++++++++----------- spotdl.py | 3 ++- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/core/metadata.py b/core/metadata.py index 9736285..e6e5adb 100755 --- a/core/metadata.py +++ b/core/metadata.py @@ -25,23 +25,23 @@ def compare(file, metadata): already_tagged = False return already_tagged -def embed(music_file, meta_tags, output_ext): - if sys.version_info < (3, 0): +def embed(music_file, meta_tags): + if sys.version_info < (3, 0): music_file = music_file.encode('utf-8') if meta_tags is None: print('Could not find meta-tags') - elif output_ext == '.m4a': + elif music_file.endswith('.m4a'): print('Fixing meta-tags') - embed_m4a(music_file, meta_tags, output_ext) - elif output_ext == '.mp3': + embed_m4a(music_file, meta_tags) + elif music_file.endswith('.mp3'): print('Fixing meta-tags') - embed_mp3(music_file, meta_tags, output_ext) + embed_mp3(music_file, meta_tags) else: print('Cannot embed meta-tags into given output extension') -def embed_mp3(music_file, meta_tags, output_ext): +def embed_mp3(music_file, meta_tags): # EasyID3 is fun to use ;) - audiofile = EasyID3('Music/' + music_file + output_ext) + audiofile = EasyID3('Music/' + music_file) audiofile['artist'] = meta_tags['artists'][0]['name'] audiofile['albumartist'] = meta_tags['artists'][0]['name'] audiofile['album'] = meta_tags['album']['name'] @@ -64,13 +64,13 @@ def embed_mp3(music_file, meta_tags, output_ext): if meta_tags['copyright']: audiofile['copyright'] = meta_tags['copyright'] audiofile.save(v2_version=3) - audiofile = ID3('Music/' + music_file + output_ext) + audiofile = ID3('Music/' + music_file) albumart = urllib2.urlopen(meta_tags['album']['images'][0]['url']) audiofile["APIC"] = APIC(encoding=3, mime='image/jpeg', type=3, desc=u'Cover', data=albumart.read()) albumart.close() audiofile.save(v2_version=3) -def embed_m4a(music_file, meta_tags, output_ext): +def embed_m4a(music_file, meta_tags): # Apple has specific tags - see mutagen docs - # http://mutagen.readthedocs.io/en/latest/api/mp4.html tags = {'album': '\xa9alb', @@ -90,7 +90,7 @@ def embed_m4a(music_file, meta_tags, output_ext): 'copyright': 'cprt', 'tempo': 'tmpo'} - audiofile = MP4('Music/' + music_file + output_ext) + audiofile = MP4('Music/' + music_file) audiofile[tags['artist']] = meta_tags['artists'][0]['name'] audiofile[tags['albumartist']] = meta_tags['artists'][0]['name'] audiofile[tags['album']] = meta_tags['album']['name'] diff --git a/spotdl.py b/spotdl.py index 03d4d52..2b1727c 100755 --- a/spotdl.py +++ b/spotdl.py @@ -317,7 +317,8 @@ def grab_single(raw_song, number=None): convert_song(music_file) meta_tags = generate_metadata(raw_song) if not args.no_metadata: - metadata.embed(music_file, meta_tags, args.output_ext) + output = music_file + args.output_ext + metadata.embed(output, meta_tags) else: print('No audio streams available') From ae29ff8f8710e22e58f5611d18ae4742ec3a2006 Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sat, 24 Jun 2017 21:49:19 +0530 Subject: [PATCH 03/42] Split conversion code --- core/convert.py | 75 ++++++++++++++++++++++++++++++++++++++++ core/misc.py | 8 +++++ spotdl.py | 91 ++++++++----------------------------------------- 3 files changed, 97 insertions(+), 77 deletions(-) create mode 100644 core/convert.py diff --git a/core/convert.py b/core/convert.py new file mode 100644 index 0000000..d8fc717 --- /dev/null +++ b/core/convert.py @@ -0,0 +1,75 @@ +import subprocess +import os + +def song(input_song, output_song, avconv, verbose): + if not input_song == output_song: + input_song = input_song.encode('utf-8') + output_song = output_song.encode('utf-8') + print('Converting ' + input_song + ' to ' + output_song.split('.')[-1]) + if avconv: + convert_with_avconv(input_song, output_song, verbose) + else: + convert_with_FFmpeg(input_song, output_song, verbose) + os.remove('Music/' + input_song) + +def convert_with_avconv(input_song, output_song, verbose): + # different path for windows + if os.name == 'nt': + avconv_path = 'Scripts\\avconv.exe' + else: + avconv_path = 'avconv' + + if verbose: + level = 'debug' + else: + level = '0' + + command = [avconv_path, + '-loglevel', level, + '-i', 'Music/' + input_song, + '-ab', '192k', + 'Music/' + output_song] + + subprocess.call(command) + + +def convert_with_FFmpeg(input_song, output_song, verbose): + # What are the differences and similarities between ffmpeg, libav, and avconv? + # https://stackoverflow.com/questions/9477115 + # ffmeg encoders high to lower quality + # libopus > libvorbis >= libfdk_aac > aac > libmp3lame + # libfdk_aac due to copyrights needs to be compiled by end user + # on MacOS brew install ffmpeg --with-fdk-aac will do just that. Other OS? + # https://trac.ffmpeg.org/wiki/Encode/AAC + + if os.name == "nt": + ffmpeg_pre = 'Scripts\\ffmpeg.exe ' + else: + ffmpeg_pre = 'ffmpeg ' + + ffmpeg_pre += '-y ' + if not verbose: + ffmpeg_pre += '-hide_banner -nostats -v panic ' + + input_ext = input_song.split('.')[-1] + output_ext = output_song.split('.')[-1] + + if input_ext == 'm4a': + if output_ext == 'mp3': + ffmpeg_params = '-codec:v copy -codec:a libmp3lame -q:a 2 ' + elif output_ext == 'webm': + ffmpeg_params = '-c:a libopus -vbr on -b:a 192k -vn ' + + elif input_ext == 'webm': + if output_ext == 'mp3': + ffmpeg_params = ' -ab 192k -ar 44100 -vn ' + elif output_ext == 'm4a': + ffmpeg_params = '-cutoff 20000 -c:a libfdk_aac -b:a 192k -vn ' + + command = (ffmpeg_pre + + '-i Music/' + input_song + ' ' + + ffmpeg_params + + 'Music/' + output_song + '').split(' ') + + subprocess.call(command) + diff --git a/core/misc.py b/core/misc.py index e9b5e86..bc84beb 100755 --- a/core/misc.py +++ b/core/misc.py @@ -117,6 +117,14 @@ def fix_decoding(query): query = query.decode('utf-8') return query +def filter_path(path): + os.chdir(sys.path[0]) + if not os.path.exists(path): + os.makedirs(path) + for temp in os.listdir(path): + if temp.endswith('.temp'): + os.remove(path + '/' + temp) + def grace_quit(): print('') print('') diff --git a/spotdl.py b/spotdl.py index 2b1727c..44fc5d2 100755 --- a/spotdl.py +++ b/spotdl.py @@ -3,6 +3,7 @@ # -*- coding: UTF-8 -*- from core import metadata +from core import convert from core import misc from bs4 import BeautifulSoup from titlecase import titlecase @@ -11,7 +12,6 @@ import spotipy import pafy import sys import os -import subprocess # urllib2 is urllib.request in python3 try: @@ -33,8 +33,10 @@ def generate_metadata(raw_song): meta_tags = spotify.track(raw_song) else: # otherwise search on spotify and fetch information from first result - meta_tags = spotify.search(raw_song, limit=1)['tracks']['items'][0] - + try: + meta_tags = spotify.search(raw_song, limit=1)['tracks']['items'][0] + except: + return None artist = spotify.artist(meta_tags['artists'][0]['id']) album = spotify.album(meta_tags['album']['id']) @@ -157,75 +159,6 @@ def download_song(content): link.download(filepath='Music/' + music_file + args.input_ext) return True -# convert song from input_ext to output_ext -def convert_song(music_file): - # skip conversion if input_ext == output_ext - if not args.input_ext == args.output_ext: - music_file = music_file.encode('utf-8') - print('Converting ' + music_file + args.input_ext + ' to ' + args.output_ext[1:]) - if args.avconv: - convert_with_avconv(music_file) - else: - convert_with_FFmpeg(music_file) - os.remove('Music/' + music_file + args.input_ext) - -def convert_with_avconv(music_file): - # different path for windows - if os.name == 'nt': - avconv_path = 'Scripts\\avconv.exe' - else: - avconv_path = 'avconv' - - if args.verbose: - level = 'debug' - else: - level = '0' - - command = [avconv_path, - '-loglevel', level, - '-i', 'Music/' + music_file + args.input_ext, - '-ab', '192k', - 'Music/' + music_file + args.output_ext] - - subprocess.call(command) - - -def convert_with_FFmpeg(music_file): - # What are the differences and similarities between ffmpeg, libav, and avconv? - # https://stackoverflow.com/questions/9477115 - # ffmeg encoders high to lower quality - # libopus > libvorbis >= libfdk_aac > aac > libmp3lame - # libfdk_aac due to copyrights needs to be compiled by end user - # on MacOS brew install ffmpeg --with-fdk-aac will do just that. Other OS? - # https://trac.ffmpeg.org/wiki/Encode/AAC - - if os.name == "nt": - ffmpeg_pre = 'Scripts\\ffmpeg.exe ' - else: - ffmpeg_pre = 'ffmpeg ' - - ffmpeg_pre += '-y ' - if not args.verbose: - ffmpeg_pre += '-hide_banner -nostats -v panic ' - - if args.input_ext == '.m4a': - if args.output_ext == '.mp3': - ffmpeg_params = '-codec:v copy -codec:a libmp3lame -q:a 2 ' - elif output_ext == '.webm': - ffmpeg_params = '-c:a libopus -vbr on -b:a 192k -vn ' - elif args.input_ext == '.webm': - if args.output_ext == '.mp3': - ffmpeg_params = ' -ab 192k -ar 44100 -vn ' - elif args.output_ext == '.m4a': - ffmpeg_params = '-cutoff 20000 -c:a libfdk_aac -b:a 192k -vn ' - - command = (ffmpeg_pre + - '-i Music/' + music_file + args.input_ext + ' ' + - ffmpeg_params + - 'Music/' + music_file + args.output_ext + '').split(' ') - - subprocess.call(command) - # check if input song already exists in Music folder def check_exists(music_file, raw_song, islist): files = os.listdir("Music") @@ -314,19 +247,23 @@ def grab_single(raw_song, number=None): if not check_exists(music_file, raw_song, islist=islist): if download_song(content): print('') - convert_song(music_file) + input_song = music_file + args.input_ext + output_song = music_file + args.output_ext + convert.song(input_song, + output_song, + avconv=args.avconv, + verbose=args.verbose) meta_tags = generate_metadata(raw_song) if not args.no_metadata: - output = music_file + args.output_ext - metadata.embed(output, meta_tags) + metadata.embed(output_song, meta_tags) else: print('No audio streams available') if __name__ == '__main__': os.chdir(sys.path[0]) - if not os.path.exists("Music"): - os.makedirs("Music") + + misc.filter_path('Music') # token is mandatory when using Spotify's API # https://developer.spotify.com/news-stories/2017/01/27/removing-unauthenticated-calls-to-the-web-api/ From 69634475adfb548d2f837fd23cccc45b15499350 Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sun, 25 Jun 2017 00:04:21 +0530 Subject: [PATCH 04/42] Test spotify generated songname --- .cache/v/cache/lastfailed | 1 + .gitignore | 2 +- spotdl.py | 23 +++++++++++++---------- test/.cache/v/cache/lastfailed | 3 +++ test/test_spotify.py | 9 +++++++++ 5 files changed, 27 insertions(+), 11 deletions(-) create mode 100644 .cache/v/cache/lastfailed create mode 100644 test/.cache/v/cache/lastfailed create mode 100644 test/test_spotify.py diff --git a/.cache/v/cache/lastfailed b/.cache/v/cache/lastfailed new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/.cache/v/cache/lastfailed @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/.gitignore b/.gitignore index ffeaad5..3018ac2 100755 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ *.pyc __pycache__/ -/Music/ +Music/ /*.txt diff --git a/spotdl.py b/spotdl.py index 44fc5d2..35332f1 100755 --- a/spotdl.py +++ b/spotdl.py @@ -19,7 +19,7 @@ try: except ImportError: import urllib.request as urllib2 -# decode spotify link to "[artist] - [song]" +# "[artist] - [song]" def generate_songname(raw_song): if misc.is_spotify(raw_song): tags = generate_metadata(raw_song) @@ -105,7 +105,7 @@ def go_pafy(raw_song): return pafy.new(trackURL) # title of the YouTube video -def get_YouTube_title(content, number): +def get_YouTube_title(content, number=None): title = misc.fix_encoding(content.title) if number is None: return title @@ -259,18 +259,21 @@ def grab_single(raw_song, number=None): else: print('No audio streams available') +class Args(object): + manual = False + +args = Args() +# token is mandatory when using Spotify's API +# https://developer.spotify.com/news-stories/2017/01/27/removing-unauthenticated-calls-to-the-web-api/ +token = misc.generate_token() +spotify = spotipy.Spotify(auth=token) + +misc.filter_path('Music') + if __name__ == '__main__': os.chdir(sys.path[0]) - misc.filter_path('Music') - - # token is mandatory when using Spotify's API - # https://developer.spotify.com/news-stories/2017/01/27/removing-unauthenticated-calls-to-the-web-api/ - token = misc.generate_token() - spotify = spotipy.Spotify(auth=token) - - # set up arguments args = misc.get_arguments() if args.song: diff --git a/test/.cache/v/cache/lastfailed b/test/.cache/v/cache/lastfailed new file mode 100644 index 0000000..fafc580 --- /dev/null +++ b/test/.cache/v/cache/lastfailed @@ -0,0 +1,3 @@ +{ + "test_youtube.py": true +} \ No newline at end of file diff --git a/test/test_spotify.py b/test/test_spotify.py new file mode 100644 index 0000000..05c25d4 --- /dev/null +++ b/test/test_spotify.py @@ -0,0 +1,9 @@ +# -*- coding: UTF-8 -*- + +import spotdl + +def test_songname(): + song = "http://open.spotify.com/track/2e0jnySVkYF1pvBlpoNX1Y" + expected_title = "David André Østby - Tilbake (SAEVIK Remix)" + title = spotdl.generate_songname(song) + assert title == expected_title From e2c11f3e0c8385ab4f27cb8ef63b420de672b09a Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sun, 25 Jun 2017 00:05:00 +0530 Subject: [PATCH 05/42] Test spotify generated songname --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 3018ac2..eeaf815 100755 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.pyc __pycache__/ +.cache/ Music/ /*.txt From 5975fa19e91d9f576a8e30c24e904b52dd9571d7 Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sun, 25 Jun 2017 00:06:04 +0530 Subject: [PATCH 06/42] Test spotify generated songname --- .cache/v/cache/lastfailed | 1 - test/.cache/v/cache/lastfailed | 3 --- 2 files changed, 4 deletions(-) delete mode 100644 .cache/v/cache/lastfailed delete mode 100644 test/.cache/v/cache/lastfailed diff --git a/.cache/v/cache/lastfailed b/.cache/v/cache/lastfailed deleted file mode 100644 index 9e26dfe..0000000 --- a/.cache/v/cache/lastfailed +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/test/.cache/v/cache/lastfailed b/test/.cache/v/cache/lastfailed deleted file mode 100644 index fafc580..0000000 --- a/test/.cache/v/cache/lastfailed +++ /dev/null @@ -1,3 +0,0 @@ -{ - "test_youtube.py": true -} \ No newline at end of file From 10c3c6648359c6171b564396385c3d947645ec8e Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 00:07:21 +0530 Subject: [PATCH 07/42] Update command to run tests --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index a20c8ee..2c708b3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,5 +10,4 @@ before_install: install: - pip install -r requirements.txt # command to run tests -script: pytest - +script: python -m pytest test From 0dfaf183b5f79433bfd62f5739ec8fac1b623120 Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sun, 25 Jun 2017 00:31:57 +0530 Subject: [PATCH 08/42] Test YouTube track title --- core/misc.py | 6 +++--- spotdl.py | 12 ++++++------ test/test_basic.py | 15 +++++++++++++++ test/test_spotify.py | 9 --------- 4 files changed, 24 insertions(+), 18 deletions(-) create mode 100644 test/test_basic.py delete mode 100644 test/test_spotify.py diff --git a/core/misc.py b/core/misc.py index bc84beb..f3da00f 100755 --- a/core/misc.py +++ b/core/misc.py @@ -101,10 +101,10 @@ def generate_token(): token = creds.get_access_token() return token -def generate_search_URL(song): +def generate_search_url(song): # urllib2.quote() encodes URL with special characters - URL = "https://www.youtube.com/results?sp=EgIQAQ%253D%253D&q=" + quote(song) - return URL + url = "https://www.youtube.com/results?sp=EgIQAQ%253D%253D&q=" + quote(song) + return url # fix encoding issues in python2 def fix_encoding(query): diff --git a/spotdl.py b/spotdl.py index 35332f1..3176694 100755 --- a/spotdl.py +++ b/spotdl.py @@ -57,12 +57,12 @@ def generate_metadata(raw_song): #pprint.pprint(spotify.album(meta_tags['album']['id'])) return meta_tags -def generate_YouTube_URL(raw_song): +def generate_youtube_url(raw_song): # decode spotify http link to "[artist] - [song]" song = generate_songname(raw_song) # generate direct search YouTube URL - searchURL = misc.generate_search_URL(song) - item = urllib2.urlopen(searchURL).read() + search_url = misc.generate_search_url(song) + item = urllib2.urlopen(search_url).read() #item = unicode(item, 'utf-8') items_parse = BeautifulSoup(item, "html.parser") check = 1 @@ -97,12 +97,12 @@ def generate_YouTube_URL(raw_song): # parse track from YouTube def go_pafy(raw_song): # video link of the video to extract audio from - trackURL = generate_YouTube_URL(raw_song) - if trackURL is None: + track_url = generate_youtube_url(raw_song) + if track_url is None: return None else: # parse the YouTube video - return pafy.new(trackURL) + return pafy.new(track_url) # title of the YouTube video def get_YouTube_title(content, number=None): diff --git a/test/test_basic.py b/test/test_basic.py new file mode 100644 index 0000000..b03d063 --- /dev/null +++ b/test/test_basic.py @@ -0,0 +1,15 @@ +# -*- coding: UTF-8 -*- + +import spotdl + +raw_song = "http://open.spotify.com/track/2e0jnySVkYF1pvBlpoNX1Y" + +def test_spotify(): + expected_title = "David André Østby - Tilbake (SAEVIK Remix)" + title = spotdl.generate_songname(raw_song) + assert title == expected_title + +def test_youtube_title(): + expected_url = "youtube.com/watch?v=zkD4smbefbc" + url = spotdl.generate_youtube_url(raw_song) + assert url == expected_url diff --git a/test/test_spotify.py b/test/test_spotify.py deleted file mode 100644 index 05c25d4..0000000 --- a/test/test_spotify.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: UTF-8 -*- - -import spotdl - -def test_songname(): - song = "http://open.spotify.com/track/2e0jnySVkYF1pvBlpoNX1Y" - expected_title = "David André Østby - Tilbake (SAEVIK Remix)" - title = spotdl.generate_songname(song) - assert title == expected_title From 142d14118bd2072634037ce9895c5a76d14fb8ee Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sun, 25 Jun 2017 01:05:25 +0530 Subject: [PATCH 09/42] Add more basic tests --- spotdl.py | 7 ++++--- test/test_basic.py | 34 +++++++++++++++++++++++++++------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/spotdl.py b/spotdl.py index 3176694..e80905d 100755 --- a/spotdl.py +++ b/spotdl.py @@ -105,7 +105,7 @@ def go_pafy(raw_song): return pafy.new(track_url) # title of the YouTube video -def get_YouTube_title(content, number=None): +def get_youtube_title(content, number=None): title = misc.fix_encoding(content.title) if number is None: return title @@ -160,7 +160,7 @@ def download_song(content): return True # check if input song already exists in Music folder -def check_exists(music_file, raw_song, islist): +def check_exists(music_file, raw_song, islist=True): files = os.listdir("Music") for file in files: if file.endswith(".temp"): @@ -187,6 +187,7 @@ def check_exists(music_file, raw_song, islist): return False else: return True + return False # download songs from list def grab_list(file): @@ -240,7 +241,7 @@ def grab_single(raw_song, number=None): return # print "[number]. [artist] - [song]" if downloading from list # otherwise print "[artist] - [song]" - print(get_YouTube_title(content, number)) + print(get_youtube_title(content, number)) # generate file name of the song to download music_file = misc.generate_filename(content.title) music_file = misc.fix_decoding(music_file) diff --git a/test/test_basic.py b/test/test_basic.py index b03d063..cc989f0 100644 --- a/test/test_basic.py +++ b/test/test_basic.py @@ -2,14 +2,34 @@ import spotdl -raw_song = "http://open.spotify.com/track/2e0jnySVkYF1pvBlpoNX1Y" +raw_song = 'http://open.spotify.com/track/2e0jnySVkYF1pvBlpoNX1Y' -def test_spotify(): - expected_title = "David André Østby - Tilbake (SAEVIK Remix)" +def test_spotify_title(): + expect_title = 'David André Østby - Tilbake (SAEVIK Remix)' title = spotdl.generate_songname(raw_song) - assert title == expected_title + assert title == expect_title + +def test_youtube_url(): + expect_url = 'youtube.com/watch?v=zkD4smbefbc' + url = spotdl.generate_youtube_url(raw_song) + assert url == expect_url def test_youtube_title(): - expected_url = "youtube.com/watch?v=zkD4smbefbc" - url = spotdl.generate_youtube_url(raw_song) - assert url == expected_url + expect_title = 'Tilbake (SAEVIK Remix) [Feat. Marie Hognestad] - David André Østby' + content = spotdl.go_pafy(raw_song) + title = spotdl.get_youtube_title(content) + assert title == expect_title + +def test_check_exists(): + expect_check = False + content = spotdl.go_pafy(raw_song) + music_file = spotdl.misc.generate_filename(content.title) + music_file = spotdl.misc.fix_decoding(music_file) + check = spotdl.check_exists(music_file, raw_song) + assert check == expect_check + +def test_download(): + expect_download = True + content = spotdl.go_pafy(raw_song) + download = download_song(content) + assert download == expect_download From 93244e46ec405eaff4609a10a92512af7c14a4a0 Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sun, 25 Jun 2017 01:16:04 +0530 Subject: [PATCH 10/42] Fix download test --- core/convert.py | 1 + spotdl.py | 2 ++ test/test_basic.py | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/core/convert.py b/core/convert.py index d8fc717..32cd749 100644 --- a/core/convert.py +++ b/core/convert.py @@ -11,6 +11,7 @@ def song(input_song, output_song, avconv, verbose): else: convert_with_FFmpeg(input_song, output_song, verbose) os.remove('Music/' + input_song) + return True def convert_with_avconv(input_song, output_song, verbose): # different path for windows diff --git a/spotdl.py b/spotdl.py index e80905d..8db4352 100755 --- a/spotdl.py +++ b/spotdl.py @@ -262,6 +262,8 @@ def grab_single(raw_song, number=None): class Args(object): manual = False + input_ext = '.m4a' + output_ext = '.mp3' args = Args() # token is mandatory when using Spotify's API diff --git a/test/test_basic.py b/test/test_basic.py index cc989f0..b9325c6 100644 --- a/test/test_basic.py +++ b/test/test_basic.py @@ -31,5 +31,5 @@ def test_check_exists(): def test_download(): expect_download = True content = spotdl.go_pafy(raw_song) - download = download_song(content) + download = spotdl.download_song(content) assert download == expect_download From e0fb227ea526b939979caf09ca6f879342277ac8 Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sun, 25 Jun 2017 01:41:57 +0530 Subject: [PATCH 11/42] Add conversion test --- core/convert.py | 5 +++-- test/test_basic.py | 10 ++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/core/convert.py b/core/convert.py index 32cd749..4abacf2 100644 --- a/core/convert.py +++ b/core/convert.py @@ -1,7 +1,7 @@ import subprocess import os -def song(input_song, output_song, avconv, verbose): +def song(input_song, output_song, avconv=False, verbose=False): if not input_song == output_song: input_song = input_song.encode('utf-8') output_song = output_song.encode('utf-8') @@ -11,7 +11,8 @@ def song(input_song, output_song, avconv, verbose): else: convert_with_FFmpeg(input_song, output_song, verbose) os.remove('Music/' + input_song) - return True + return True + return False def convert_with_avconv(input_song, output_song, verbose): # different path for windows diff --git a/test/test_basic.py b/test/test_basic.py index b9325c6..dc14c38 100644 --- a/test/test_basic.py +++ b/test/test_basic.py @@ -33,3 +33,13 @@ def test_download(): content = spotdl.go_pafy(raw_song) download = spotdl.download_song(content) assert download == expect_download + +def test_convert(): + expect_convert = True + content = spotdl.go_pafy(raw_song) + music_file = spotdl.misc.generate_filename(content.title) + music_file = spotdl.misc.fix_decoding(music_file) + input_song = music_file + spotdl.args.input_ext + output_song = music_file + spotdl.args.output_ext + convert = spotdl.convert.song(input_song, output_song) + assert convert == expect_convert From e18a74ccc3fa0cf303df01416efd3980259ded0a Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sun, 25 Jun 2017 02:34:55 +0530 Subject: [PATCH 12/42] Add metadata test --- core/convert.py | 9 ++++----- core/metadata.py | 9 +++++++-- spotdl.py | 1 + test/{test_basic.py => test_defaults.py} | 13 ++++++++++++- 4 files changed, 24 insertions(+), 8 deletions(-) rename test/{test_basic.py => test_defaults.py} (76%) diff --git a/core/convert.py b/core/convert.py index 4abacf2..a7af385 100644 --- a/core/convert.py +++ b/core/convert.py @@ -7,12 +7,11 @@ def song(input_song, output_song, avconv=False, verbose=False): output_song = output_song.encode('utf-8') print('Converting ' + input_song + ' to ' + output_song.split('.')[-1]) if avconv: - convert_with_avconv(input_song, output_song, verbose) + exit_code = convert_with_avconv(input_song, output_song, verbose) else: - convert_with_FFmpeg(input_song, output_song, verbose) - os.remove('Music/' + input_song) - return True - return False + exit_code = convert_with_FFmpeg(input_song, output_song, verbose) + return exit_code + return None def convert_with_avconv(input_song, output_song, verbose): # different path for windows diff --git a/core/metadata.py b/core/metadata.py index e6e5adb..2cda5aa 100755 --- a/core/metadata.py +++ b/core/metadata.py @@ -30,14 +30,17 @@ def embed(music_file, meta_tags): music_file = music_file.encode('utf-8') if meta_tags is None: print('Could not find meta-tags') + return None elif music_file.endswith('.m4a'): print('Fixing meta-tags') - embed_m4a(music_file, meta_tags) + return embed_m4a(music_file, meta_tags) + return True elif music_file.endswith('.mp3'): print('Fixing meta-tags') - embed_mp3(music_file, meta_tags) + return embed_mp3(music_file, meta_tags) else: print('Cannot embed meta-tags into given output extension') + return False def embed_mp3(music_file, meta_tags): # EasyID3 is fun to use ;) @@ -69,6 +72,7 @@ def embed_mp3(music_file, meta_tags): audiofile["APIC"] = APIC(encoding=3, mime='image/jpeg', type=3, desc=u'Cover', data=albumart.read()) albumart.close() audiofile.save(v2_version=3) + return True def embed_m4a(music_file, meta_tags): # Apple has specific tags - see mutagen docs - @@ -107,3 +111,4 @@ def embed_m4a(music_file, meta_tags): audiofile[tags['albumart']] = [ MP4Cover(albumart.read(), imageformat=MP4Cover.FORMAT_JPEG) ] albumart.close() audiofile.save() + return True diff --git a/spotdl.py b/spotdl.py index 8db4352..3c75f49 100755 --- a/spotdl.py +++ b/spotdl.py @@ -254,6 +254,7 @@ def grab_single(raw_song, number=None): output_song, avconv=args.avconv, verbose=args.verbose) + os.remove('Music/' + input_song) meta_tags = generate_metadata(raw_song) if not args.no_metadata: metadata.embed(output_song, meta_tags) diff --git a/test/test_basic.py b/test/test_defaults.py similarity index 76% rename from test/test_basic.py rename to test/test_defaults.py index dc14c38..e380be0 100644 --- a/test/test_basic.py +++ b/test/test_defaults.py @@ -35,7 +35,8 @@ def test_download(): assert download == expect_download def test_convert(): - expect_convert = True + # exit code None = success + expect_convert = None content = spotdl.go_pafy(raw_song) music_file = spotdl.misc.generate_filename(content.title) music_file = spotdl.misc.fix_decoding(music_file) @@ -43,3 +44,13 @@ def test_convert(): output_song = music_file + spotdl.args.output_ext convert = spotdl.convert.song(input_song, output_song) assert convert == expect_convert + +def test_metadata(): + expect_metadata = True + content = spotdl.go_pafy(raw_song) + music_file = spotdl.misc.generate_filename(content.title) + music_file = spotdl.misc.fix_decoding(music_file) + output_song = music_file + spotdl.args.output_ext + meta_tags = spotdl.generate_metadata(raw_song) + metadata = spotdl.metadata.embed(output_song, meta_tags) + assert metadata == expect_metadata From 87dbc58a645474ae317b98eee041bb93d12130eb Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sun, 25 Jun 2017 11:11:38 +0530 Subject: [PATCH 13/42] Install avconv --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 2c708b3..6bb6a4c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,7 @@ python: before_install: - sudo apt-get -qq update - sudo apt-get install -y ffmpeg + - sudo apt-get install -y libav-tools install: - pip install -r requirements.txt # command to run tests From ccebb8a002272ddd47002fd0a43b31e4aaedffe2 Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sun, 25 Jun 2017 11:35:23 +0530 Subject: [PATCH 14/42] Remove unnecessary return --- core/metadata.py | 1 - 1 file changed, 1 deletion(-) diff --git a/core/metadata.py b/core/metadata.py index 2cda5aa..a751c59 100755 --- a/core/metadata.py +++ b/core/metadata.py @@ -34,7 +34,6 @@ def embed(music_file, meta_tags): elif music_file.endswith('.m4a'): print('Fixing meta-tags') return embed_m4a(music_file, meta_tags) - return True elif music_file.endswith('.mp3'): print('Fixing meta-tags') return embed_mp3(music_file, meta_tags) From d13113c7fe891d497ca7f5724f213dc44b48ae26 Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sun, 25 Jun 2017 12:47:56 +0530 Subject: [PATCH 15/42] Add username and list test --- test/{test_defaults.py => test_single.py} | 0 test/test_username.py | 42 +++++++++++++++++++++++ 2 files changed, 42 insertions(+) rename test/{test_defaults.py => test_single.py} (100%) create mode 100644 test/test_username.py diff --git a/test/test_defaults.py b/test/test_single.py similarity index 100% rename from test/test_defaults.py rename to test/test_single.py diff --git a/test/test_username.py b/test/test_username.py new file mode 100644 index 0000000..16c608c --- /dev/null +++ b/test/test_username.py @@ -0,0 +1,42 @@ +# -*- coding: UTF-8 -*- + +import spotdl + +username = 'alex' + +def test_user(): + expect_playlists = 7 + playlists = spotdl.spotify.user_playlists(username) + playlists = len(playlists['items']) + assert playlists == expect_playlists + +def test_playlist(): + expect_tracks = 14 + playlist = spotdl.spotify.user_playlists(username)['items'][0] + tracks = playlist['tracks']['total'] + assert tracks == expect_tracks + +def test_list(): + playlist = spotdl.spotify.user_playlists(username)['items'][0] + expect_lines = playlist['tracks']['total'] + result = spotdl.spotify.user_playlist(playlist['owner']['id'], playlist['id'], fields='tracks,next') + tracks = result['tracks'] + spotdl.misc.feed_tracks('list.txt', tracks) + + while tracks['next']: + tracks = spotify.next(tracks) + misc.feed_tracks('list.txt', tracks) + + with open('list.txt', 'r') as listed: + expect_song = (listed.read()).splitlines()[0] + + spotdl.misc.trim_song('list.txt') + with open('list.txt', 'a') as myfile: + myfile.write(expect_song) + + with open('list.txt', 'r') as listed: + songs = (listed.read()).splitlines() + + lines = len(songs) + song = songs[-1] + assert (expect_lines == lines and expect_song == song) From e329fe9f3602ddd88a97db67a7cc651358606977 Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sun, 25 Jun 2017 13:48:54 +0530 Subject: [PATCH 16/42] Update metadata test --- test/list.txt | 14 ++++++++++++++ test/test_single.py | 5 +++-- 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 test/list.txt diff --git a/test/list.txt b/test/list.txt new file mode 100644 index 0000000..362cc61 --- /dev/null +++ b/test/list.txt @@ -0,0 +1,14 @@ +https://open.spotify.com/track/6pav0KCJLInt6cjZuVJBI0 +https://open.spotify.com/track/51VAe9ZwidLP0JDaL5p0cp +https://open.spotify.com/track/2YlYHoXimSTWxXKgN3eX2t +https://open.spotify.com/track/0pkWgz2RWfYFzi8v7AOldJ +https://open.spotify.com/track/0mZp2yHD66nIfwhrYn0mob +https://open.spotify.com/track/6hCMKNQR8XZtGlZcrS9ZoW +https://open.spotify.com/track/7rw29NRtmX0jIUCWmZuM79 +https://open.spotify.com/track/3LbbsMEynDkG1U2l8XzI0H +https://open.spotify.com/track/5XLLcnfznZicerhPdTVE5z +https://open.spotify.com/track/1ahUNcFxz9RCKGYHblBdoq +https://open.spotify.com/track/3SFQkiIAhXvAruV9aC6ZGd +https://open.spotify.com/track/6katJVSQg5DvCQZnn37FlU +https://open.spotify.com/track/6cnT8D9rlhREOtgl6wG8dx +https://open.spotify.com/track/52BUOdNI2TneBPq4EFOtAy \ No newline at end of file diff --git a/test/test_single.py b/test/test_single.py index e380be0..6d7e696 100644 --- a/test/test_single.py +++ b/test/test_single.py @@ -50,7 +50,8 @@ def test_metadata(): content = spotdl.go_pafy(raw_song) music_file = spotdl.misc.generate_filename(content.title) music_file = spotdl.misc.fix_decoding(music_file) - output_song = music_file + spotdl.args.output_ext meta_tags = spotdl.generate_metadata(raw_song) - metadata = spotdl.metadata.embed(output_song, meta_tags) + output_song = music_file + spotdl.args.output_ext + spotdl.metadata.embed(output_song, meta_tags) + metadata = spotdl.check_exists(music_file, raw_song) assert metadata == expect_metadata From 532bd892b068693c067c98704f3b4e04fc7dd7b0 Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sun, 25 Jun 2017 13:49:27 +0530 Subject: [PATCH 17/42] Update metadata test --- .gitignore | 2 +- test/list.txt | 14 -------------- 2 files changed, 1 insertion(+), 15 deletions(-) delete mode 100644 test/list.txt diff --git a/.gitignore b/.gitignore index eeaf815..e4b8660 100755 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ __pycache__/ .cache/ Music/ -/*.txt +*.txt diff --git a/test/list.txt b/test/list.txt deleted file mode 100644 index 362cc61..0000000 --- a/test/list.txt +++ /dev/null @@ -1,14 +0,0 @@ -https://open.spotify.com/track/6pav0KCJLInt6cjZuVJBI0 -https://open.spotify.com/track/51VAe9ZwidLP0JDaL5p0cp -https://open.spotify.com/track/2YlYHoXimSTWxXKgN3eX2t -https://open.spotify.com/track/0pkWgz2RWfYFzi8v7AOldJ -https://open.spotify.com/track/0mZp2yHD66nIfwhrYn0mob -https://open.spotify.com/track/6hCMKNQR8XZtGlZcrS9ZoW -https://open.spotify.com/track/7rw29NRtmX0jIUCWmZuM79 -https://open.spotify.com/track/3LbbsMEynDkG1U2l8XzI0H -https://open.spotify.com/track/5XLLcnfznZicerhPdTVE5z -https://open.spotify.com/track/1ahUNcFxz9RCKGYHblBdoq -https://open.spotify.com/track/3SFQkiIAhXvAruV9aC6ZGd -https://open.spotify.com/track/6katJVSQg5DvCQZnn37FlU -https://open.spotify.com/track/6cnT8D9rlhREOtgl6wG8dx -https://open.spotify.com/track/52BUOdNI2TneBPq4EFOtAy \ No newline at end of file From 2b0a3cc909d4a73fce84896ae9368edf5fad8f35 Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sun, 25 Jun 2017 14:15:39 +0530 Subject: [PATCH 18/42] Switch to shorter song to lower test duration --- test/test_single.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/test/test_single.py b/test/test_single.py index 6d7e696..5b55f1e 100644 --- a/test/test_single.py +++ b/test/test_single.py @@ -2,20 +2,20 @@ import spotdl -raw_song = 'http://open.spotify.com/track/2e0jnySVkYF1pvBlpoNX1Y' +raw_song = 'http://open.spotify.com/track/0JlS7BXXD07hRmevDnbPDU' def test_spotify_title(): - expect_title = 'David André Østby - Tilbake (SAEVIK Remix)' + expect_title = 'David André Østby - Intro' title = spotdl.generate_songname(raw_song) assert title == expect_title def test_youtube_url(): - expect_url = 'youtube.com/watch?v=zkD4smbefbc' + expect_url = 'youtube.com/watch?v=rg1wfcty0BA' url = spotdl.generate_youtube_url(raw_song) assert url == expect_url def test_youtube_title(): - expect_title = 'Tilbake (SAEVIK Remix) [Feat. Marie Hognestad] - David André Østby' + expect_title = 'Intro - David André Østby' content = spotdl.go_pafy(raw_song) title = spotdl.get_youtube_title(content) assert title == expect_title @@ -51,7 +51,19 @@ def test_metadata(): music_file = spotdl.misc.generate_filename(content.title) music_file = spotdl.misc.fix_decoding(music_file) meta_tags = spotdl.generate_metadata(raw_song) + output_song = music_file + spotdl.args.output_ext - spotdl.metadata.embed(output_song, meta_tags) - metadata = spotdl.check_exists(music_file, raw_song) - assert metadata == expect_metadata + metadata_output = spotdl.metadata.embed(output_song, meta_tags) + + input_song = music_file + spotdl.args.input_ext + metadata_input = spotdl.metadata.embed(input_song, meta_tags) + + assert metadata_output == (metadata_input == expect_metadata) + +def check_exists2(): + expect_check = True + content = spotdl.go_pafy(raw_song) + music_file = spotdl.misc.generate_filename(content.title) + music_file = spotdl.misc.fix_decoding(music_file) + check = spotdl.check_exists(music_file, raw_song) + assert check == expect_check From f8ff4901ef77ebb5e65191939b2b78ccfe085259 Mon Sep 17 00:00:00 2001 From: Ritiek Date: Sun, 25 Jun 2017 14:38:17 +0530 Subject: [PATCH 19/42] Test build --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6bb6a4c..742cdfe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,5 +10,4 @@ before_install: - sudo apt-get install -y libav-tools install: - pip install -r requirements.txt -# command to run tests script: python -m pytest test From 622ab2b53afb468034ea09d9d73c0ce7dc9a7a92 Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 15:09:53 +0530 Subject: [PATCH 20/42] Add libavcodec-extra-* --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 742cdfe..8e4c436 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,7 @@ before_install: - sudo apt-get -qq update - sudo apt-get install -y ffmpeg - sudo apt-get install -y libav-tools + - sudo apt-get install -y libavcodec-extra-* install: - pip install -r requirements.txt script: python -m pytest test From 440f9836b3df71bfc73a05465b2dd159c1c86ec8 Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 15:12:49 +0530 Subject: [PATCH 21/42] Add libmp3lmae --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 8e4c436..d400017 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,7 @@ before_install: - sudo apt-get install -y ffmpeg - sudo apt-get install -y libav-tools - sudo apt-get install -y libavcodec-extra-* + - sudo apt-get install -y libmp3lame0 install: - pip install -r requirements.txt script: python -m pytest test From b5244785caa8516d9753286f2dc3bc112073ae60 Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 15:25:07 +0530 Subject: [PATCH 22/42] Update .travis.yml --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index d400017..0644be6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,7 @@ before_install: - sudo apt-get install -y libav-tools - sudo apt-get install -y libavcodec-extra-* - sudo apt-get install -y libmp3lame0 + - sudo aptitude -y -q install libcairo2-dev libpixman-1-dev libpango1.0-dev libgif-dev libjpeg-dev libgtk2.0-dev vlc libvlc-dev portaudio19-dev libsqlite3-dev libcurl4-openssl-dev makeself curl install: - pip install -r requirements.txt script: python -m pytest test From 344c805e5d91531948b06d74948359b8f65dee38 Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 15:31:27 +0530 Subject: [PATCH 23/42] Update .travis.yml --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 0644be6..ac7ce15 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,7 @@ before_install: - sudo apt-get install -y libav-tools - sudo apt-get install -y libavcodec-extra-* - sudo apt-get install -y libmp3lame0 + - sudo apt-get install -y libmp3lame-dev - sudo aptitude -y -q install libcairo2-dev libpixman-1-dev libpango1.0-dev libgif-dev libjpeg-dev libgtk2.0-dev vlc libvlc-dev portaudio19-dev libsqlite3-dev libcurl4-openssl-dev makeself curl install: - pip install -r requirements.txt From 41013ee2066f0df6c8ff83454b2a2c1ed60a296d Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 16:21:22 +0530 Subject: [PATCH 24/42] Update .travis.yml --- .travis.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index ac7ce15..24d0461 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,12 +6,14 @@ python: - "3.6" before_install: - sudo apt-get -qq update - - sudo apt-get install -y ffmpeg - - sudo apt-get install -y libav-tools - - sudo apt-get install -y libavcodec-extra-* - - sudo apt-get install -y libmp3lame0 - - sudo apt-get install -y libmp3lame-dev - - sudo aptitude -y -q install libcairo2-dev libpixman-1-dev libpango1.0-dev libgif-dev libjpeg-dev libgtk2.0-dev vlc libvlc-dev portaudio19-dev libsqlite3-dev libcurl4-openssl-dev makeself curl + - sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libsdl2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev + - sudo apt-get install -y libmp3lame-dev libx264-dev libfdk-aac-dev libopus-dev + - wget http://ffmpeg.org/releases/ffmpeg-3.3.2.tar.gz + - tar -zxvf ffmpeg-3.3.2.tar.gz + - cd ffmpeg-3.3.2 + - ./configure --prefix=/usr --enable-gpl --enable-libx264 --enable-libmp3lame --enable-nonfree --enable-libfdk-aac --enable-libopus + - make + - sudo make install install: - pip install -r requirements.txt script: python -m pytest test From 039ff4cd0b7754e100c11448adff349e9d15db86 Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 16:23:15 +0530 Subject: [PATCH 25/42] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 24d0461..ec71c50 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ python: - "3.6" before_install: - sudo apt-get -qq update - - sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libsdl2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev + - sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev - sudo apt-get install -y libmp3lame-dev libx264-dev libfdk-aac-dev libopus-dev - wget http://ffmpeg.org/releases/ffmpeg-3.3.2.tar.gz - tar -zxvf ffmpeg-3.3.2.tar.gz From a348947d38c12524ed060485ca5d253c20cd4bc9 Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 16:27:48 +0530 Subject: [PATCH 26/42] Update .travis.yml --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index ec71c50..e500e2e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,11 +7,11 @@ python: before_install: - sudo apt-get -qq update - sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev - - sudo apt-get install -y libmp3lame-dev libx264-dev libfdk-aac-dev libopus-dev + - sudo apt-get install -y libmp3lame-dev libx264-dev - wget http://ffmpeg.org/releases/ffmpeg-3.3.2.tar.gz - tar -zxvf ffmpeg-3.3.2.tar.gz - cd ffmpeg-3.3.2 - - ./configure --prefix=/usr --enable-gpl --enable-libx264 --enable-libmp3lame --enable-nonfree --enable-libfdk-aac --enable-libopus + - ./configure --prefix=/usr --enable-gpl --enable-libx264 --enable-libmp3lame --enable-nonfree - make - sudo make install install: From 02b57002fb71eeff37219f3c0c3b1e5306250981 Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 16:30:35 +0530 Subject: [PATCH 27/42] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e500e2e..e07c5d6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ python: before_install: - sudo apt-get -qq update - sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev - - sudo apt-get install -y libmp3lame-dev libx264-dev + - sudo apt-get install -y yasm libmp3lame-dev libx264-dev - wget http://ffmpeg.org/releases/ffmpeg-3.3.2.tar.gz - tar -zxvf ffmpeg-3.3.2.tar.gz - cd ffmpeg-3.3.2 From 41dea48f6e28a72cb7ff02adca91ea3f16d42931 Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 16:43:15 +0530 Subject: [PATCH 28/42] Update .travis.yml --- .travis.yml | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 93 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index e07c5d6..313c7da 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,10 +7,99 @@ python: before_install: - sudo apt-get -qq update - sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev - - sudo apt-get install -y yasm libmp3lame-dev libx264-dev - - wget http://ffmpeg.org/releases/ffmpeg-3.3.2.tar.gz - - tar -zxvf ffmpeg-3.3.2.tar.gz - - cd ffmpeg-3.3.2 + - mkdir ~/ffmpeg_sources + + - cd ~/ffmpeg_sources + - wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz + - tar xzvf yasm-1.3.0.tar.gz + - cd yasm-1.3.0 + - ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" + - make + - make install + + - cd ~/ffmpeg_sources + - wget http://www.nasm.us/pub/nasm/releasebuilds/2.13.01/nasm-2.13.01.tar.bz2 + - tar xjvf nasm-2.13.01.tar.bz2 + - cd nasm-2.13.01 + - ./autogen.sh + - PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" + - PATH="$HOME/bin:$PATH" make + - make install + + - cd ~/ffmpeg_sources + - wget http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2 + - tar xjvf last_x264.tar.bz2 + - cd x264-snapshot* + - PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --disable-opencl + - PATH="$HOME/bin:$PATH" make + - make install + + - sudo apt-get install cmake mercurial + - cd ~/ffmpeg_sources + - hg clone https://bitbucket.org/multicoreware/x265 + - cd ~/ffmpeg_sources/x265/build/linux + - PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source + - make + - make install + + - cd ~/ffmpeg_sources + - wget -O fdk-aac.tar.gz https://github.com/mstorsjo/fdk-aac/tarball/master + - tar xzvf fdk-aac.tar.gz + - cd mstorsjo-fdk-aac* + - autoreconf -fiv + - ./configure --prefix="$HOME/ffmpeg_build" --disable-shared + - make + - make install + + - cd ~/ffmpeg_sources + - wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz + - tar xzvf lame-3.99.5.tar.gz + - cd lame-3.99.5 + - ./configure --prefix="$HOME/ffmpeg_build" --enable-nasm --disable-shared + - make + - make install + + - cd ~/ffmpeg_sources + - wget https://archive.mozilla.org/pub/opus/opus-1.1.5.tar.gz + - tar xzvf opus-1.1.5.tar.gz + - cd opus-1.1.5 + - ./configure --prefix="$HOME/ffmpeg_build" --disable-shared + - make + - make install + + - cd ~/ffmpeg_sources + - git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git + - cd libvpx + - PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests + - PATH="$HOME/bin:$PATH" make + - make install + + - cd ~/ffmpeg_sources + - wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 + - tar xjvf ffmpeg-snapshot.tar.bz2 + - cd ffmpeg + - PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \ + --prefix="$HOME/ffmpeg_build" \ + --pkg-config-flags="--static" \ + --extra-cflags="-I$HOME/ffmpeg_build/include" \ + --extra-ldflags="-L$HOME/ffmpeg_build/lib" \ + --bindir="$HOME/bin" \ + --enable-gpl \ + --enable-libass \ + --enable-libfdk-aac \ + --enable-libfreetype \ + --enable-libmp3lame \ + --enable-libopus \ + --enable-libtheora \ + --enable-libvorbis \ + --enable-libvpx \ + --enable-libx264 \ + --enable-libx265 \ + --enable-nonfree + - PATH="$HOME/bin:$PATH" make + - make install + - hash -r + - ./configure --prefix=/usr --enable-gpl --enable-libx264 --enable-libmp3lame --enable-nonfree - make - sudo make install From 193377c9607bc070db22214670ac6ecd9ec64711 Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 16:45:23 +0530 Subject: [PATCH 29/42] Update .travis.yml --- .travis.yml | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/.travis.yml b/.travis.yml index 313c7da..104b75e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -78,24 +78,7 @@ before_install: - wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 - tar xjvf ffmpeg-snapshot.tar.bz2 - cd ffmpeg - - PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \ - --prefix="$HOME/ffmpeg_build" \ - --pkg-config-flags="--static" \ - --extra-cflags="-I$HOME/ffmpeg_build/include" \ - --extra-ldflags="-L$HOME/ffmpeg_build/lib" \ - --bindir="$HOME/bin" \ - --enable-gpl \ - --enable-libass \ - --enable-libfdk-aac \ - --enable-libfreetype \ - --enable-libmp3lame \ - --enable-libopus \ - --enable-libtheora \ - --enable-libvorbis \ - --enable-libvpx \ - --enable-libx264 \ - --enable-libx265 \ - --enable-nonfree + - PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --pkg-config-flags="--static" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree - PATH="$HOME/bin:$PATH" make - make install - hash -r From 8adf9fc9eeca7a469c94382593f923d58b0eab63 Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 16:48:40 +0530 Subject: [PATCH 30/42] Update .travis.yml --- .travis.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 104b75e..c3f9ea8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -82,10 +82,6 @@ before_install: - PATH="$HOME/bin:$PATH" make - make install - hash -r - - - ./configure --prefix=/usr --enable-gpl --enable-libx264 --enable-libmp3lame --enable-nonfree - - make - - sudo make install install: - pip install -r requirements.txt script: python -m pytest test From 9b03049d0fb5e8edcd7fec02075547be611f9883 Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 17:11:59 +0530 Subject: [PATCH 31/42] Update .travis.yml --- .travis.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.travis.yml b/.travis.yml index c3f9ea8..4340325 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,13 @@ before_install: - sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev - mkdir ~/ffmpeg_sources + - wget https://cmake.org/files/v3.8/cmake-3.8.2.tar.gz + - tar xzvf cmake-3.8.2.tar.gz + - cd cmake-3.8.2 + - ./bootstrap + - make -j4 + - sudo make install + - cd ~/ffmpeg_sources - wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz - tar xzvf yasm-1.3.0.tar.gz From fb39157a280efae1d011fc4f6fa012f42dc44ef4 Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 17:40:11 +0530 Subject: [PATCH 32/42] Update .travis.yml --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 4340325..719ad7f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -90,5 +90,6 @@ before_install: - make install - hash -r install: + - cd ~/ritiek/spotify-downloader - pip install -r requirements.txt script: python -m pytest test From 8089e08cd570c0cb4eebada8d658a684dc67993f Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 18:13:51 +0530 Subject: [PATCH 33/42] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 719ad7f..ed1fe95 100644 --- a/.travis.yml +++ b/.travis.yml @@ -90,6 +90,6 @@ before_install: - make install - hash -r install: - - cd ~/ritiek/spotify-downloader + - cd $TRAVIS_BUILD_DIR - pip install -r requirements.txt script: python -m pytest test From 9ca6fc3db133ee3fb7e7e67452e7b8637ee09e74 Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 19:13:23 +0530 Subject: [PATCH 34/42] Update .travis.yml --- .travis.yml | 75 ++--------------------------------------------------- 1 file changed, 2 insertions(+), 73 deletions(-) diff --git a/.travis.yml b/.travis.yml index ed1fe95..217c141 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,86 +7,15 @@ python: before_install: - sudo apt-get -qq update - sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev + - sudo apt-get -y install yasm nasm libx264-dev libx265-dev libfdk-aac-dev libmp3lame-dev libopus-dev libvpx-dev - mkdir ~/ffmpeg_sources - - - wget https://cmake.org/files/v3.8/cmake-3.8.2.tar.gz - - tar xzvf cmake-3.8.2.tar.gz - - cd cmake-3.8.2 - - ./bootstrap - - make -j4 - - sudo make install - - - cd ~/ffmpeg_sources - - wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz - - tar xzvf yasm-1.3.0.tar.gz - - cd yasm-1.3.0 - - ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" - - make - - make install - - - cd ~/ffmpeg_sources - - wget http://www.nasm.us/pub/nasm/releasebuilds/2.13.01/nasm-2.13.01.tar.bz2 - - tar xjvf nasm-2.13.01.tar.bz2 - - cd nasm-2.13.01 - - ./autogen.sh - - PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" - - PATH="$HOME/bin:$PATH" make - - make install - - - cd ~/ffmpeg_sources - - wget http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2 - - tar xjvf last_x264.tar.bz2 - - cd x264-snapshot* - - PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --disable-opencl - - PATH="$HOME/bin:$PATH" make - - make install - - - sudo apt-get install cmake mercurial - - cd ~/ffmpeg_sources - - hg clone https://bitbucket.org/multicoreware/x265 - - cd ~/ffmpeg_sources/x265/build/linux - - PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source - - make - - make install - - - cd ~/ffmpeg_sources - - wget -O fdk-aac.tar.gz https://github.com/mstorsjo/fdk-aac/tarball/master - - tar xzvf fdk-aac.tar.gz - - cd mstorsjo-fdk-aac* - - autoreconf -fiv - - ./configure --prefix="$HOME/ffmpeg_build" --disable-shared - - make - - make install - - - cd ~/ffmpeg_sources - - wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz - - tar xzvf lame-3.99.5.tar.gz - - cd lame-3.99.5 - - ./configure --prefix="$HOME/ffmpeg_build" --enable-nasm --disable-shared - - make - - make install - - - cd ~/ffmpeg_sources - - wget https://archive.mozilla.org/pub/opus/opus-1.1.5.tar.gz - - tar xzvf opus-1.1.5.tar.gz - - cd opus-1.1.5 - - ./configure --prefix="$HOME/ffmpeg_build" --disable-shared - - make - - make install - - - cd ~/ffmpeg_sources - - git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git - - cd libvpx - - PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests - - PATH="$HOME/bin:$PATH" make - - make install - cd ~/ffmpeg_sources - wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 - tar xjvf ffmpeg-snapshot.tar.bz2 - cd ffmpeg - PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --pkg-config-flags="--static" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree - - PATH="$HOME/bin:$PATH" make + - PATH="$HOME/bin:$PATH" make -j4 - make install - hash -r install: From bd28f868b3742cd2093fe2c089d15fc09ae61b21 Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 19:20:27 +0530 Subject: [PATCH 35/42] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 217c141..ad19975 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ python: before_install: - sudo apt-get -qq update - sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev - - sudo apt-get -y install yasm nasm libx264-dev libx265-dev libfdk-aac-dev libmp3lame-dev libopus-dev libvpx-dev + - sudo apt-get -y install yasm nasm libx264-dev libmp3lame-dev libvpx-dev - mkdir ~/ffmpeg_sources - cd ~/ffmpeg_sources From 494eaf3f0b15aef13c27aa5094248ff07eecc69c Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 19:24:59 +0530 Subject: [PATCH 36/42] Update .travis.yml --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ad19975..b2e9c44 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,7 +14,8 @@ before_install: - wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 - tar xjvf ffmpeg-snapshot.tar.bz2 - cd ffmpeg - - PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --pkg-config-flags="--static" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree + #- PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --pkg-config-flags="--static" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --enable-gpl --enable-libass --enable-libfreetype --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree + - PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --pkg-config-flags="--static" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --enable-libmp3lame - PATH="$HOME/bin:$PATH" make -j4 - make install - hash -r From eca932fd9d4542402b2b77281c07f6d99aea05fd Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 19:36:07 +0530 Subject: [PATCH 37/42] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5c254bb..ff0fd83 100755 --- a/README.md +++ b/README.md @@ -52,7 +52,9 @@ You'll also need to install FFmpeg for conversion (use `--avconv` if you'd like Linux: `sudo apt-get install ffmpeg` -Mac: `brew install ffmpeg --with-libass --with-opus --with-fdk-aac` +Mac: `brew install ffmpeg --with-libmp3lame --with-libass --with-opus --with-fdk-aac` + +If it does not install correctly, you may have to build it from source. For more info see https://trac.ffmpeg.org/wiki/CompilationGuide. ### Windows From cbbc9e60a57849d44dc9caa34669418ac778790b Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 19:40:42 +0530 Subject: [PATCH 38/42] Update .travis.yml --- .travis.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index b2e9c44..386a6f8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,14 +7,12 @@ python: before_install: - sudo apt-get -qq update - sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev - - sudo apt-get -y install yasm nasm libx264-dev libmp3lame-dev libvpx-dev + - sudo apt-get -y install yasm nasm libmp3lame-dev - mkdir ~/ffmpeg_sources - - cd ~/ffmpeg_sources - wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 - - tar xjvf ffmpeg-snapshot.tar.bz2 + - tar jxf ffmpeg-snapshot.tar.bz2 - cd ffmpeg - #- PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --pkg-config-flags="--static" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --enable-gpl --enable-libass --enable-libfreetype --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree - PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --pkg-config-flags="--static" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --enable-libmp3lame - PATH="$HOME/bin:$PATH" make -j4 - make install From 1be2e3822b63f8327696a4c55a02d0e4d255fdcb Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 19:51:53 +0530 Subject: [PATCH 39/42] Update make command --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 386a6f8..f11a1a6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,7 +14,7 @@ before_install: - tar jxf ffmpeg-snapshot.tar.bz2 - cd ffmpeg - PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --pkg-config-flags="--static" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --enable-libmp3lame - - PATH="$HOME/bin:$PATH" make -j4 + - PATH="$HOME/bin:$PATH" make -s -j - make install - hash -r install: From 93469bbfd9d64a2b5e1ffcfd49f0505d52932efc Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 20:59:56 +0530 Subject: [PATCH 40/42] Fix TypeError in python3 on conversion --- core/convert.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/convert.py b/core/convert.py index a7af385..cf7f522 100644 --- a/core/convert.py +++ b/core/convert.py @@ -1,10 +1,12 @@ import subprocess import os +import sys def song(input_song, output_song, avconv=False, verbose=False): if not input_song == output_song: - input_song = input_song.encode('utf-8') - output_song = output_song.encode('utf-8') + if sys.version_info < (3, 0): + input_song = input_song.encode('utf-8') + output_song = output_song.encode('utf-8') print('Converting ' + input_song + ' to ' + output_song.split('.')[-1]) if avconv: exit_code = convert_with_avconv(input_song, output_song, verbose) From 8ef4e95a7c9cb0688544d95b6ae18c0229eb423b Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Sun, 25 Jun 2017 23:41:32 +0530 Subject: [PATCH 41/42] Command to run tests --- README.md | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index ff0fd83..69c204f 100755 --- a/README.md +++ b/README.md @@ -155,20 +155,9 @@ http://open.spotify.com/track/64yrDBpcdwEdNY9loyEGbX - Then you can simply run `python spotdl.py --list=.txt` to download them all! -## FAQ +## Running tests -#### I get system cannot find the specified file when downloading? - -Check out these issues [#22](https://github.com/Ritiek/Spotify-Downloader/issues/22), [#35](https://github.com/Ritiek/Spotify-Downloader/issues/35), [#36](https://github.com/Ritiek/Spotify-Downloader/issues/36). - -#### How can I download whole playlist with its URI? - -~~Currently this is not possible without generating unique tokens from Spotify but you can copy all the songs from a playlist and paste them in `list.txt`. I am avoiding tokens as much possible to retain the portability of this tool but if you would like to add it as an optional feature to this tool, PR's welcome!~~ -This feature has been added! - -#### You write horrible code. What's wrong with you? - -I'm trying... +`python -m pytest test` ## Disclaimer From 2e09d65c3e932f53e40d8212e5255c06b3fceb55 Mon Sep 17 00:00:00 2001 From: Ritiek Malhotra Date: Mon, 26 Jun 2017 01:30:54 +0530 Subject: [PATCH 42/42] Add ISSUE_TEMPLATE.md --- ISSUE_TEMPLATE.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 ISSUE_TEMPLATE.md diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..0514b16 --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,31 @@ + + +- [ ] Using latest version as provided on the [master branch](https://github.com/ritiek/spotify-downloader/tree/master) +- [ ] [Searched](https://github.com/ritiek/spotify-downloader/issues?utf8=%E2%9C%93&q=is%3Aissue) for similar issues including closed ones + +#### What is the purpose of your *issue*? +- [ ] Script won't run +- [ ] Encountered bug +- [ ] Feature request +- [ ] Question +- [ ] Other + +#### System information +- Your `python` version: `python 2.7` +- Your operating system: `Ubuntu 16.04` + +### Description + + + + + + + +