linux 下的 Deezer 本机 API:无法创建简单的应用程序
Deezer native API under linux: Unanble to create simple app
我试图创建一个简单的应用程序,它将连接到 deezer 并播放单首歌曲。我获得了访问令牌并编写了这个程序。
目标机器:linuxx86_64
API版本:v1.0.1
#include <iostream>
#include <deezer-api.h>
#include <deezer-player.h>
#define ACCESS_TOKEN "ACCESS TOKEN HERE"
int main(int argc, char **argv)
{
dz_connect_configuration cfg = {0};
cfg.app_id = "APP ID HERE";
cfg.product_id = "product_id";
cfg.product_build_id = "0.0.0";
dz_connect_handle dz_handle = dz_connect_new(&cfg);
if (dz_handle == nullptr)
{
return 100;
}
auto err_code = dz_connect_activate(dz_handle, nullptr);
if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
{
return err_code;
}
err_code = dz_connect_set_access_token(dz_handle, nullptr, nullptr, ACCESS_TOKEN);
if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
{
return err_code;
}
auto dz_player_handle = dz_player_new(dz_handle);
if (dz_player_handle == nullptr)
{
return 200;
}
err_code = dz_player_activate(dz_player_handle, nullptr);
if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
{
return err_code;
}
err_code = dz_player_load(dz_player_handle, nullptr, nullptr, "dzmedia:///track/3135556");
if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
{
return err_code;
}
err_code = dz_player_play(dz_player_handle, nullptr, nullptr, DZ_PLAYER_PLAY_CMD_START_TRACKLIST, DZ_TRACKLIST_AUTOPLAY_MANUAL, DZ_INDEX_IN_PLAYLIST_CURRENT);
if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
{
return err_code;
}
std::cin.get();
return 0;
}
突然我运行陷入困境。
首先 运行 向我展示了这个输出:
398748:201417 dz_bufferevent: [dz_bufferevent_on_activation:561] could not open /var/tmp/settings.dat
我创建了这个文件,但我怀疑它不应该是空的。
在创建了 /var/tmp/settings.dat 的第二个 运行 之后,我得到了这个输出:
399206:328658 dz_crash_handler: [dz_crash_handler_init:284] Crash Handler available
399206:329404 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
399206:329533 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
399206:329590 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
399206:329664 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
399206:329726 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
399206:329736 dzcrashreport-sender: [dz_crash_report_sender_retrieve_server_url_on_result:213] Error - couldn't read URL server err:0
399206:336505 pulseaudio-engine: [dz_audioengine_set_output_gain:1184] not init
399206:336520 pulseaudio-engine: [dz_audioengine_set_output_gain:1184] not init
399206:336577 player: [dz_player_play_licence:1756] unknown error 131079
我不明白,我做错了什么?
更新:
Deezer 本机 API:v1.0.1-v00349200
仍然没有运气。尝试了 "user_profile_path"
的不同变体:
- 。
- ./
- ./user - 在具有 777 权限的工作目录中创建
- /var/tmp
API创建的文件夹中没有文件。
仍然有错误:
[dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
[dz_crash_report_sender_retrieve_server_url_on_result:213] Error - couldn't read URL server err:0
添加回调实现后我看到了这个:
dz_connect_set_access_token
调用回调 dz_activity_operation_callback
,状态为 DZ_ERROR_CONNECT_SESSION_OFFLINE_MODE
dz_player_play
使用事件 DZ_PLAYER_EVENT_PLAYLIST_TRACK_NO_RIGHT
调用回调 dz_player_onevent_cb
嗯,我检查过我是否有权播放这首歌。
"could not open"
消息仅供参考。
该文件将自动创建(或在检测到损坏时更新)。
这个问题似乎与 dz_connect_configuration 有关,您必须将 "user_profile_path"
设置为有效路径。这是存储用户临时文件的地方。
问候,
西里尔
更新:
一些有用的提示:
我的错误,好像少了一个电话:
dz_connect_cache_path_set(dz_handle, NULL, NULL, <user_profile_path>);
必须将 DZ_INDEX_IN_PLAYLIST_CURRENT
替换为 0
。我同意这个并不明显...
检查您创建的 access_token 是否启用 offline_access调用 https://connect.deezer.com/oauth/auth.php?app_id=YOUR_APP_ID&redirect_uri=YOUR_REDIRECT_URI&perms=basic_access,email,offline_access
(cf: http://developers.deezer.com/api/oauth and http://developers.deezer.com/api/permissions)
更新 2:
自从我上次回答以来,我在 Github 上发布了示例代码:
https://github.com/deezer/native-sdk-samples
我建议你快速看一下:)
我在你私下发给我的完整代码中注意到的是:
你不是在调用dz_connect_offline_mode(...,false);
它实际上会触发Native SDK的登录过程
您没有等待 DZ_CONNECT_EVENT_USER_LOGIN_OK
加载和播放曲目。
此致,
西里尔
我试图创建一个简单的应用程序,它将连接到 deezer 并播放单首歌曲。我获得了访问令牌并编写了这个程序。
目标机器:linuxx86_64
API版本:v1.0.1
#include <iostream>
#include <deezer-api.h>
#include <deezer-player.h>
#define ACCESS_TOKEN "ACCESS TOKEN HERE"
int main(int argc, char **argv)
{
dz_connect_configuration cfg = {0};
cfg.app_id = "APP ID HERE";
cfg.product_id = "product_id";
cfg.product_build_id = "0.0.0";
dz_connect_handle dz_handle = dz_connect_new(&cfg);
if (dz_handle == nullptr)
{
return 100;
}
auto err_code = dz_connect_activate(dz_handle, nullptr);
if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
{
return err_code;
}
err_code = dz_connect_set_access_token(dz_handle, nullptr, nullptr, ACCESS_TOKEN);
if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
{
return err_code;
}
auto dz_player_handle = dz_player_new(dz_handle);
if (dz_player_handle == nullptr)
{
return 200;
}
err_code = dz_player_activate(dz_player_handle, nullptr);
if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
{
return err_code;
}
err_code = dz_player_load(dz_player_handle, nullptr, nullptr, "dzmedia:///track/3135556");
if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
{
return err_code;
}
err_code = dz_player_play(dz_player_handle, nullptr, nullptr, DZ_PLAYER_PLAY_CMD_START_TRACKLIST, DZ_TRACKLIST_AUTOPLAY_MANUAL, DZ_INDEX_IN_PLAYLIST_CURRENT);
if (err_code > DZ_ERROR_NO_ERROR_ASYNC)
{
return err_code;
}
std::cin.get();
return 0;
}
突然我运行陷入困境。 首先 运行 向我展示了这个输出:
398748:201417 dz_bufferevent: [dz_bufferevent_on_activation:561] could not open /var/tmp/settings.dat
我创建了这个文件,但我怀疑它不应该是空的。 在创建了 /var/tmp/settings.dat 的第二个 运行 之后,我得到了这个输出:
399206:328658 dz_crash_handler: [dz_crash_handler_init:284] Crash Handler available
399206:329404 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
399206:329533 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
399206:329590 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
399206:329664 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
399206:329726 dzcrashreport-server-disk: [dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
399206:329736 dzcrashreport-sender: [dz_crash_report_sender_retrieve_server_url_on_result:213] Error - couldn't read URL server err:0
399206:336505 pulseaudio-engine: [dz_audioengine_set_output_gain:1184] not init
399206:336520 pulseaudio-engine: [dz_audioengine_set_output_gain:1184] not init
399206:336577 player: [dz_player_play_licence:1756] unknown error 131079
我不明白,我做错了什么?
更新:
Deezer 本机 API:v1.0.1-v00349200
仍然没有运气。尝试了 "user_profile_path"
的不同变体:
- 。
- ./
- ./user - 在具有 777 权限的工作目录中创建
- /var/tmp
API创建的文件夹中没有文件。
仍然有错误:
[dz_crashreport_server_url_on_read_data:436] ERROR - Open failure err: 7
[dz_crash_report_sender_retrieve_server_url_on_result:213] Error - couldn't read URL server err:0
添加回调实现后我看到了这个:
dz_connect_set_access_token
调用回调dz_activity_operation_callback
,状态为DZ_ERROR_CONNECT_SESSION_OFFLINE_MODE
dz_player_play
使用事件DZ_PLAYER_EVENT_PLAYLIST_TRACK_NO_RIGHT
调用回调
dz_player_onevent_cb
嗯,我检查过我是否有权播放这首歌。
"could not open"
消息仅供参考。
该文件将自动创建(或在检测到损坏时更新)。
这个问题似乎与 dz_connect_configuration 有关,您必须将 "user_profile_path"
设置为有效路径。这是存储用户临时文件的地方。
问候,
西里尔
更新:
一些有用的提示:
我的错误,好像少了一个电话:
dz_connect_cache_path_set(dz_handle, NULL, NULL, <user_profile_path>);
必须将
DZ_INDEX_IN_PLAYLIST_CURRENT
替换为0
。我同意这个并不明显...检查您创建的 access_token 是否启用 offline_access调用
https://connect.deezer.com/oauth/auth.php?app_id=YOUR_APP_ID&redirect_uri=YOUR_REDIRECT_URI&perms=basic_access,email,offline_access
(cf: http://developers.deezer.com/api/oauth and http://developers.deezer.com/api/permissions)
更新 2: 自从我上次回答以来,我在 Github 上发布了示例代码: https://github.com/deezer/native-sdk-samples
我建议你快速看一下:)
我在你私下发给我的完整代码中注意到的是:
你不是在调用
dz_connect_offline_mode(...,false);
它实际上会触发Native SDK的登录过程您没有等待
DZ_CONNECT_EVENT_USER_LOGIN_OK
加载和播放曲目。
此致,
西里尔