Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: integration with dandanplay API changes #114 #115

Merged
merged 1 commit into from
Jan 25, 2025
Merged

fix: integration with dandanplay API changes #114 #115

merged 1 commit into from
Jan 25, 2025

Conversation

Tony15246
Copy link
Owner

Close #114

对接弹弹play开放平台API 接入新要求

@Tony15246 Tony15246 requested a review from dyphire January 24, 2025 08:30
@dyphire
Copy link
Collaborator

dyphire commented Jan 24, 2025

这个 python 打包后的体积真是让我蚌埠住
在此更改后 options 里的 api_server 选项应该要废弃吧

@Tony15246
Copy link
Owner Author

Tony15246 commented Jan 24, 2025

这个 python 打包后的体积真是让我蚌埠住

我也是完全被震惊,插件体积直接翻30倍。git push的时候上传了半天,让我一度怀疑自己的眼睛,还以为命令行卡住了

在此更改后 options 里的 api_server 选项应该要废弃吧

废除不废除都可以,在别的弹幕服务器看来只不过是请求里带了一堆莫名其妙不明所以的请求头,倒是不影响正常请求

@dyphire
Copy link
Collaborator

dyphire commented Jan 24, 2025

这个 python 打包后的体积真是让我蚌埠住

我也是完全被震惊,插件体积直接翻30倍。git push的时候上传了半天,让我一度怀疑自己的眼睛,还以为命令行卡住了

改成在 C 或 go 中实现会不会比较好,编译起来要比 python 这种解释型语言友好的多

在此更改后 options 里的 api_server 选项应该要废弃吧

废除不废除都可以,在别的弹幕服务器看来只不过是请求里带了一堆莫名其妙不明所以的请求头,倒是不影响正常请求

那就保留吧

@Tony15246
Copy link
Owner Author

改成在 C 或 go 中实现会不会比较好,编译起来要比 python 这种解释型语言友好的多

有可能,我尝试实现一个c语言版本的看看

@MiKoto-Railgun
Copy link
Contributor

是不是打包时把工作环境都打包进去了,我之前用tkinter做个图形化窗口程序都不到10mb

@Tony15246
Copy link
Owner Author

Tony15246 commented Jan 24, 2025

是不是打包时把工作环境都打包进去了,我之前用tkinter做个图形化窗口程序都不到10mb

为什么这么大我也有点摸不着头脑,我已经用conda创建了全新的空虚拟环境,只安装了程序运行必要的包,结果打包完就是这么大。

@zhongfly
Copy link

zhongfly commented Jan 24, 2025

让AI几分钟写了一个C语言的,说不定能用呢,大体意思是这样:
https://gist.github.com/zhongfly/f06e776b5adc4cecd1b2fc7c18d352af
安装libcurl和openssl库,然后使用以下命令编译和运行程序:
gcc -o curl_wrapper curl_wrapper.c -lcurl -lssl -lcrypto
./curl_wrapper -X GET "https://api.dandanplay.net/your/url/path"

GO版本
https://github.com/zhongfly/dandanplay
exe体积1.6M,我只简单了测试了,似乎是可用的
update: 用一种扭曲的方法实现了编译时注入凭证

@Tony15246
Copy link
Owner Author

让AI几分钟写了一个C语言的,说不定能用呢,大体意思是这样: https://gist.github.com/zhongfly/f06e776b5adc4cecd1b2fc7c18d352af 安装libcurl和openssl库,然后使用以下命令编译和运行程序: gcc -o curl_wrapper curl_wrapper.c -lcurl -lssl -lcrypto ./curl_wrapper -X GET "https://api.dandanplay.net/your/url/path"

GO版本 https://github.com/zhongfly/dandanplay exe体积1.6M,我只简单了测试了,似乎是可用的

OK,我参考着看看

@Tony15246
Copy link
Owner Author

c语言程序昨晚就实现了,上午折腾了一阵子的交叉编译,好不容易把windows平台的可执行文件编译出来了,结果只有动态编译能成功,静态编译一直报错。但要是不进行静态编译,可执行文件就没法不需要任何额外依赖就独立运行。

