FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

Google Musicの重複曲を削除する

はじめまして。1年目の早瀬です。

2ヶ月ほど前からGoogleMusicが日本でも使用できるようになりましたね。 僕も使用しているのですが複数端末から曲をアップロードしようと思うとどうしても重複曲が出てきてしまいます。

GoogleMusicには重複曲を削除する機能がないので、今回はPythonを使用して重複曲を削除したいと思います。

外部パッケージのインストール&使用してみる

今回は gmusicapi という外部モジュールを使用します。

$ pip install gmusicapi

外部モジュールのインストールが終わったら試しにこちらのソースコードを動かしてみたいと思います。

from gmusicapi import Mobileclient

api = Mobileclient()
api.login('user@gmail.com', 'my-password', Mobileclient.FROM_MAC_ADDRESS)
# => True

artist_name = u'artist-name'

library = api.get_all_songs()
sweet_track_ids = [track['id'] for track in library
                   if track['artist'] == artist_name]

playlist_id = api.create_playlist(artist_name + 'Playlist')
api.add_songs_to_playlist(playlist_id, sweet_track_ids)

実行したらGoogle Music上にアーティスト名のプレイリストが表示されていると思います。 これでgmusicapiが使用できることが確認できましたね。

重複曲の削除

それでは本題に入ります。 今回はGoogle Music上のアルバムを重複曲を削除します。 同じアルバム内に同じタイトルの曲が2曲以上入っていた場合重複曲とします。

ソースコードはこちらです。

deleteOverlapSong.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from gmusicapi import Mobileclient

api = Mobileclient()
api.login('email@example.com', 'password', Mobileclient.FROM_MAC_ADDRESS)

library = api.get_all_songs()
nonFilteringSong = []
filteringSong = []
overlapSong = []

for i in library:
    song = {'title':i['title'], 'album': i['album']}
    nonFilteringSong.append(song)

for i in range(len(library)):
    song = {'title':library[i]['title'], 'album': library[i]['album']}
    if song in filteringSong:
        overlapSong.append(library[i]['id'])
        print library[i]['title'], library[i]['album']
    else :
        filteringSong.append(song)

if raw_input('これらの曲を削除しますか?[y/n] > ') == 'y':
    api.delete_songs(overlapSong)

実際に使用してみたいと思います。 f:id:s_hayase:20151110214915p:plain

Google Music上のゴミ箱にも入っています。 f:id:s_hayase:20151110215118p:plain

今回は以上ですがgmusicapiは削除以外にも様々なことができるので皆様ぜひ使用してみてください。

参考サイト

gmusicapi: an unofficial API for Google Play Music — gmusicapi 7.0.0 documentation