批量关注掘金用户

1,115 阅读2分钟

一、背景

作为一个掘金小透明,就是把日常碰到的问题在掘金上记录一下,突然有一天看到有人加我关注了,十分好奇的点进去,结果看到浮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:不过还是很好奇官方设置的关注数量上限是多少,不知道有没有大佬能告知的)