我还把老家表弟的windows电脑都借过来了,结果连动态编译都编译不出来。Linux上交叉动态编译出来的可执行exe文件执行的时候报错缺少dll动态库。

Linux平台上代码编译、可执行文件运行都正常。c语言跟windows的相性也太差了,我要被折腾吐了😭

@dyphire
Copy link
Collaborator

dyphire commented Jan 25, 2025

c语言程序昨晚就实现了,上午折腾了一阵子的交叉编译,好不容易把windows平台的可执行文件编译出来了,结果只有动态编译能成功,静态编译一直报错。但要是不进行静态编译,可执行文件就没法不需要任何额外依赖就独立运行。

我还把老家表弟的windows电脑都借过来了,结果连动态编译都编译不出来。Linux上交叉动态编译出来的可执行exe文件执行的时候报错缺少dll动态库。

Linux平台上代码编译、可执行文件运行都正常。c语言跟windows的相性也太差了,我要被折腾吐了😭

那就先合并此 PR 实现吧,让用户先使用上

后面可以再替换方案

@dyphire dyphire merged commit 4494b92 into main Jan 25, 2025
@dyphire
Copy link
Collaborator

dyphire commented Jan 25, 2025

GO版本 https://github.com/zhongfly/dandanplay exe体积1.6M,我只简单了测试了,似乎是可用的 update: 用一种扭曲的方法实现了编译时注入凭证

Linux平台上代码编译、可执行文件运行都正常。c语言跟windows的相性也太差了,我要被折腾吐了😭

其实他这个 go 的实现在 Windows 编译很简单,go 的静态编译很省事

@dyphire
Copy link
Collaborator

dyphire commented Jan 25, 2025

GO版本 https://github.com/zhongfly/dandanplay exe体积1.6M,我只简单了测试了,似乎是可用的 update: 用一种扭曲的方法实现了编译时注入凭证

Linux平台上代码编译、可执行文件运行都正常。c语言跟windows的相性也太差了,我要被折腾吐了😭

其实他这个 go 的实现在 Windows 编译很简单,go 的静态编译很省事

试了下这个实现确实可用,感觉合并早了。改成他这个在 linux 上编译下如何?

@zhongfly
Copy link

zhongfly commented Jan 25, 2025

GO版本 https://github.com/zhongfly/dandanplay exe体积1.6M,我只简单了测试了,似乎是可用的 update: 用一种扭曲的方法实现了编译时注入凭证

这个go语言版,只用到自带的标准库,估计go支持的平台都能编译成功。
如果考虑Windows7兼容性,可以把go版本调低点,AI示例是用go的1.16版的

@Tony15246
Copy link
Owner Author

Tony15246 commented Jan 25, 2025

GO版本 https://github.com/zhongfly/dandanplay exe体积1.6M,我只简单了测试了,似乎是可用的 update: 用一种扭曲的方法实现了编译时注入凭证

Linux平台上代码编译、可执行文件运行都正常。c语言跟windows的相性也太差了,我要被折腾吐了😭

其实他这个 go 的实现在 Windows 编译很简单,go 的静态编译很省事

试了下这个实现确实可用,感觉合并早了。改成他这个在 linux 上编译下如何?

可以。唯一的问题是我对go语言一窍不通😂

不过问题也不大,只是编译一下而已。我下午现学一下go怎么用,编译出来测试一下看看。

@dyphire
Copy link
Collaborator

dyphire commented Jan 25, 2025

GO版本 https://github.com/zhongfly/dandanplay exe体积1.6M,我只简单了测试了,似乎是可用的 update: 用一种扭曲的方法实现了编译时注入凭证

这个go语言版,只用到自带的标准库,估计go支持的平台都能编译成功。 如果考虑Windows7兼容性,可以把go版本调低点,AI示例是用go的1.16版的

不需要考虑 Win7,因为 mpv 好几个版本前就不支持了

