示例#1
0
def gmusic_playlist_to_xspf(playlist_id, playlist):
    """
    Convert a playlist from gmusicapi into an XSPF playlist.

    :type playlist: dict
    :return: XSPF (XML), UTF-8 encoded
    :rtype: str
    """
    create_ts = int(playlist['creationTimestamp']) / 1000000.0
    create_iso = datetime.utcfromtimestamp(create_ts).isoformat()
    p_url = url_for('get_playlist', _external=True, playlist_id=playlist_id)
    xspf = Xspf(title=playlist['name'], creator=playlist['ownerName'],
                date=create_iso, location=p_url)
    for track in playlist['tracks']:
        if 'track' not in track:
            continue
        tmd = track['track']
        url = url_for('get_song', _external=True, song_id=tmd['storeId'])
        metadata = {
            'location': url,
            'title': tmd['title'],
            'creator': tmd['artist'],
            'album': tmd['album'],
            'trackNum': str(tmd['trackNumber']),
            'duration': tmd['durationMillis'],
        }
        album_art = tmd.get('albumArtRef', [])
        if album_art:
            metadata['image'] = album_art[0]['url']
        xspf.add_track(metadata)
    return xspf.toXml()
示例#2
0
def get_playlists():
    """
    Retrieve all of the logged in user's playlists.

    By default, it returns an XSPF_-formatted playlist. If ``application/json``
    is preferred in the ``Accept`` HTTP header, it will return the JSON
    representation that is returned by GMusic.

    .. _XSPF: http://xspf.org/
    """
    gmusic_playlists = music.get_all_user_playlist_contents()

    resp_type = request.accept_mimetypes.best_match([XSPF_TYPE, JSON_TYPE])
    # Return JSON playlist only if explicitly requested.
    if resp_type == JSON_TYPE:
        return jsonify({
            'playlists': gmusic_playlists,
        })

    # Generate XSPF playlist, otherwise.
    xspf = Xspf(title='Playlists',
                location=url_for('get_playlists', _external=True))

    for playlist in gmusic_playlists:
        if playlist['deleted']:
            continue
        xspf.add_track({
            'location': url_for('get_playlist', _external=True,
                                playlist_id=playlist['id']),
            'title': playlist['name'],
            'creator': playlist['ownerName'],
        })

    return Response(xspf.toXml(), mimetype=XSPF_TYPE)
示例#3
0
def gmusic_playlist_to_xspf(playlist_id, playlist):
    """
    Convert a playlist from gmusicapi into an XSPF playlist.

    :type playlist: dict
    :return: XSPF (XML), UTF-8 encoded
    :rtype: str
    """
    create_ts = int(playlist['creationTimestamp']) / 1000000.0
    create_iso = datetime.utcfromtimestamp(create_ts).isoformat()
    p_url = url_for('get_playlist', _external=True, playlist_id=playlist_id)
    xspf = Xspf(title=playlist['name'],
                creator=playlist['ownerName'],
                date=create_iso,
                location=p_url)
    for track in playlist['tracks']:
        if 'track' not in track:
            continue
        tmd = track['track']
        url = url_for('get_song', _external=True, song_id=tmd['storeId'])
        metadata = {
            'location': url,
            'title': tmd['title'],
            'creator': tmd['artist'],
            'album': tmd['album'],
            'trackNum': str(tmd['trackNumber']),
            'duration': tmd['durationMillis'],
        }
        album_art = tmd.get('albumArtRef', [])
        if album_art:
            metadata['image'] = album_art[0]['url']
        xspf.add_track(metadata)
    return xspf.toXml()
