Code Monkey home page Code Monkey logo

playlistor's Introduction

Playlistor

self-hosted apple music to spotify playlist convertor

CircleCI

Demo

Demo

Installing

For simplicity, you'll need docker and docker-compose to run playlistor in development. Create .env file and set the appropriate environment variables. For example:

	REDIS_URL=redis://redis:6379
	SPOTIFY_REDIRECT_URI=http://localhost:8000/callback
	SPOTIFY_CLIENT_ID=Loremipsumdolorsitamet
	SPOTIFY_CLIENT_SECRET=Loremipsumdolorsitamet
	APPLE_KEY_ID=Loremipsumdolorsitamet
	APPLE_APPLE_TEAM_ID=Loremipsumdolorsitamet
	APPLE_PRIVATE_KEY=Loremipsumdolorsitamet

Then run docker-compose up to get things running.

Usage

Navigate to localhost:8000. You'll be required to login with your Spotify credentials on first attempt.

TODO

  • Add feature to convert apple music playlist to spotify

Thanks and Acknowledgments

Thanks to Maame, Mayor, Samuel, Elikem, Diayan, Ike, Paul and Christian for helping me put this together. Not sure we'll have playlistor without you guys.

playlistor's People

Contributors

akornor avatar dependabot[bot] avatar theafrodev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

playlistor's Issues

Missing titles

It occurs that, converting a playlist from one to another service, some titles get lost, even though the web interface reports that it successfully matched all tracks. Searching for the missing title on the target service manually shows that it is available on this service.

Nevertheless, nice project!

Installation process does not work, a Python version issue ? (Hello)

