browse.c

The browse.c example shows how you can use the album, artist, and browse functions.

#include <stdio.h>
#include <spotify/api.h>


/* --- Data --- */
extern int g_exit_code;

static sp_session *g_session;
static sp_albumbrowse *g_albumbrowse;
static sp_artistbrowse *g_artistbrowse;


static void print_track(sp_track *track)
{
    int duration = sp_track_duration(track);

    printf("  Track %s [%d:%02d] has %d artist(s), %d%% popularity, %d on disc %d\n",
        sp_track_name(track),
        duration / 60000,
        (duration / 1000) / 60,
        sp_track_num_artists(track),
        sp_track_popularity(track),
        sp_track_index(track),
        sp_track_disc(track));
}

static void print_albumbrowse(sp_albumbrowse *browse)
{
    int i;

    printf("Album browse of \"%s\" (%d)\n", sp_album_name(sp_albumbrowse_album(browse)), sp_album_year(sp_albumbrowse_album(browse)));

    for (i = 0; i < sp_albumbrowse_num_copyrights(browse); ++i)
        printf("  Copyright: %s\n", sp_albumbrowse_copyright(browse, i));

    printf("  Tracks: %d\n", sp_albumbrowse_num_tracks(browse));
    printf("  Review: %.60s...\n", sp_albumbrowse_review(browse));
    puts("");

    for (i = 0; i < sp_albumbrowse_num_tracks(browse); ++i)
        print_track(sp_albumbrowse_track(browse, i));

    puts("");
}

static void print_artistbrowse(sp_artistbrowse *browse)
{
    int i;

    printf("Artist browse of \"%s\"\n", sp_artist_name(sp_artistbrowse_artist(browse)));

    for (i = 0; i < sp_artistbrowse_num_similar_artists(browse); ++i)
        printf("  Similar artist: %s\n", sp_artist_name(sp_artistbrowse_similar_artist(browse, i)));

    printf("  Portraits: %d\n", sp_artistbrowse_num_portraits(browse));
    printf("  Tracks   : %d\n", sp_artistbrowse_num_tracks(browse));
    printf("  Biography: %.60s...\n", sp_artistbrowse_biography(browse));
    puts("");

    for (i = 0; i < sp_artistbrowse_num_tracks(browse); ++i)
        print_track(sp_artistbrowse_track(browse, i));

    puts("");
}

static void try_terminate(void)
{
    sp_error error;

    if (g_albumbrowse || g_artistbrowse)
        return;

    error = sp_session_logout(g_session);

    if (SP_ERROR_OK != error) {
        fprintf(stderr, "failed to log out from Spotify: %s\n", sp_error_message(error));
        g_exit_code = 5;
        return;
    }
}

static void album_complete(sp_albumbrowse *browse, void *userdata)
{
    if (browse && SP_ERROR_OK == sp_albumbrowse_error(browse))
        print_albumbrowse(browse);
    else
        fprintf(stderr, "Failed to browse album: %s\n",
                sp_error_message(sp_albumbrowse_error(browse)));

    sp_albumbrowse_release(g_albumbrowse);
    g_albumbrowse = NULL;
    try_terminate();
}

static void artist_complete(sp_artistbrowse *browse, void *userdata)
{
    if (browse && SP_ERROR_OK == sp_artistbrowse_error(browse))
        print_artistbrowse(browse);
    else
        fprintf(stderr, "Failed to browse artist: %s\n",
                sp_error_message(sp_artistbrowse_error(browse)));

    sp_artistbrowse_release(g_artistbrowse);
    g_artistbrowse = NULL;
    try_terminate();
}

void metadata_updated(sp_session *session)
{
}

void session_ready(sp_session *session)
{
    sp_link *link = sp_link_create_from_string("spotify:artist:0gxyHStUsqpMadRV0Di1Qt");
    sp_artist *artist;
    sp_album *album;

    if (!link) {
        fprintf(stderr, "failed to get link from a Spotify URI\n");
        g_exit_code = 6;
        return;
    }

    artist = sp_link_as_artist(link);

    if (!artist) {
        fprintf(stderr, "not an artist link\n");
        sp_link_release(link);
        g_exit_code = 7;
        return;
    }

    g_artistbrowse = sp_artistbrowse_create(session, artist, &artist_complete, NULL);
    sp_link_release(link);

    if (!g_artistbrowse) {
        fprintf(stderr, "failed to start artist browse\n");
        g_exit_code = 10;
        return;
    }

    link = sp_link_create_from_string("spotify:album:3L0CYQZR9jjFLbyX8ZZ6UP");

    if (!link) {
        fprintf(stderr, "failed to get link from a Spotify URI\n");
        g_exit_code = 8;
        return;
    }

    album = sp_link_as_album(link);

    if (!album) {
        fprintf(stderr, "not an album link\n");
        sp_link_release(link);
        g_exit_code = 9;
        return;
    }

    g_albumbrowse = sp_albumbrowse_create(session, album, &album_complete, NULL);
    sp_link_release(link);

    if (!g_albumbrowse) {
        fprintf(stderr, "failed to start album browse\n");
        g_exit_code = 10;
        return;
    }

    g_session = session;
}

void session_terminated(void)
{
}

Generated on Tue Apr 7 15:21:55 2009.
Copyright © 2006–2009 Spotify Ltd