创新路
我们一直在努力

点歌送祝福应用开发

试玩可以关注下面的公众号

点歌应用应该是微信公众号开发中比较简单的功能之一,按照指定回复的功能返回合适的参数就算完成了。但是在使用现有的功能时发现有一些问题,右侧播放,左侧点击进入时空白,如果能把左侧利用起来,是不是可以作为祝福页呢?

点歌分析

原来的点歌应用返回的是一个固定的音乐链接,这个就是问题的根源,为了实现我的点歌送祝福功能,我把链接尝试返回一个动态链接,但是动态链接如何判断他是点击了播放还是查看呢?

关键在于 UserAgent ,很多时候这个都是解决问题的突破口,分析请求协议的时候发现他们的 UserAgent 是不一致的,这个就很容易了啊,需要什么输出什么?

Mozilla/5.0 (Linux; Android 5.1; m2 note Build/LMY47D; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043024 Safari/537.36 MicroMessenger/6.5.6.1020 NetType/WIFI Language/zh_CN

Dalvik/2.1.0 (Linux; U; Android 5.1; m2 note Build/LMY47D) Built-in music  MicroMessenger/6.5.6.1020

WeChat/6.5.5.32 CFNetwork/758.5.3 Darwin/15.6.0

问题又来了,苹果的为什么会出现问题?苹果的 UserAgent 不同于 安卓,抓取苹果的 UserAgent 多一次判断。
这个不在于设备,在于公众号中的一个判断,如果是认证服务号,认证服务号会跳转至授权页面获取授权,祝福页面本身就是页面,授权不受影响,音乐却不行,授权就不能正常播放了,利用源程序中的参数来跳过这一步即可。

歌曲来源

一开始我分析准备使用 QQ 音乐的数据,但是在是用的时候由于程序判断逻辑的问题,导致我以为不支持音乐格式 m4a ,于是就尝试分析其它平台的音乐数据。
下一个目标是百度音乐,因为它很多歌曲使用的是 MP3 格式,所有的准备工作都做好了,又发现它的搜索也不是那么智能,也许是因为资源的问题,没有合适的资源就按照类似的资源给你进行推送,很多人使用时返回的歌曲都不是自己想要的。
还看了一下网易云音乐的,只有PC端,这个就很不好弄了,如果要分析请求协议一般建议从WAP端入手,实在不能解决问题的情况下再来分析PC端的请求协议。
关键字搜索歌曲,肯定需要搜索接口:

https://c.y.qq.com/soso/fcgi-bin/search_for_qq_cp?g_tk=5381&uin=0&format=jsonp&inCharset=utf-8&outCharset=utf-8&notice=0&platform=h5&needNewCode=1&w=w&zhidaqu=1&catZhida=1&t=0&flag=1&ie=utf-8&sem=1&aggr=0&perpage=20&n=20&p=1&remoteplace=txt.mqq.all&_=time&jsonpCallback=jsonp

通过上述接口可以拿到歌曲ID,下一步就是获取歌曲信息

http://c.y.qq.com/v8/playsong.html?songmid=songmid

最后程序问题解决了,发现 QQ音乐 的m4a格式是支持的,也就重新换回了 m4a 格式。

问题来了

  • MusicUrl 与 HQMusicUrl
    在wifi环境下优先使用HQMusicUrl,普通网络情况下使用MusicUrl。

  • 认证服务号安卓播放音乐时需要获取授权
    不能正常使用播放音乐功能,这个上线不久就有用户反馈这个问题,但是一直苦于没有认证服务号,不能很好的重现问题,让有问题的用户分享歌曲给我,我抓取协议后分析发现是网页授权的问题,但是为什么苹果手机没有问题呢?为什么查看左侧祝福没有问题呢?

在用户的帮助下,使用他的程序调试了一下,发现问题还是问题,只是服务号类型的问题,我把我的测试号的类型选择了认证服务号,问题就出现了,会提示我去认证。由于左侧是祝福会静默授权,然后跳转,即使是获取用户信息的授权也无所谓,但是音乐这个不一样,苹果没有跳转至授权这一步,安卓在这一步返回了错误信息。

已经通过框架程序中的参数跳过验证。

未经允许不得转载:天府数据港官方信息博客 » 点歌送祝福应用开发

客官点个赞呗! (1)
分享到:

评论 抢沙发

评论前必须登录!

天府云博 - 做有态度的开发&运维&设计学习分享平台!

联系我们百度云主机