php怎么写歌曲评论,如何查出一个人写的所有网易云音乐评论

用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,但如何在这么海量的评论里找出一个人写的评论呢?并把这个人写的所有评论爬取出来呢?下面是开发实例,如果不是开发人员,有需要可以找我帮忙查,欢迎一起探讨提供更好的方法。

2809c78a1fc3

具体实践

接口分析

思路想好了,就去做,首先肯定是分析接口,结果却发现接口发生了变化,之前的接口是不进行加密的,现在的接口每次的请求都带上了 encSecKey 和 params 参数,显然是加密了,于是在Github上发现了这个,网易云音乐新版WebAPI分析,是Python实现的,重要的部分是aesEncrypt和rsaEncrypt两个加密的部分,完成这部分之后呢,后续工作就简单的多了。

2809c78a1fc3

实践方案

考虑到用户歌单歌曲数量比较多的情况,在爬取歌曲评论的过程中,开启多进程爬取是必要的,但又考虑到机器性能的原因,队列执行爬取功能也是必须的,不然机器可能在进程爆满的情况效率各方面实在是堪忧啊。

为了考虑以后其它新功能的开发,在此采用了Laravel5.4+PHP7.1环境下的开发,一方面是Laravel开发的效率,另一方面Laravel在我提到的几个问题上面都有相应的解决方案,数据的爬取则是采用了Laravel的artisan命令行,对于多进程则是采用了进程控制扩展PCNTL,但同时这个多进程爬取的过程则是放到了redis驱动下的队列中,同时使用了Supervisor进行队列的监控,整个代码我已经开放到Github。

clone 下来后配置完成后执行:

2809c78a1fc3

也就是说我们只要通过模拟浏览器向网易云服务器发送post请求就能获得评论!

这里还要注意这个post的链接,R_SO_4_ 之后跟的一串数字实际上就是这首歌曲对应的id;而且这里需要传入的参数,也得好好分析一下(在后面)

所以现在目标就是:找到最新的所有歌单 -> 对每一个歌单,遍历其中的所有歌曲,获取网页源码中的所存在歌曲的id->对每一个首歌曲通过其id,向服务器post请求(带上参数),得到想要的评论

2809c78a1fc3

2809c78a1fc3

这里还有一个判断,根据评论总条数除以每页20条的评论,判断是否有余数,可以获得最终评论的总页数,并且我们也可以发现,热门评论只在第一页.传入三个参数,分别为comment_TatalPage ,postUrl, headers1,对应评论总页数,postUrl就是postUrl…以及请求头对第一页获取热评以及评论,对其他页获取普通评论;以及获取其他数据,添加到列表中

2809c78a1fc3

这一步的目的就是获取歌单里歌曲的id,遍历对每一个歌曲(即对应的id),获取其歌曲的url,歌曲名;根据id,构造postUrl 通过对第一页的post(关于如何post得到想要的信息,在后面会讲到),获取评论的总条数,及总页数;以及调用获取歌曲评论的方法;

2809c78a1fc3

这里的getPostApi函数传入的三个参数分别为,页数(因为每页的post附带的参数params不相同),postURL以及请求头;

这里data=param,就是需要的参数

然后在fiddler中重定向core.js,修改本地core.js的内容,可以打印上面的参数,结果第一次可以在控制台看到打印的结果

php artisan netease:playlist 123456

将123456替换成网易云音乐用户的 id,等待结束后,表 user_comments 就能看到用户的评论了。

2809c78a1fc3

具体操作可以查看README.md感兴趣的同学可以试着玩一玩,如果不是开发人员,可以私信我来爬取后再发给你,后续我会开发出线上的功能供大家使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值