新插件: netease-cloud-music.el (网易云音乐)

eval_in_emacs 可以获得 ELisp 的返回值吗?
或者 Python 里如何获取 Emacs 中的变量?

netease-api-request 中不使用 :sync t 的话它会获取上一次的 request 请求 (该函数通过 json 输出到 buffer 上来获取数据),emacs-request 我也不是很懂,我有时间再研究研究吧。

哈哈,玄学

检查 eaf-var-list 的用法

1 个赞

花了点时间研究了一下,给 eaf-var-list 改进了一下, eaf-setq 现在能够使用 list 类型的值了。Python 里面通过 list_string_to_list 函数进行转化类型。这下交互问题就解决了,我昨天愁的就是这个传值的功能。

Emacs端与 Python 等的交互啥的已经 OK ,正在使用中,感觉挺不错。明天开始加入快捷键、switch-mode, write-mode 等,然后打算先公测一波,试试有没有 BUG。再加入 UnblockNetease。

近几天 netease-cloud-music.el 仓库的提交都可忽略,基本没有对以前 BUG 的补丁,都是适配 EAF 的。

3 个赞

后端是不是npm可以一键安装?

netease-cloud-music.el 还是得手动克隆
不过等完善之后我就准备加到 MELPA 上了

等下,你说得后端是哪个? 第三方 API ,插件,还是 UnblockNetease

我的意思,EAF这边除了elisp插件,其他是否可以通过npm一键安装?

到时候应该会用一个 Elisp 函数来一键安装

EAF 版客户端已经 OK ,接下来只剩下 UnblockNetease ,可以 fetch 这个仓库 来体验

此次 EAF 客户端还更新了如下功能:

通过歌曲/歌单前的数字进行播放/选择等操作

6 个赞

给EAF发一个PR?我这两天有空来合并一下。

行,后面再加 UnblockNetease 后我再提一个 PR 吧

修复了添加歌单、更改歌单名称中文乱码的问题,需要使用本人的 API 才可解决

1 个赞

PR 合并了,但是EAF打开是一个空列表。

直接运行 netease-cloud-music 命令显示错误 progn: Opening input file: 没有那个文件或目录, /home/andy/.emacs.d/ncm-playlist

不晓得怎么开始。

这个 base64 的 decode 一定得在 server 上完成么?emacs 不可以么?因为我看你的代码里 base64 encode 有部分是在 emacs 里做的。

(decode-coding-string (base64-decode-string 
  (base64-encode-string (encode-coding-string "我" 'utf-8)))
  'utf-8)

这样是可以把多字节给加/解码的(就是不知道在 server 上传上去或拉下来有没有用)。

另外,eaf 像 tui 一样可以拆开就好了,毕竟不是所有人都用 eaf 的。现在虽然可以正常用,但他们是包在一个文件里的。

要跑一下 netease-cloud-music-download-api,或者人工把 netease-cloud-music-api-repo 拉进 netease-cloud-music-api-dir,现在代码里面没有自动触发这个(其实是文档没有写,不看代码不知道怎么准备前置的东西

我试过直接在 Emacs 里完成,编码后依旧会乱码。最后发现是 Emacs 把名称传给 API 的时候乱码了,因此先在 Emacs 端编码,后在 API 端解码,以防止乱码

这个主要是很多函数需要在调用核心文件后进行 EAF 端同步的,如果重新写函数或者写 advice 会特别麻烦。在核心文件里的那些函数关于 EAF 的命令都用了 (netease-eaf) 宏进行了包裹,它会判断现在是 EAF 前端还是 TUI。所以不用担心。

关于这个问题我刚刚已经写了个补丁推送了(netease-cloud-music.el的补丁),启动的时候不会报错了。

只要在 Local Playlist 里添加歌曲文件就会自动生成,我后期会在文档中说明

我试过直接在 Emacs 里完成,编码后依旧会乱码。最后发现是 Emacs 把名称传给 API 的时候乱码了,因此先在 Emacs 端编码,后在 API 端解码,以防止乱码

我试了一下,不是 emacs 的问题,是 curl 的问题。

curl -c cookie.jar  'http://localhost:3000/login/cellphone?phone=<phone>&md5_password=<pwd>&countrycode=86'
curl -b cookie.jar 'http://localhost:3000/playlist/create?name=测试' # 乱码
curl -b cookie.jar 'http://localhost:3000/playlist/create?name=%E6%B5%8B%E8%AF%95' # 正常的

原因是 http 请求中的字符要转码,这是标准(rfc3986,好像是这个)。就是写 S/C 时会用的 urldecode 和 urlencode。平时的浏览器和一些请求库会自动做,但 curl 不会(

emacs 是里 (url-encode-url "测试") 这样应该就行了

P.S. 因为返回内容是在 body 里,而且不是 url form content,所以不需要 urldecode

1 个赞

API 的最新一次提交被删除了,netease-cloud-music.el 最新提交使用了(url-encode-url)