一、背景
作为一个掘金小透明,就是把日常碰到的问题在掘金上记录一下,突然有一天看到有人加我关注了,十分好奇的点进去,结果看到浮x尘 的【如何关注掘金的所有小伙伴】,才明白原来是被扫出来的。
不过看到可以关注这么多人也是很羡慕的,看到大佬是用go语言写的,心想有时间的话我要使用PHP实现一下!
二、步骤
一、先对掘金的页面展示逻辑进行观察,竟然是通过接口返回的JSON,不用使用麻烦的正则去匹配数据了
二、实现思路
(1)首先考虑的是从首页的文章逐条进行分析,把评论者获取出来,但是想了想这样没有办法获取所有的用户哎,
(2)接下来考虑像大佬所说的,用户的互相关注构建出用户网络,这样比较靠谱!
(3)突然想到大佬已经将大部分用户关注了,所以我不用弄什么用户网络了,直接把大佬的关注用户加一遍就行!!
三、分析接口,掘金的加关注接口和获取用户列表都是很简单的....再此就不赘述了
四、编码(其实确定了实现思路后就十分简单了)
<?php
//关注接口参数
$followData = array(
'follower' => '59bf3ba9518825231f64bd05', //请求用户id(我)
'token' => '', //cookie中的auth
'device_id' => '1536978978521', //这个不太清楚是啥
'src' => 'web', //来源
'followee' => '' //申请关注人id
);
//关注人列表参数
$userList = array(
"uid" => "58a15cc70ce463005644171a", //当前用户id(大佬)
"currentUid" => "59bf3ba9518825231f64bd05",//请求用户id(我)
"src" => "web", //来源
"before" => '' //关注时间,每次返回这个时间之后的列表
);
$followUrl = 'https://follow-api-ms.juejin.im/v1/follow'; //关注接口
$userListUrl = 'https://follow-api-ms.juejin.im/v1/getUserFolloweeList'; //关注人列表接口
$flag = true;
while ($flag) {
$data = file_get_contents($userListUrl);
$followList = json_decode($data, true)['d'];
if (count($followList) == 0) {
$flag = false;
}
foreach (json_decode($data, true)['d'] as $value) {
$userList['before'] = $value['updatedAtString'];
$followData['followee'] = $value['followee']['objectId'];
file_get_contents($followUrl . "?" . http_build_query($followee));
}
$userListUrl = $userListUrl . "?" . http_build_query($userList);
}
五、后记
首先要感谢掘金,也没啥反爬虫的措施以及接口返回JSON带来的极大便利
接下来就是等脚本跑完坐拥关注6w的掘金小伙伴的成果,哈哈哈哈
在跑了1w左右的时候就已经发现有些小伙伴已经反向关注我了,好开心
------------分割线------------
由于写的脚本比较简单然后异常中断了,又加上放假,所以截止到放假前共关注了2w+用户,今天又将脚本开起来了,在关注到4w+用户后,继续加关注竟然提示:关注数达到上限。。。。应该是官方做了限制了。。。不过关注这么多也很心满意足了。
(ps:不过还是很好奇官方设置的关注数量上限是多少,不知道有没有大佬能告知的)