Creating playlistor_redis_1 ... done
Creating playlistor_celery_1 ... done
Creating playlistor_web_1 ... done
Attaching to playlistor_redis_1, playlistor_celery_1, playlistor_web_1
redis_1 | 1:C 11 Sep 2021 07:43:57.316 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 11 Sep 2021 07:43:57.316 # Redis version=6.2.5, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1 | 1:C 11 Sep 2021 07:43:57.316 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis_1 | 1:M 11 Sep 2021 07:43:57.316 * monotonic clock: POSIX clock_gettime
redis_1 | 1:M 11 Sep 2021 07:43:57.320 * Running mode=standalone, port=6379.
redis_1 | 1:M 11 Sep 2021 07:43:57.320 # Server initialized
redis_1 | 1:M 11 Sep 2021 07:43:57.320 * Ready to accept connections
celery_1 | Traceback (most recent call last):
celery_1 | File "./manage.py", line 16, in
celery_1 | main()
celery_1 | File "./manage.py", line 10, in main
celery_1 | execute_from_command_line(sys.argv)
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/init.py", line 381, in execute_from_command_line
celery_1 | utility.execute()
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/init.py", line 357, in execute
celery_1 | django.setup()
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/init.py", line 24, in setup
celery_1 | apps.populate(settings.INSTALLED_APPS)
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/apps/registry.py", line 91, in populate
celery_1 | app_config = AppConfig.create(entry)
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/apps/config.py", line 90, in create
celery_1 | module = import_module(entry)
celery_1 | File "/usr/local/lib/python3.8/importlib/init.py", line 127, in import_module
celery_1 | return _bootstrap._gcd_import(name[level:], package, level)
celery_1 | File "", line 1014, in _gcd_import
celery_1 | File "", line 991, in _find_and_load
celery_1 | File "", line 961, in _find_and_load_unlocked
celery_1 | File "", line 219, in _call_with_frames_removed
celery_1 | File "", line 1014, in _gcd_import
celery_1 | File "", line 991, in _find_and_load
celery_1 | File "", line 961, in _find_and_load_unlocked
celery_1 | File "", line 219, in _call_with_frames_removed
celery_1 | File "", line 1014, in _gcd_import
celery_1 | File "", line 991, in _find_and_load
celery_1 | File "", line 975, in _find_and_load_unlocked
celery_1 | File "", line 671, in _load_unlocked
celery_1 | File "", line 843, in exec_module
celery_1 | File "", line 219, in _call_with_frames_removed
celery_1 | File "/app/main/init.py", line 4, in
celery_1 | oauth = SpotifyOAuth(
celery_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 334, in init
celery_1 | self.redirect_uri = redirect_uri
celery_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 110, in redirect_uri
celery_1 | self._redirect_uri = _ensure_value(val, "redirect_uri")
celery_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 70, in _ensure_value
celery_1 | raise SpotifyOauthError(msg)
celery_1 | spotipy.oauth2.SpotifyOauthError: No redirect_uri. Pass it or set a SPOTIPY_REDIRECT_URI environment variable.
web_1 | Traceback (most recent call last):
web_1 | File "./manage.py", line 16, in
web_1 | main()
web_1 | File "./manage.py", line 10, in main
web_1 | execute_from_command_line(sys.argv)
web_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/init.py", line 381, in execute_from_command_line
web_1 | utility.execute()
web_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/init.py", line 357, in execute
web_1 | django.setup()
web_1 | File "/usr/local/lib/python3.8/site-packages/django/init.py", line 24, in setup
web_1 | apps.populate(settings.INSTALLED_APPS)
web_1 | File "/usr/local/lib/python3.8/site-packages/django/apps/registry.py", line 91, in populate
web_1 | app_config = AppConfig.create(entry)
web_1 | File "/usr/local/lib/python3.8/site-packages/django/apps/config.py", line 90, in create
web_1 | module = import_module(entry)
web_1 | File "/usr/local/lib/python3.8/importlib/init.py", line 127, in import_module
web_1 | return _bootstrap._gcd_import(name[level:], package, level)
web_1 | File "", line 1014, in _gcd_import
web_1 | File "", line 991, in _find_and_load
web_1 | File "", line 961, in _find_and_load_unlocked
web_1 | File "", line 219, in _call_with_frames_removed
web_1 | File "", line 1014, in _gcd_import
web_1 | File "", line 991, in _find_and_load
web_1 | File "", line 961, in _find_and_load_unlocked
web_1 | File "", line 219, in _call_with_frames_removed
web_1 | File "", line 1014, in _gcd_import
web_1 | File "", line 991, in _find_and_load
web_1 | File "", line 975, in _find_and_load_unlocked
web_1 | File "", line 671, in _load_unlocked
web_1 | File "", line 843, in exec_module
web_1 | File "", line 219, in _call_with_frames_removed
web_1 | File "/app/main/init.py", line 4, in
web_1 | oauth = SpotifyOAuth(
web_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 334, in init
web_1 | self.redirect_uri = redirect_uri
web_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 110, in redirect_uri
web_1 | self._redirect_uri = _ensure_value(val, "redirect_uri")
web_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 70, in _ensure_value
web_1 | raise SpotifyOauthError(msg)
web_1 | spotipy.oauth2.SpotifyOauthError: No redirect_uri. Pass it or set a SPOTIPY_REDIRECT_URI environment variable.
playlistor_celery_1 exited with code 1
playlistor_web_1 exited with code 1

Transfer playlist descriptions

At the moment, converting a playlist from one to another service, the playlist description defaults to "Made with Playlistor (https://playlistor.io) :)".
It would be great if the playlist description would be transferred too. The hint that the playlist was converted by Playlistor could still be appended to the playlist description.

django.core raising missing APPLE_KEY... errors

File "/app/main/apps.py", line 9, in ready
celery_1  |     check_config()
celery_1  |   File "/app/main/utils.py", line 81, in check_config
web_1     |     check_config()
web_1     |   File "/app/main/utils.py", line 81, in check_config
celery_1  |     raise ImproperlyConfigured(
celery_1  | django.core.exceptions.ImproperlyConfigured: APPLE_KEY_ID setting has not been properly defined.
web_1     |     raise ImproperlyConfigured(
web_1     | django.core.exceptions.ImproperlyConfigured: APPLE_KEY_ID setting has not been properly defined.

Tried adding to .env the following

APPLE_KEY_ID=Loremipsumdolorsitamet
APPLE_TEAM_ID=Loremipsumdolorsitamet
APPLE_PRIVATE_KEY=Loremipsumdolorsitamet

but now fails at:

 File "/app/main/apps.py", line 9, in ready
web_1     |     check_config()
web_1     |   File "/app/main/utils.py", line 89, in check_config
web_1     |     raise ImproperlyConfigured(
web_1     | django.core.exceptions.ImproperlyConfigured: APPLE_PRIVATE_KEY setting has not been properly defined.

ModuleNotFoundError: No module named 'django

I get this error when composing, also tried installing django myself and it still says this

[+] Running 3/0
 - Container playlistor-redis-1   Created                                                                          0.0s
 - Container playlistor-celery-1  Created                                                                          0.0s
 - Container playlistor-web-1     Created                                                                          0.0s
Attaching to playlistor-celery-1, playlistor-redis-1, playlistor-web-1
playlistor-redis-1   | 1:C 16 May 2022 19:59:30.166 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
playlistor-redis-1   | 1:C 16 May 2022 19:59:30.166 # Redis version=7.0.0, bits=64, commit=00000000, modified=0, pid=1, just started
playlistor-redis-1   | 1:C 16 May 2022 19:59:30.166 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
playlistor-redis-1   | 1:M 16 May 2022 19:59:30.166 * monotonic clock: POSIX clock_gettime
playlistor-redis-1   | 1:M 16 May 2022 19:59:30.167 * Running mode=standalone, port=6379.
playlistor-redis-1   | 1:M 16 May 2022 19:59:30.167 # Server initialized
playlistor-redis-1   | 1:M 16 May 2022 19:59:30.167 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
playlistor-redis-1   | 1:M 16 May 2022 19:59:30.167 * The AOF directory appendonlydir doesn't exist
playlistor-redis-1   | 1:M 16 May 2022 19:59:30.167 * Loading RDB produced by version 7.0.0
playlistor-redis-1   | 1:M 16 May 2022 19:59:30.167 * RDB age 10 seconds
playlistor-redis-1   | 1:M 16 May 2022 19:59:30.167 * RDB memory usage when created 0.82 Mb
playlistor-redis-1   | 1:M 16 May 2022 19:59:30.167 * Done loading RDB, keys loaded: 0, keys expired: 0.
playlistor-redis-1   | 1:M 16 May 2022 19:59:30.167 * DB loaded from disk: 0.000 seconds
playlistor-redis-1   | 1:M 16 May 2022 19:59:30.167 * Ready to accept connections
playlistor-celery-1  | Traceback (most recent call last):
playlistor-celery-1  |   File "./manage.py", line 16, in <module>
playlistor-celery-1  |     main()
playlistor-celery-1  |   File "./manage.py", line 7, in main
playlistor-celery-1  |     from django.core.management import execute_from_command_line
playlistor-celery-1  | ModuleNotFoundError: No module named 'django'
playlistor-web-1     | Traceback (most recent call last):
playlistor-web-1     |   File "./manage.py", line 16, in <module>
playlistor-web-1     |     main()
playlistor-web-1     |   File "./manage.py", line 7, in main
playlistor-web-1     |     from django.core.management import execute_from_command_line
playlistor-web-1     | ModuleNotFoundError: No module named 'django

Make provision for conversion to varying apple music accounts

Description

In converting from spotify to apple music, you sign in with your apple music credentials once and all subsequent conversions are saved to that one apple music account. It would be great if every time you had to do a conversion, you got the opportunity to enter your apple music credentials again, thereby making it possible to specify which account the playlist should be saved to.

Now I resolved the Package conflict I have a problem with the docker compose

Attaching to playlistor_redis_1, playlistor_celery_1, playlistor_web_1
celery_1 | Traceback (most recent call last):
celery_1 | File "./manage.py", line 16, in
celery_1 | main()
celery_1 | File "./manage.py", line 10, in main
redis_1 | 1:C 16 Jul 2021 12:00:50.134 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 16 Jul 2021 12:00:50.134 # Redis version=6.2.4, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1 | 1:C 16 Jul 2021 12:00:50.134 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
celery_1 | execute_from_command_line(sys.argv)
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/init.py", line 381, in execute_from_command_line
celery_1 | utility.execute()
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/init.py", line 357, in execute
redis_1 | 1:M 16 Jul 2021 12:00:50.135 * monotonic clock: POSIX clock_gettime
redis_1 | 1:M 16 Jul 2021 12:00:50.135 * Running mode=standalone, port=6379.
redis_1 | 1:M 16 Jul 2021 12:00:50.135 # Server initialized
celery_1 | django.setup()
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/init.py", line 24, in setup
celery_1 | apps.populate(settings.INSTALLED_APPS)
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/apps/registry.py", line 91, in populate
celery_1 | app_config = AppConfig.create(entry)
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/apps/config.py", line 90, in create
celery_1 | module = import_module(entry)
celery_1 | File "/usr/local/lib/python3.8/importlib/init.py", line 127, in import_module
redis_1 | 1:M 16 Jul 2021 12:00:50.136 * Ready to accept connections
celery_1 | return _bootstrap._gcd_import(name[level:], package, level)
celery_1 | File "", line 1014, in _gcd_import
celery_1 | File "", line 991, in _find_and_load
celery_1 | File "", line 961, in _find_and_load_unlocked
celery_1 | File "", line 219, in _call_with_frames_removed
celery_1 | File "", line 1014, in _gcd_import
celery_1 | File "", line 991, in _find_and_load
celery_1 | File "", line 961, in _find_and_load_unlocked
celery_1 | File "", line 219, in _call_with_frames_removed
celery_1 | File "", line 1014, in _gcd_import
celery_1 | File "", line 991, in _find_and_load
celery_1 | File "", line 975, in _find_and_load_unlocked
celery_1 | File "", line 671, in _load_unlocked
celery_1 | File "", line 843, in exec_module
celery_1 | File "", line 219, in _call_with_frames_removed
celery_1 | File "/app/main/init.py", line 4, in
celery_1 | oauth = SpotifyOAuth(
celery_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 315, in init
celery_1 | self.redirect_uri = redirect_uri
celery_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 110, in redirect_uri
celery_1 | self._redirect_uri = _ensure_value(val, "redirect_uri")
celery_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 70, in _ensure_value
celery_1 | raise SpotifyOauthError(msg)
celery_1 | spotipy.oauth2.SpotifyOauthError: No redirect_uri. Pass it or set a SPOTIPY_REDIRECT_URI environment variable.
playlistor_celery_1 exited with code 1
web_1 | Traceback (most recent call last):
web_1 | File "./manage.py", line 16, in
web_1 | main()
web_1 | File "./manage.py", line 10, in main
web_1 | execute_from_command_line(sys.argv)
web_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/init.py", line 381, in execute_from_command_line
web_1 | utility.execute()
web_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/init.py", line 357, in execute
web_1 | django.setup()
web_1 | File "/usr/local/lib/python3.8/site-packages/django/init.py", line 24, in setup
web_1 | apps.populate(settings.INSTALLED_APPS)
web_1 | File "/usr/local/lib/python3.8/site-packages/django/apps/registry.py", line 91, in populate
web_1 | app_config = AppConfig.create(entry)
web_1 | File "/usr/local/lib/python3.8/site-packages/django/apps/config.py", line 90, in create
web_1 | module = import_module(entry)
web_1 | File "/usr/local/lib/python3.8/importlib/init.py", line 127, in import_module
web_1 | return _bootstrap._gcd_import(name[level:], package, level)
web_1 | File "", line 1014, in _gcd_import
web_1 | File "", line 991, in _find_and_load
web_1 | File "", line 961, in _find_and_load_unlocked
web_1 | File "", line 219, in _call_with_frames_removed
web_1 | File "", line 1014, in _gcd_import
web_1 | File "", line 991, in _find_and_load
web_1 | File "", line 961, in _find_and_load_unlocked
web_1 | File "", line 219, in _call_with_frames_removed
web_1 | File "", line 1014, in _gcd_import
web_1 | File "", line 991, in _find_and_load
web_1 | File "", line 975, in _find_and_load_unlocked
web_1 | File "", line 671, in _load_unlocked
web_1 | File "", line 843, in exec_module
web_1 | File "", line 219, in _call_with_frames_removed
web_1 | File "/app/main/init.py", line 4, in
web_1 | oauth = SpotifyOAuth(
web_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 315, in init
web_1 | self.redirect_uri = redirect_uri
web_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 110, in redirect_uri
web_1 | self._redirect_uri = _ensure_value(val, "redirect_uri")
web_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 70, in _ensure_value
web_1 | raise SpotifyOauthError(msg)
web_1 | spotipy.oauth2.SpotifyOauthError: No redirect_uri. Pass it or set a SPOTIPY_REDIRECT_URI environment variable.
playlistor_web_1 exited with code 1
celery_1 | Traceback (most recent call last):
celery_1 | File "./manage.py", line 16, in
celery_1 | main()
celery_1 | File "./manage.py", line 10, in main
celery_1 | execute_from_command_line(sys.argv)
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/init.py", line 381, in execute_from_command_line
celery_1 | utility.execute()
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/init.py", line 357, in execute
celery_1 | django.setup()
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/init.py", line 24, in setup
celery_1 | apps.populate(settings.INSTALLED_APPS)
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/apps/registry.py", line 91, in populate
celery_1 | app_config = AppConfig.create(entry)
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/apps/config.py", line 90, in create
celery_1 | module = import_module(entry)
celery_1 | File "/usr/local/lib/python3.8/importlib/init.py", line 127, in import_module
celery_1 | return _bootstrap._gcd_import(name[level:], package, level)
celery_1 | File "", line 1014, in _gcd_import
celery_1 | File "", line 991, in _find_and_load
celery_1 | File "", line 961, in _find_and_load_unlocked
celery_1 | File "", line 219, in _call_with_frames_removed
celery_1 | File "", line 1014, in _gcd_import
celery_1 | File "", line 991, in _find_and_load
celery_1 | File "", line 961, in _find_and_load_unlocked
celery_1 | File "", line 219, in _call_with_frames_removed
celery_1 | File "", line 1014, in _gcd_import
celery_1 | File "", line 991, in _find_and_load
celery_1 | File "", line 975, in _find_and_load_unlocked
celery_1 | File "", line 671, in _load_unlocked
celery_1 | File "", line 843, in exec_module
celery_1 | File "", line 219, in _call_with_frames_removed
celery_1 | File "/app/main/init.py", line 4, in
celery_1 | oauth = SpotifyOAuth(
celery_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 315, in init
celery_1 | self.redirect_uri = redirect_uri
celery_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 110, in redirect_uri
celery_1 | self._redirect_uri = _ensure_value(val, "redirect_uri")
celery_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 70, in _ensure_value
celery_1 | raise SpotifyOauthError(msg)
celery_1 | spotipy.oauth2.SpotifyOauthError: No redirect_uri. Pass it or set a SPOTIPY_REDIRECT_URI environment variable.
celery_1 | Traceback (most recent call last):
celery_1 | File "./manage.py", line 16, in
celery_1 | main()
celery_1 | File "./manage.py", line 10, in main
celery_1 | execute_from_command_line(sys.argv)
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/init.py", line 381, in execute_from_command_line
celery_1 | utility.execute()
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/init.py", line 357, in execute
celery_1 | django.setup()
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/init.py", line 24, in setup
celery_1 | apps.populate(settings.INSTALLED_APPS)
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/apps/registry.py", line 91, in populate
celery_1 | app_config = AppConfig.create(entry)
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/apps/config.py", line 90, in create
celery_1 | module = import_module(entry)
celery_1 | File "/usr/local/lib/python3.8/importlib/init.py", line 127, in import_module
celery_1 | return _bootstrap._gcd_import(name[level:], package, level)
celery_1 | File "", line 1014, in _gcd_import
celery_1 | File "", line 991, in _find_and_load
celery_1 | File "", line 961, in _find_and_load_unlocked
celery_1 | File "", line 219, in _call_with_frames_removed
celery_1 | File "", line 1014, in _gcd_import
celery_1 | File "", line 991, in _find_and_load
celery_1 | File "", line 961, in _find_and_load_unlocked
celery_1 | File "", line 219, in _call_with_frames_removed
celery_1 | File "", line 1014, in _gcd_import
celery_1 | File "", line 991, in _find_and_load
celery_1 | File "", line 975, in _find_and_load_unlocked
celery_1 | File "", line 671, in _load_unlocked
celery_1 | File "", line 843, in exec_module
celery_1 | File "", line 219, in _call_with_frames_removed
celery_1 | File "/app/main/init.py", line 4, in
celery_1 | oauth = SpotifyOAuth(
celery_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 315, in init
celery_1 | self.redirect_uri = redirect_uri
celery_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 110, in redirect_uri
celery_1 | self._redirect_uri = _ensure_value(val, "redirect_uri")
celery_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 70, in _ensure_value
celery_1 | raise SpotifyOauthError(msg)
celery_1 | spotipy.oauth2.SpotifyOauthError: No redirect_uri. Pass it or set a SPOTIPY_REDIRECT_URI environment variable.
playlistor_celery_1 exited with code 1
celery_1 | Traceback (most recent call last):
celery_1 | File "./manage.py", line 16, in
celery_1 | main()
celery_1 | File "./manage.py", line 10, in main
celery_1 | execute_from_command_line(sys.argv)
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/init.py", line 381, in execute_from_command_line
celery_1 | utility.execute()
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/init.py", line 357, in execute
celery_1 | django.setup()
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/init.py", line 24, in setup
celery_1 | apps.populate(settings.INSTALLED_APPS)
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/apps/registry.py", line 91, in populate
celery_1 | app_config = AppConfig.create(entry)
celery_1 | File "/usr/local/lib/python3.8/site-packages/django/apps/config.py", line 90, in create
celery_1 | module = import_module(entry)
celery_1 | File "/usr/local/lib/python3.8/importlib/init.py", line 127, in import_module
celery_1 | return _bootstrap._gcd_import(name[level:], package, level)
celery_1 | File "", line 1014, in _gcd_import
celery_1 | File "", line 991, in _find_and_load
celery_1 | File "", line 961, in _find_and_load_unlocked
celery_1 | File "", line 219, in _call_with_frames_removed
celery_1 | File "", line 1014, in _gcd_import
celery_1 | File "", line 991, in _find_and_load
celery_1 | File "", line 961, in _find_and_load_unlocked
celery_1 | File "", line 219, in _call_with_frames_removed
celery_1 | File "", line 1014, in _gcd_import
celery_1 | File "", line 991, in _find_and_load
celery_1 | File "", line 975, in _find_and_load_unlocked
celery_1 | File "", line 671, in _load_unlocked
celery_1 | File "", line 843, in exec_module
celery_1 | File "", line 219, in _call_with_frames_removed
celery_1 | File "/app/main/init.py", line 4, in
celery_1 | oauth = SpotifyOAuth(
celery_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 315, in init
celery_1 | self.redirect_uri = redirect_uri
celery_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 110, in redirect_uri
celery_1 | self._redirect_uri = _ensure_value(val, "redirect_uri")
celery_1 | File "/usr/local/lib/python3.8/site-packages/spotipy/oauth2.py", line 70, in _ensure_value
celery_1 | raise SpotifyOauthError(msg)
celery_1 | spotipy.oauth2.SpotifyOauthError: No redirect_uri. Pass it or set a SPOTIPY_REDIRECT_URI environment variable.
playlistor_celery_1 exited with code 1

is it possible to specify more things in the .env

Explicit Label not checked correctly

There's a bug where a song in a Spotify playlist may have the explicit label, but then in Apple Music, the non-explicit song gets added to the playlist. This doesn't occur with all songs, but there are a good amount of songs I had in my Spotify playlist that got added to the Apple Music playlist as non-explicit.

Conversion doesn't start

Hello

so if I want to transfer a playlist from Spotify to Apple Music, then I grant access to Apple Music. But the conversion doesn't start. It remains the image/page that I have granted access.

pls help thx

Windows 11
Edge browser

Could not deserialize key data.

ValueError at /
('Could not deserialize key data. The data may be in an incorrect format, it may be encrypted with an unsupported algorithm, or it may be an unsupported key type (e.g. EC curves with explicit parameters).', [_OpenSSLErrorWithText(code=503841036, lib=60, reason=524556, reason_text=b'error:1E08010C:DECODER routines::unsupported')])

Environment:

Request Method: GET
Request URL: http://...

Django Version: 2.2.28
Python Version: 3.8.16
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'main.apps.MainConfig',
'celery_progress']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']

Conflicting python package versions

Running the docker compose file is getting me an error.
It seems like requests 2.22.0 and urllib3 1.26.5 are conflicting.

The conflict is caused by:
The user requested urllib3==1.26.5
requests 2.22.0 depends on urllib3!=1.25.0, !=1.25.1, <1.26 and >=1.21.1
executor failed running [/bin/sh -c pip install --upgrade pip && pip install --no-cache-dir -r /app/requirements.txt]: exit code: 1
ERROR: Service 'web' failed to build : Build failed
The terminal process "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command docker-compose -f "docker-compose.yaml" up -d --build" terminated with exit code: 1.``` 

I managed to solve this by editing requierements.txt at line 12:
#requests==2.22.0
requests
It basically let pip manage wich version of request is compatible

No app name in 'Sign In With Apple' Dialog

When I try to convert Spotify to Apple Music, it asks me to Sign In With Apple ID.
But it displays a placeholder name as the app name, which tries to get me to sign in:

PixelSnap 2020-02-06 at 16 30 27@2x

Is this a fault on Apple's side?

Website it down

Hey there,

Thanks for all the work that you've put into playlistor! I've used the site a few times and am eagerly awaiting the Spotify to Apple Music availability. I'm curious if the site will be shut down only using the local app or if it should be up.

If you could share some insight on this that would be great. Thanks again for all the work you're putting in!

Redis config

Hey there!

This seems to be awesome work! I've been wanting to do something like this for a while.

Can you help me setup the redis variables and so forth? And maybe add it to the little "tutorial"?

Thanks in advance!

Track matching picks wrong version occasionally

Great app - I haven't looked at the code to see how the match is done but when exporting an Apple Music playlist to Spotify it sometimes picks the wrong version of the track in Spotify (despite the right version being available). I am referring to the live version of this (https://playlistor.io) - assuming behavior is same here.

If it isn't possible to guarantee the right track is picked if available, maybe you can get closer by comparing some other metadata - like track length as an example - and if it is too far off, pick a different result.

Use playlistor without Apple Developer credentials

Hi Raymond!

I was trying to set up playlistor locally for a while now and I noticed that after logging in with the Spotify credentials the app crashes when using dummy values for APPLE_KEY_ID, APPLE_TEAM_ID and APPLE_PRIVATE_KEY.

After researching a bit, I assume that you need to be part of the Apple Developer program to obtain these. I am currently not and therefore I was wondering if it is possible to use the app somehow without these credentials?

Probably some features would not be available then I assume.

Thank you in advance

installation does not work with docker-compose

Hi,

does not work properly :

failed running [/bin/sh -c pip install --upgrade pip && pip install --no-cache-dir -r /app/requirements.txt]: exit code: 1

of course the package is not in an absolute path /app but in a relative path ./

also it seems a package conflict :
The user requested urllib3==1.26.5
requests 2.22.0 depends on urllib3!=1.25.0, !=1.25.1, <1.26 and >=1.21.1

regards,

Dockerfile cannot find requirements in /app/ directory

Received this error:

executor failed running [/bin/sh -c pip install --upgrade pip && pip install --no-cache-dir -r /app/requirements/dev.txt]: exit code: 1

So proposing this Dockerfile update:

FROM python:3.8

ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1

WORKDIR /app/

COPY . /app/
RUN pip install --upgrade pip && pip install --no-cache-dir -r /app/requirements/dev.txt

EXPOSE 8000

See unmatched tittles

I imported a playlist into Apple Music and it said there was some tracks that were not found. How can I see what's missing and what not?

Could not deserialize key data.

ValueError at /
('Could not deserialize key data. The data may be in an incorrect format, it may be encrypted with an unsupported algorithm, or it may be an unsupported key type (e.g. EC curves with explicit parameters).', [_OpenSSLErrorWithText(code=503841036, lib=60, reason=524556, reason_text=b'error:1E08010C:DECODER routines::unsupported')])

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.