Google again, decided to kill another product. This time it was Google Play Music (GPM) and a forced migration to a inferior YouTube Music app.
I had enough and decided to just host it myself on Plex.
Getting playlists out of GPM is a bit of a pain. There's an unofficial GPM python API, but it didn't seem to grab my entire playlist (only 32/134 songs).
Used the following items to get it to work:
- Reddit user's python script: https://www.reddit.com/r/PleX/comments/hfgnvk/import_google_play_music_playlists/
- Some JavaScript from a Stack Exchange answer: https://gist.github.com/jmiserez/c9a9a0f41e867e5ebb75
- Some basic python code below to import the CSV from the JavaScript and use it with the Reddit script
import pandas as pd
df = pd.read_csv('songlist.txt') #assume the csv is named songlist.txt
#modify the compare function (took out a few things)
def compare(ggmusic, pmusic):
"""
Parameters
----------
ggmusic (dict): Contains Playlist data from Google Music
pmusic (object): Plex item found from search
Returns
-------
pmusic (object): Matched Plex item
"""
title = str(ggmusic['title'])
album = str(ggmusic['album'])
#tracknum = int(ggmusic['track']['trackNumber'])
duration = ggmusic['duration']
# Check if track numbers match
#if int(pmusic.index) == int(tracknum):
# return [pmusic]
# If not track number, check track title and album title
if title == pmusic.title and (album == pmusic.parentTitle or
album.startswith(pmusic.parentTitle)):
return [pmusic]
# Check if track duration match
#elif round_down(duration, 1000) == round_down(pmusic.duration, 1000):
# return [pmusic]
# Lastly, check if title matches
elif title == pmusic.title:
return [pmusic]
### Modify the main() to fit my needs:
playlistContent = []
shareToken = pl['shareToken']
# Go through tracks in Google Music Playlist
for index,row in df.iterrows():
title = row['title']
album = row['album']
artist = row['artist']
ggmusic = row
# Search Plex for Album title and Track title
albumTrackSearch = plex.library.section(MUSIC_LIBRARY_NAME).searchTracks(
**{'album.title': album, 'track.title': title})
# Check results
if len(albumTrackSearch) == 1:
playlistContent += albumTrackSearch
if len(albumTrackSearch) > 1:
for pmusic in albumTrackSearch:
albumTrackFound = compare(ggmusic, pmusic)
if albumTrackFound:
playlistContent += albumTrackFound
break
# Nothing found from Album title and Track title
if not albumTrackSearch or len(albumTrackSearch) == 0:
# Search Plex for Track title
trackSearch = plex.library.section(MUSIC_LIBRARY_NAME).searchTracks(
**{'track.title': title})
if len(trackSearch) == 1:
playlistContent += trackSearch
if len(trackSearch) > 1:
for pmusic in trackSearch:
trackFound = compare(ggmusic, pmusic)
if trackFound:
playlistContent += trackFound
break
# Nothing found from Track title
if not trackSearch or len(trackSearch) == 0:
# Search Plex for Artist
artistSearch = plex.library.section(MUSIC_LIBRARY_NAME).searchTracks(
**{'artist.title': artist})
for pmusic in artistSearch:
artistFound = compare(ggmusic, pmusic)
if artistFound:
playlistContent += artistFound
break
if not artistSearch or len(artistSearch) == 0:
print(u"Could not find in Plex:\n\t{} - {} {}".format(artist, album, title))
print("Adding Playlist: {}".format(playlistName))
plex.createPlaylist(playlistName, playlistContent)
Products that have Google killed that I used and where I migrated them to:
- Google Reader --> Tiny TIny RSS - https://tt-rss.org/
- Google Play Music --> Plex - https://plex.com
- Google Trips --> None - there is no good replacement
Products that I should move before they disappear:
- Google Photos --> Photoprism? https://photoprism.org/
- Google Hangouts --> Mattermost? https://mattermost.com/
Full list of dead Google "Products":