add libmiaosic

This commit is contained in:
aynakeya
2025-12-29 22:56:59 +08:00
parent 49650b6401
commit 732f31ccf3
4 changed files with 264 additions and 3 deletions

3
.gitignore vendored
View File

@@ -2,4 +2,5 @@
go.sum
cmd/miaosic/miaosic
cmd/miaosic/session.json
cmd/miaosic/session.bak.json
cmd/miaosic/session.bak.json
libmiaosic/libmiaosic.so

48
libmiaosic/example/main.c Normal file
View File

@@ -0,0 +1,48 @@
#include <stdio.h>
#include <stdlib.h>
#include "libmiaosic.h"
static void print_error(const char* label, MiaosicResult* res) {
if (res == NULL) {
fprintf(stderr, "%s: result is NULL\n", label);
return;
}
if (res->ok) {
return;
}
fprintf(stderr, "%s failed: %s\n", label, res->err ? res->err : "unknown error");
}
int main(void) {
MiaosicResult* reg = UseBilibiliVideo();
if (reg == NULL || !reg->ok) {
print_error("UseBilibiliVideo", reg);
FreeResult(reg);
return 1;
}
FreeResult(reg);
MiaosicResult* search = SearchByProvider("bilibili-video", "家有女友", 1, 5);
if (search == NULL || !search->ok || search->result_type != MIAOSIC_RESULT_MEDIA_INFO_LIST) {
print_error("SearchByProvider", search);
FreeResult(search);
return 1;
}
MiaosicMediaInfoList* list = (MiaosicMediaInfoList*)search->data;
printf("Search results: %d\n", list ? list->len : 0);
if (list && list->len > 0) {
for (int i = 0; i < list->len; i++) {
MiaosicMediaInfo* info = &list->items[i];
const char* title = info->title ? info->title : "";
const char* artist = info->artist ? info->artist : "";
const char* provider = info->meta.provider ? info->meta.provider : "";
const char* identifier = info->meta.identifier ? info->meta.identifier : "";
printf("[%d] %s - %s (%s:%s)\n", i + 1, title, artist, provider, identifier);
}
}
FreeResult(search);
return 0;
}

View File

@@ -3,7 +3,113 @@ package main
/*
#include <stdlib.h>
#include <string.h>
#include "libmiaosic.h"
typedef struct {
char* provider;
char* identifier;
} MiaosicMetaData;
typedef struct {
char* url;
unsigned char* data;
int data_len;
} MiaosicPicture;
typedef struct {
char* title;
char* artist;
MiaosicPicture cover;
char* album;
MiaosicMetaData meta;
} MiaosicMediaInfo;
typedef struct {
char* key;
char* value;
} MiaosicHeaderPair;
typedef struct {
char* url;
char* quality;
MiaosicHeaderPair* headers;
int header_len;
} MiaosicMediaUrl;
typedef struct {
int len;
MiaosicMediaInfo* items;
} MiaosicMediaInfoList;
typedef struct {
int len;
MiaosicMediaUrl* items;
} MiaosicMediaUrlList;
typedef struct {
char* title;
MiaosicMediaInfoList medias;
MiaosicMetaData meta;
} MiaosicPlaylist;
typedef struct {
int matched;
MiaosicMetaData meta;
} MiaosicMatchResult;
typedef struct {
char* url;
char* key;
} MiaosicQrLoginSession;
typedef struct {
int success;
char* message;
} MiaosicQrLoginResult;
typedef struct {
char* lang;
char* lyrics;
} MiaosicLyrics;
typedef struct {
int len;
MiaosicLyrics* items;
} MiaosicLyricsList;
typedef struct {
int value;
} MiaosicBool;
typedef struct {
char* value;
} MiaosicString;
typedef struct {
int len;
char** items;
} MiaosicStringList;
typedef enum {
MIAOSIC_RESULT_NONE = 0,
MIAOSIC_RESULT_BOOL = 1,
MIAOSIC_RESULT_STRING = 2,
MIAOSIC_RESULT_STRING_LIST = 3,
MIAOSIC_RESULT_META = 4,
MIAOSIC_RESULT_MEDIA_INFO = 5,
MIAOSIC_RESULT_MEDIA_INFO_LIST = 6,
MIAOSIC_RESULT_MEDIA_URL_LIST = 7,
MIAOSIC_RESULT_PLAYLIST = 8,
MIAOSIC_RESULT_MATCH = 9,
MIAOSIC_RESULT_QR_LOGIN_SESSION = 10,
MIAOSIC_RESULT_QR_LOGIN_RESULT = 11,
MIAOSIC_RESULT_LYRICS_LIST = 12
} MiaosicResultType;
typedef struct MiaosicResult {
int ok;
char* err;
MiaosicResultType result_type;
void* data;
} MiaosicResult;
*/
import "C"

View File

@@ -23,7 +23,113 @@ typedef struct { const char *p; ptrdiff_t n; } _GoString_;
#include <stdlib.h>
#include <string.h>
#include "libmiaosic.h"
typedef struct {
char* provider;
char* identifier;
} MiaosicMetaData;
typedef struct {
char* url;
unsigned char* data;
int data_len;
} MiaosicPicture;
typedef struct {
char* title;
char* artist;
MiaosicPicture cover;
char* album;
MiaosicMetaData meta;
} MiaosicMediaInfo;
typedef struct {
char* key;
char* value;
} MiaosicHeaderPair;
typedef struct {
char* url;
char* quality;
MiaosicHeaderPair* headers;
int header_len;
} MiaosicMediaUrl;
typedef struct {
int len;
MiaosicMediaInfo* items;
} MiaosicMediaInfoList;
typedef struct {
int len;
MiaosicMediaUrl* items;
} MiaosicMediaUrlList;
typedef struct {
char* title;
MiaosicMediaInfoList medias;
MiaosicMetaData meta;
} MiaosicPlaylist;
typedef struct {
int matched;
MiaosicMetaData meta;
} MiaosicMatchResult;
typedef struct {
char* url;
char* key;
} MiaosicQrLoginSession;
typedef struct {
int success;
char* message;
} MiaosicQrLoginResult;
typedef struct {
char* lang;
char* lyrics;
} MiaosicLyrics;
typedef struct {
int len;
MiaosicLyrics* items;
} MiaosicLyricsList;
typedef struct {
int value;
} MiaosicBool;
typedef struct {
char* value;
} MiaosicString;
typedef struct {
int len;
char** items;
} MiaosicStringList;
typedef enum {
MIAOSIC_RESULT_NONE = 0,
MIAOSIC_RESULT_BOOL = 1,
MIAOSIC_RESULT_STRING = 2,
MIAOSIC_RESULT_STRING_LIST = 3,
MIAOSIC_RESULT_META = 4,
MIAOSIC_RESULT_MEDIA_INFO = 5,
MIAOSIC_RESULT_MEDIA_INFO_LIST = 6,
MIAOSIC_RESULT_MEDIA_URL_LIST = 7,
MIAOSIC_RESULT_PLAYLIST = 8,
MIAOSIC_RESULT_MATCH = 9,
MIAOSIC_RESULT_QR_LOGIN_SESSION = 10,
MIAOSIC_RESULT_QR_LOGIN_RESULT = 11,
MIAOSIC_RESULT_LYRICS_LIST = 12
} MiaosicResultType;
typedef struct MiaosicResult {
int ok;
char* err;
MiaosicResultType result_type;
void* data;
} MiaosicResult;
#line 1 "cgo-generated-wrapper"