由于QQ版本更新,现在在很多地方小卡片的显示都会出故障。现在点歌可能只会返回连接了。这个bug的修复可能得等比较长的一段时间。

使用教程

第一次使用

  • 将文件下载并解压
  • WisteriaMusic.lua放置于.../Dice[你的QQ号]/plugin目录下
  • json.lua放置于.../Diceki/lua/目录下,没有这个目录就新建文件夹建出来,如果同时安装了其他的需要json.lua的插件,只需要任意保留一个json.lua
  • 如果json.lua莫名其妙有哪里不对劲——》(【教程】json.lua第三方库的下载及使用)[https://forum.kokona.tech/d/978-jiao-cheng-json-luadi-san-fang-ku-de-xia-zai-ji-shi-yong/9]
  • 重启或.system load

更新版本

  • 只用下载WisteriaMusic.zip
  • WisteriaMusic.lua放置于.../Dice[你的QQ号]/plugin目录下,旧版本的WisteriaMusic.lua删去。或者直接将这里面的代码全部复制,替换原本的WisteriaMusic.lua里面的代码唔,还是请直接下载文件然后放进去。如果出问题可以试试把编码改成utf-8,这可能会解决一些问题

基础使用

  • .music black river killer //网易云搜索指定歌曲,返回第一个非vip结果的分享
  • .music black river killer-Blitzen Trapper //搜索指定作者的歌曲
  • .music black river killer#2 //获取搜索页面第三首歌曲
  • 版本要求>590(感谢タブー術因为这份教程大部分都是抄的)

更新日志

ver0.2

  • 替换了好心人aphonic找到的api后,搜索结果变得正常,也支持一定限度的带作者搜索。
  • 解决了搜索结果为vip无法播放的问题(会找到第一个不是vip的歌曲)
  • 支持指定获取第几首搜索到的歌曲

已知问题

  • 电脑端qq图片无法正常显示,有些歌曲无法发送卡片只能是链接形式,
  • 有时候找到的音乐会很怪更新了接口之后结果和官方客户端搜索结果差不多了
  • 返回的分享卡片里面只会有第一个作者
  • 很少见的情况下会出现vip歌曲识别误差

发布

感谢myr大佬跟我讲qq音乐有原生的搜索api,过段时间会写(咕)
当前版本ver0.2

json.zip
3kB
wisteriamusic-ver02.zip
5kB

实际上想写的是可以记录bgm、根据网易云音乐歌单生成bgm列表的功能,可能遥遥无期了

代码

或许可以作为发送带中文get请求的参考模板,代码如下

msg_order = {}

function encodeURI(s) --对传入参数编码,兼容中文
    s = string.gsub(s, "([^%w%.%- ])", function(c) return string.format("%%%02X", string.byte(c)) end)
    return string.gsub(s, " ", "+")
end

msg_order[".music"]="getMusic"
function getMusic(msg)--点歌函数本体
    local rest = string.match(msg.fromMsg,"^[%s]*(.-)[%s]*$",7)--从传过来的指令匹配歌名
    
    --匹配偏移量,往匹配到的搜索歌曲上去除偏移量
    local offsetstring = string.match(rest, "#(.*)")
    local offset
    local isOffset=0
    if(offsetstring~=nil) then --存在偏移
        offset=tonumber(offsetstring)
        rest = string.match(rest,"(.*)#"..offsetstring)
        isOffset=1
    else
        offset=0
    end
    
    local api="http://music.163.com/api/search/pc?s="
    local polar=""
    
    if(rest and #rest>0)then
        rest=encodeURI(rest)--编码
        polar=api..rest.."&type=1&limit=1&offset="..offset--拼接
    else--空参,返回默认说明文字
        return"你在落满尘埃的书架上找到了一张漆黑的唱片,上面写着……\nWisteriaMusic by 32w ver0.2,发布于Dice!论坛,访问论坛以获得最新版本\n.music black river killer   //网易云搜索指定歌曲,返回第一个非vip结果的分享\n.music black river killer-Blitzen Trapper   //搜索指定作者的歌曲\n.music black river killer#2   //获取搜索页面第三首歌曲\fver0.2更新日志\n· 替换了好心人aphonic找到的api后,搜索结果变得正常,也支持一定限度的带作者搜索。\n· 解决了搜索结果为vip无法播放的问题(会找到第一个不是vip的歌曲)\n· 支持指定获取第几首搜索到的歌曲"
    end
    
    json=require "json"
    res,data = http.get(polar)--访问api获取点歌所得信息
    local j=json.decode(data)
    
    if(j.result.songCount~=0) then--若找到了这首歌,即里面的songCount不等于0
        if(j.result.songs[1].fee==1) then--90%是vip歌曲
            if(isOffset==1) then --点歌指定了偏移量,直接返回信息
                return "对应位置为vip歌曲,无法播放"
            else --未指定偏移量,查找,直到找到第一个非vip歌曲
                while(j.result.songs[1].fee==1) do
                   offset=offset+1
                   polar=api..rest.."&type=1&limit=1&offset="..offset
                   res,data = http.get(polar)--访问api获取点歌所得信息
                   j=json.decode(data)
                   
                   --print(polar)
                end
            end
        end--会优化(应该会……)
                
        local songid=j.result.songs[1].id--这首歌对应的id,由此可以拼接得到播放地址
        
        local songname=j.result.songs[1].name
        local singername=j.result.songs[1].artists[1].name
        local img=j.result.songs[1].album.picUrl
        local songurl="http://music.163.com/song/media/outer/url?id="..songid
        local songpageurl="https://music.163.com/#/song?id="..songid

        return "[CQ:xml,data=<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><msg serviceID=\"2\" templateID=\"1\" action=\"web\" brief=\"&#91;♫&#93;"..songname.."\" sourceMsgId=\"0\" url=\""..songpageurl.."\" flag=\"0\" adverSign=\"0\" multiMsgFlag=\"0\" ><item layout=\"2\"><audio cover=\""..img.."\" src=\""..songurl.."\" /><title>"..songname.."</title><summary>"..singername.."</summary></item></msg>]"
    else
        return "银色的藤蔓将唱片拖入了空间的缝隙中,未能取得对应歌曲"
    end
    
end

    大佬你解决了困扰孩子好久的中文转码问题。

      shinki 不用谢w,我也研究了很久才发现要再编码一道

      请问同名歌曲能否区分点歌呢(我试过了后面加上作者,是不行的)

        建好过后出现回复被屏蔽的情况,可能和图片屏蔽有关吧qwq
        但私聊是没问题的

          Whaledoll 目前是不行的,等我找到或者搭一个更好的api,那时候就行了

          问问回复这个是什么原因qwq
          调用E:\Mirai\DICE271\plugin\WISTER1.LUA函数getMusic失败!
          E:\Mirai\DiceQQ号\plugin\json.lua:184: unexpected character ‘�’ at line 1 col 1

            Cobalt 嗯…是解析返回的json数据出错,可能是没搜到,其他歌可以吗?我这边是可以正常使用的

              Qwekkx 都不可以,我尝试了中文日语韩文英文歌名都是这个回复

                先感恩楼主的代码参考,后来我更换了这个网页的api
                似乎是pc端的,测试下来搜索结果应该和app是一致的,而且用歌名+歌手的关键词可以比较精准地搜索歌曲,有需求的可以试试看(编码的函数里需要把空格换回+)
                如果还没搜到就是官方api接口逻辑的锅

                  aphonic 老师!请问手机端可以做得到吗?!或者说,该怎么更改原有代码里的api。