Le petit blog crasseux de Jean Schurger - Jean Schurger's little grimy website.

Transporter sa collection de musique de Rdio à Google Play Music

C'est la fin de Rdio :(

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/

Prendre en note le CLIENT_ID et le CLIENT_SECRET

(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 gpm_import.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)

Modifié: 2015-11-23 lun 18:11

Emacs 24.5.1 (Org mode 8.3.1)