@zhongfly
Copy link

zhongfly commented Jan 25, 2025

可以。唯一的问题是我对go语言一窍不通😂

不过问题也不大,只是编译一下而已。我下午现学一下go怎么用,编译出来测试一下看看。

安装go语言,然后运行命令编译main.go代码:

go build -ldflags="-s -w" -o xxxx编译结果文件名 main.go

其中包含了 -ldflags 选项来传递链接器标志。具体来说,-s 和 -w 标志用于优化构建的二进制文件大小。

-s:省略符号表。这会移除符号表,可以减少二进制文件的大小,但会导致调试信息缺失,无法使用 gdb 等调试工具进行调试。
-w:省略调试信息。这会移除 DWARF 调试信息,进一步减少二进制文件的大小。

因此,go build -ldflags="-s -w" 命令会生成一个更小的二进制文件,但该文件缺少调试信息和符号表,适合在生产环境中使用。

另外可以使用upx进一步压缩程序体积

@Tony15246
Copy link
Owner Author

可以。唯一的问题是我对go语言一窍不通😂

不过问题也不大,只是编译一下而已。我下午现学一下go怎么用,编译出来测试一下看看。

安装go语言,然后运行命令编译main.go代码:


go build -ldflags="-s -w" -o xxxx编译结果文件名 main.go

其中包含了 -ldflags 选项来传递链接器标志。具体来说,-s 和 -w 标志用于优化构建的二进制文件大小。

-s:省略符号表。这会移除符号表,可以减少二进制文件的大小,但会导致调试信息缺失,无法使用 gdb 等调试工具进行调试。

-w:省略调试信息。这会移除 DWARF 调试信息,进一步减少二进制文件的大小。

因此,go build -ldflags="-s -w" 命令会生成一个更小的二进制文件,但该文件缺少调试信息和符号表,适合在生产环境中使用。

另外可以使用upx进一步压缩程序体积

谢谢,我吃完饭研究一下

@zhongfly
Copy link

zhongfly commented Jan 25, 2025

https://github.com/zhongfly/dandanplay/blob/main/.github/workflows/main.yml
直接用github action编译windows/linux amd64的,arm的环境还在公测,有需要的话也可以加

密钥设置:
进入仓库的settings -> secrets -> actions -> Repository secrets,分别添加2个secret,名称分别为:AppId和AppSecret

如果没问题的话,可以直接把这些代码都放进本仓库(单独仓库也行)
这样的话有人想自己申请密钥自己用也是可行的

注意:url必须在命令行参数最后

update: 这个程序post数据似乎和curl不一样?
在powershell中需要用 单引号 包裹整个字符串,用\反义内部的 双引号 :dandanplay.exe -X POST -H 'Content-Type: application/json' -d '{\"login\":\"my_login\",\"password\":\"my_password\"}' https://echo.free.beeceptor.com这样才能正确发送json
cmd中也很奇怪需要用 双引号 包裹整个字符串,用\反义内部的 双引号 :dandanplay.exe -X POST -H 'Content-Type: application/json' -d "{\"login\":\"my_login\",\"password\":\"my_password\"}" https://echo.free.beeceptor.com

@Tony15246
Copy link
Owner Author

Tony15246 commented Jan 25, 2025

update: 这个程序post数据似乎和curl不一样? 在powershell中需要用 单引号 包裹整个字符串,用\反义内部的 双引号 :dandanplay.exe -X POST -H 'Content-Type: application/json' -d '{\"login\":\"my_login\",\"password\":\"my_password\"}' https://echo.free.beeceptor.com这样才能正确发送json cmd中也很奇怪需要用 双引号 包裹整个字符串,用\反义内部的 双引号 :dandanplay.exe -X POST -H 'Content-Type: application/json' -d "{\"login\":\"my_login\",\"password\":\"my_password\"}" https://echo.free.beeceptor.com