示例#4
0
def gmusic_playlist_to_xspf(playlist_id, playlist):
    """
    Convert a playlist from gmusicapi into an XSPF playlist.

    :type playlist: dict
    :return: XSPF (XML), UTF-8 encoded
    :rtype: str
    """
    all_songs = playlist_id == 'all_songs'
    if all_songs:
        xspf_kwargs = {
            'title': 'All Songs',
            'date': datetime.now().isoformat(),
            'location': url_for('get_all_songs_playlist', _external=True),
        }
    elif playlist_id.startswith('B') and len(playlist_id) == 27:
        xspf_kwargs = {
            'title':
            playlist['name'],
            'date':
            datetime(playlist['year'], 1, 1).isoformat(),
            'location':
            url_for('get_album_info', _external=True, album_id=playlist_id),
        }
    else:
        create_ts = int(playlist['creationTimestamp']) / 1000000.0
        xspf_kwargs = {
            'title':
            playlist['name'],
            'creator':
            playlist['ownerName'],
            'date':
            datetime.utcfromtimestamp(create_ts).isoformat(),
            'location':
            url_for('get_playlist', _external=True, playlist_id=playlist_id),
        }
    xspf = Xspf(**xspf_kwargs)
    for track in playlist['tracks']:
        if not all_songs and 'track' not in track:
            continue
        tmd = track['track']
        url = url_for('get_song', _external=True, song_id=tmd['storeId'])
        metadata = {
            'location': url,
            'title': tmd['title'],
            'creator': tmd['artist'],
            'album': tmd['album'],
            'trackNum': str(tmd['trackNumber']),
            'duration': tmd['durationMillis'],
        }
        album_art = tmd.get('albumArtRef', [])
        if album_art:
            metadata['image'] = album_art[0]['url']
        xspf.add_track(metadata)
    return xspf.toXml()
示例#5
0
def gmusic_playlist_to_xspf(playlist_id, playlist):
    """
    Convert a playlist from gmusicapi into an XSPF playlist.

    :type playlist: dict
    :return: XSPF (XML), UTF-8 encoded
    :rtype: str
    """
    all_songs = playlist_id == 'all_songs'
    if all_songs:
        xspf_kwargs = {
            'title': 'All Songs',
            'date': datetime.now().isoformat(),
            'location': url_for('get_all_songs_playlist', _external=True),
        }
    elif playlist_id.startswith('B') and len(playlist_id) == 27:
        xspf_kwargs = {
            'title': playlist['name'],
            'date': datetime(playlist['year'], 1, 1).isoformat(),
            'location': url_for('get_album_info', _external=True,
                                album_id=playlist_id),
        }
    else:
        create_ts = int(playlist['creationTimestamp']) / 1000000.0
        xspf_kwargs = {
            'title': playlist['name'],
            'creator': playlist['ownerName'],
            'date': datetime.utcfromtimestamp(create_ts).isoformat(),
            'location': url_for('get_playlist', _external=True,
                                playlist_id=playlist_id),
        }
    xspf = Xspf(**xspf_kwargs)
    for track in playlist['tracks']:
        if not all_songs and 'track' not in track:
            continue
        tmd = track['track']
        url = url_for('get_song', _external=True, song_id=tmd['storeId'])
        metadata = {
            'location': url,
            'title': tmd['title'],
            'creator': tmd['artist'],
            'album': tmd['album'],
            'trackNum': str(tmd['trackNumber']),
            'duration': tmd['durationMillis'],
        }
        album_art = tmd.get('albumArtRef', [])
        if album_art:
            metadata['image'] = album_art[0]['url']
        xspf.add_track(metadata)
    return xspf.toXml()
示例#6
0
def get_playlists():
    """
    Retrieve all of the logged in user's playlists.

    By default, it returns an XSPF_-formatted playlist. If ``application/json``
    is preferred in the ``Accept`` HTTP header, it will return the JSON
    representation that is returned by GMusic.

    .. _XSPF: http://xspf.org/
    """
    gmusic_playlists = music.get_all_user_playlist_contents()

    resp_type = request.accept_mimetypes.best_match([XSPF_TYPE, JSON_TYPE])
    # Return JSON playlist only if explicitly requested.
    if resp_type == JSON_TYPE:
        return jsonify({
            'playlists': gmusic_playlists,
        })

    # Generate XSPF playlist, otherwise.
    xspf = Xspf(title='Playlists',
                location=url_for('get_playlists', _external=True))

    for playlist in gmusic_playlists:
        if playlist['deleted']:
            continue
        xspf.add_track({
            'location':
            url_for('get_playlist', _external=True,
                    playlist_id=playlist['id']),
            'title':
            playlist['name'],
            'creator':
            playlist['ownerName'],
        })

    return Response(xspf.toXml(), mimetype=XSPF_TYPE)