2

libspotify を使用して、(データベースに保存されている) Spotify ユーザー名のリストを反復処理し、これらのプレイリスト コンテナーを作成し、コンテナー内のすべてのプレイリストとすべてのプレイリスト内のすべてのトラックを取得しています。

私は次のようにこれをやっています:

static sp_playlistcontainer_callbacks pc_callbacks = {
 NULL,
 NULL,
 NULL,
 &container_loaded
};

static sp_playlist_callbacks pl_callbacks = {
 NULL,
 NULL,
 NULL,
 NULL,
 &playlist_callback,
 NULL,
 NULL,
 NULL,
 NULL,
 NULL,
 NULL,
 NULL,
 NULL
};

static void container_loaded(sp_playlistcontainer *pc, void *userdata)
{
 char * username =  ((char *) userdata);
 sp_playlistcontainer_remove_callbacks(pc, &pc_callbacks, username);

 int num_playlists = sp_playlistcontainer_num_playlists(pc);
 std::cout << "User: " << username << " has : " << num_playlists << std::endl;

 //for each playlist, analyse each song
 //sp_playlist currentPlaylist;
 for(int i=0;i<num_playlists;i++)
 {
    sp_playlist * currentPlaylist = sp_playlistcontainer_playlist(pc,i);
    sp_playlist_add_callbacks(currentPlaylist, &pl_callbacks, username);
 }

 sp_playlistcontainer_release(pc);

}

static void playlist_callback(sp_playlist *pl, void *userdata)
{
 char * username =  ((char *) userdata);

 if(!sp_playlist_is_loaded(pl))
 {
    return;
 }
 sp_playlist_remove_callbacks(pl, &pl_callbacks, username);

 int numTracks = sp_playlist_num_tracks(pl);
 for (int i=0;i<numTracks;i++)
 {
    //do track processing  
 }

 std::cout << "Found: " << sp_playlist_name(pl) << std::endl;

}


//main function
//for(int i=0;...
sp_playlistcontainer * plc = sp_session_publishedcontainer_for_user_create(g_session, usernames[i]);
sp_playlistcontainer_add_callbacks(
 plc,
 &pc_callbacks,
 usernames[i]
);
//end for
//end main

//more functions etc...

プレイリスト コンテナ コールバックは問題なく動作しますが、プレイリスト コールバックは一部のプレイリストでしか機能しないことがあります。毎回、すべてのプレイリストの 95% を正しく取得できます。コールバックを発生させずに、コールバックを 30 分以上残しました。

何か不足していますか、それとも回避する必要があるバグがありますか?

御時間ありがとうございます。

よろしく、 ロブ

4

2 に答える 2

1

libspotify は、sp_session_process_events を呼び出してメイン スレッドから定期的に呼び出す必要があります。これを行っていないようです。少なくともソース コードの一部ではありません。

これに関する背景については、FAQ を参照してください: https://developer.spotify.com/technologies/libspotify/faq/

于 2013-11-26T11:00:36.033 に答える
0

取得できないプレイリストがパブリック ビュー用に公開されていることを確認しましたか? プレイリストがユーザーによって公開されていない場合、そのユーザーとしてログインしない限り、プレイリストを取得できません。

于 2012-06-08T02:57:15.773 に答える