bash和zsh里下面这两种写法都可以正常运行,行为和curl无区别。这应该只是终端本身语法的差异吧,到时候参数字符串是由mpv通过subprocess传递的,我觉得应该是不存在引号和转义的问题。

➜ ./dandanplay -H 'Accept: application/json' -H 'Content-Type: application/json' -d "{\"fileName\":\"Nekomoe_kissatenDosanko_Gal_wa_Namara_Menkoi01 1080pJPSC\",\"fileHash\":\"8a9cfbdb03c35ac028e14ffd79eeceee\",\"matchMode\":\"hashAndFileName\"}" -X POST 'https://api.dandanplay.net/api/v2/match'
{"isMatched":true,"matches":[{"episodeId":176820001,"animeId":17682,"animeTitle":"北海道辣妹贼拉可爱","episodeTitle":"第1话 北海道辣妹贼拉可爱","type":"tvseries","typeDescription":"TV动画","shift":0}],"errorCode":0,"success":true,"errorMessage":""}%                                                                                                                                                                           
➜ ./dandanplay -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"fileName":"Nekomoe_kissatenDosanko_Gal_wa_Namara_Menkoi01 1080pJPSC","fileHash":"8a9cfbdb03c35ac028e14ffd79eeceee","matchMode":"hashAndFileName"}' -X POST 'https://api.dandanplay.net/api/v2/match'
{"isMatched":true,"matches":[{"episodeId":176820001,"animeId":17682,"animeTitle":"北海道辣妹贼拉可爱","episodeTitle":"第1话 北海道辣妹贼拉可爱","type":"tvseries","typeDescription":"TV动画","shift":0}],"errorCode":0,"success":true,"errorMessage":""}%   

@Tony15246
Copy link
Owner Author

Tony15246 commented Jan 25, 2025

https://github.com/zhongfly/dandanplay/blob/main/.github/workflows/main.yml 直接用github action编译windows/linux amd64的,arm的环境还在公测,有需要的话也可以加

密钥设置: 进入仓库的settings -> secrets -> actions -> Repository secrets,分别添加2个secret,名称分别为:AppId和AppSecret

如果没问题的话,可以直接把这些代码都放进本仓库(单独仓库也行) 这样的话有人想自己申请密钥自己用也是可行的

linux上经测试,编译运行也都无问题。

@dyphire 我们给这个仓库加一个workflow,还是本地编译二进制文件上传到代码里呢?

用流水线的一个小问题是,用户下载插件的时候是不是会下载下来一个莫名其妙的main.go文件和.github隐藏文件夹?

编辑:或许可以吧main.go放在bin/dandanplay/文件夹底下,和dandanplay以及dandanplay.exe两个可执行文件并列。.github文件夹本来就是隐藏文件夹,存在感应该不会太强。

编辑:要不然先用上新可执行文件吧。加不加流水线可以后面再说,现在这个仓库的体积太吓人了,30多M😂

@dyphire
Copy link
Collaborator

dyphire commented Jan 25, 2025

@dyphire 我们给这个仓库加一个workflow,还是本地编译二进制文件上传到代码里呢?

用流水线的一个小问题是,用户下载插件的时候是不是会下载下来一个莫名其妙的main.go文件和.github隐藏文件夹?

编辑:或许可以吧main.go放在bin/dandanplay/文件夹底下,和dandanplay以及dandanplay.exe两个可执行文件并列。.github文件夹本来就是隐藏文件夹,存在感应该不会太强。

嗯,把 main.go 放在bin/dandanplay/文件夹底下,然后添加个 workflow 工作流吧。这样用户可以选择 fork 后改用自己的凭证

dyphire added a commit to dyphire/uosc_danmaku that referenced this pull request Jan 25, 2025
fix: integration with dandanplay API changes Tony15246#114
dyphire added a commit to dyphire/uosc_danmaku that referenced this pull request Jan 25, 2025
fix: integration with dandanplay API changes Tony15246#114
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

弹弹play接口使用政策改版,部分功能不可用,等待弹弹play官方发放应用凭证中
4 participants