search.c

The search.c example shows how you can use search functions.

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


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

static sp_session *g_session;
static sp_search *g_search;


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

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

static void print_album(sp_album *album)
{
    printf("  Album \"%s\" (%d)\n",
           sp_album_name(album),
           sp_album_year(album));
}

static void print_artist(sp_artist *artist)
{
    printf("  Artist \"%s\"\n", sp_artist_name(artist));
}

static void print_search(sp_search *search)
{
    int i;

    printf("Query          : %s\n", sp_search_query(search));
    printf("Did you mean   : %s\n", sp_search_did_you_mean(search));
    printf("Tracks in total: %d\n", sp_search_total_tracks(search));
    puts("");

    for (i = 0; i < sp_search_num_tracks(search) && i < 10; ++i)
        print_track(sp_search_track(search, i));

    puts("");

    for (i = 0; i < sp_search_num_albums(search) && i < 10; ++i)
        print_album(sp_search_album(search, i));

    puts("");

    for (i = 0; i < sp_search_num_artists(search) && i < 10; ++i)
        print_artist(sp_search_artist(search, i));

    puts("");
}

static void terminate(void)
{
    sp_error error;

    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 search_complete(sp_search *search, void *userdata)
{
    if (search && SP_ERROR_OK == sp_search_error(search))
        print_search(search);
    else
        fprintf(stderr, "Failed to search: %s\n",
                sp_error_message(sp_search_error(search)));

    sp_search_release(g_search);
    g_search = NULL;
    terminate();
}

void metadata_updated(sp_session *session)
{
}

void session_ready(sp_session *session)
{
    g_search = sp_search_create(session, "year:2003 never", 0, 10,
                                &search_complete, NULL);

    if (!g_search) {
        fprintf(stderr, "failed to start search\n");
        g_exit_code = 6;
        return;
    }

    g_session = session;
}

void session_terminated(void)
{
}

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