/* verify_home.c — 最终确认:复刻 App home 的完整链路(status_check 取 uid → user_playlist 拉歌单)。 * 用与 App 完全相同的固定 core 库。真机只跑一次(风控:真实 cookie 请求严格受限)。 * 用法: ./verify_home [data_dir] [cacert] */ #include "ncm.h" #include "ncm_http.h" #include "ncm_common.h" #include #include int main(int argc, char **argv) { const char *data_dir = argc > 1 ? argv[1] : "/usr/data/mnt/sd_0/MeowData/dev.player.ncm/data"; const char *cacert = argc > 2 ? argv[2] : "/usr/data/mnt/sd_0/MeowAPPs/dev.player.ncm/cacert.pem"; ncm_ctx_t ctx; ncm_ctx_init(&ctx, data_dir); printf("device_id=%s cookie_len=%zu\n", ctx.device_id, strlen(ctx.cookie)); ncm_http_set_verify_default(1, cacert); /* 1) status_check 取 uid/nickname */ char uid[32], nick[128]; long t0 = (long)ncm_now_ms(); int rc = ncm_login_status_check(ctx.device_id, ctx.cookie, uid, sizeof uid, nick, sizeof nick); long dt = (long)ncm_now_ms() - t0; printf("status_check rc=%d elapsed_ms=%ld uid=%s nick=%s\n", rc, dt, uid, nick); if (rc != NCM_OK) { printf("VERIFY FAIL: status_check not OK\n"); return 1; } /* 2) user_playlist 拉歌单 */ ncm_playlist_t pls[64]; int n = 0; t0 = (long)ncm_now_ms(); rc = ncm_api_user_playlist(ctx.device_id, ctx.cookie, uid, 30, 0, pls, 64, &n); dt = (long)ncm_now_ms() - t0; printf("user_playlist rc=%d elapsed_ms=%ld count=%d\n", rc, dt, n); if (rc != NCM_OK) { printf("VERIFY FAIL: user_playlist not OK\n"); return 1; } for (int i = 0; i < n && i < 8; i++) printf(" [%d] %s (%d tracks)\n", i, pls[i].name, pls[i].track_count); printf("VERIFY OK: user=%s playlists=%d\n", uid, n); return 0; }