Transporter sa collection de musique de Rdio à Google Play Music
Table of contents
C'est la fin de Rdio :(
[[http://blog.rdio.com/us/2015/11/important-news-from-rdio.html][]]http://blog.rdio.com/us/2015/11/important-news-from-rdio.html
Voila un moyen d'exporter la collection de Rdio à Google Play Music.
Créer une "application" dans le portail développeurs de rdio en
suivant les indications.
[[http://www.rdio.com/developers/][]]http://www.rdio.com/developers/
Prendre en note le CLIENTID et le CLIENTSECRET
(pour la suite des opérations, placer ces variables dans votre environnement)
export RDIO_CLIENT_ID=xxx
export RDIO_CLIENT_SECRET=yyy
Créer un environnement Python et y installer de quoi importer la
collection
virtualenv rdio2gpm
source rdio2gpm/bin/activate
pip install git+https://github.com/rdio/rdio-python
Exporter la collection
(à partir de l'interpréteur python)
import os
from rdioapi import Rdio
r = Rdio(os.environ.get('RDIO_CLIENT_ID'),
os.environ.get('RDIO_CLIENT_SECRET'), {})
print r.begin_authentication()
raw_input()
# à ce moment là, ouvrir le lien, et entrer le code indiqué
r.complete_authentication()
open("out.txt", "w").write(
"\n".join("%s|%s" % (a['artist'], a['name'])
for a in r.getAlbumsInCollection()).encode('utf-8'))
Installer de quoi importer la collection
virtualenv rdio2gpm
source rdio2gpm/bin/activate
pip install gmusicapi
et configurer l'environnement pour l'importable
(pour la suite des opérations, placer ces variables dans votre environnement)
export GOOGLE_USERNAME=xxx
export GOOGLE_PASSWORD=yyy
Écrire le script d'importation suivant
(le sauver dans gpmimport.py)
import os
from gmusicapi import Mobileclient
api = Mobileclient()
api.login(os.environ.get('GOOGLE_USERNAME'),
os.environ.get('GOOGLE_PASSWORD'),
Mobileclient.FROM_MAC_ADDRESS)
def get_album_ids(artist, album):
aa = api.search_all_access(query=artist)
artist_ids = set(a['artist']['artistId'] for a in aa['artist_hits'])
aa = api.search_all_access(query=album)
for a in aa['album_hits']:
if set(a['album']['artistId']).intersection(artist_ids):
yield a['album']['albumId']
def add_album(album_id):
map(api.add_aa_track, [t['storeId'] for t in
api.get_album_info(album_id)['tracks']])
# exemple d'import:
# map(add_album, get_album_ids("Frank Zappa", "in New York"))
Utiliser le script d'import à partir de la collection exportée
(à partir d'un interpréteur python)
from gpm_import import add_album, get_album_ids
for artist, album in [l.strip().split('|') for l in open("out.txt").readlines()]:
try:
map(add_album, get_album_ids(artist, album))
print "Imported '%s': '%s'" % (artist, album)
except Exception, e:
print "Failed '%s': '%s', %s" % (artist, album, e)