• [JS真好玩] 掘金创作者必备: 监控每天是谁取关了你?


    我是HullQin,公众号线下聚会游戏的作者(欢迎关注公众号,发送加微信,交个朋友),转发本文前需获得作者HullQin授权。我独立开发了《联机桌游合集》,是个网页,可以很方便的跟朋友联机玩斗地主、五子棋等游戏,不收费没广告。还开发了《Dice Crush》参加Game Jam 2022。喜欢可以关注我 HullQin 噢~我有空了会分享做游戏的相关技术。

    背景

    他在沸点说:「我这么好你还舍得取关我,那我什么时候能成为百万粉丝博主?」

    1.png

    如果有人取消关注了你,你一定想知道是谁吧!

    掘金没告诉你是谁取关了你,今天我来告诉你,是谁取关了你。

    思路如下:

    • 获取你当前的粉丝列表,保存到本地。
    • 第二天,再次获取列表,看看少了谁,同时更新本地粉丝列表。
    • 后续每一天,重复第二天的操作。

    抓包看请求

    看过我这专栏的人已经学会抓包了吧!学会Copy as fetch了吗?

    没看过的,在这里学:《遇到表格,手动翻页太麻烦?我教你写脚本,一页展示所有数据》。

    点击这里,查看所有关注者:

    2.png

    就是这个请求,对它进行Copy as fetch操作:

    3.png

    循环,获取粉丝列表

    以下代码,需要在掘金页面的Console里运行,否则不会带cookie的。

    // 不能给掘金太大压力,我们定义个sleep函数,1秒请求一次就好
    const sleep = async () => new Promise(resolve => setTimeout(resolve, 1000));
    // 获取所有新增粉丝,保存到followers。
    const getFollowers = async () => {
      const followers = {};
      console.log('开始读取你的粉丝啦');
      for (let i = 0; i < 100; i++) {
        const res = await fetch("https://api.juejin.cn/user_api/v1/follow/followers?aid=改成你的&uuid=改成你的&user_id=改成你的&cursor=" + i * 20 + "&limit=20", {
          "headers": {
            "content-type": "application/json",
          },
          "referrer": "https://juejin.cn/",
          "referrerPolicy": "strict-origin-when-cross-origin",
          "body": null,
          "method": "GET",
          "mode": "cors",
          "credentials": "include"
        });
        const data = await res.json();
        const result = data.data.data;
        result.forEach(fan => {
          followers[fan.user_id] = fan.user_name;
        });
        // 如果该页数量少于20,说明是最后一页,结束循环
        if (result.length < 20) break;
        // 不能给掘金太大压力,我们1秒请求一次就好
        await sleep();
      }
      console.log('读取完毕你的粉丝啦');
      return followers;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    调用函数await getFollowers()即可发请求,并返回现在的粉丝列表。

    保存到LocalStorage

    相信大家对浏览器的localStorage一定不会陌生!我们定义一个key,叫做my_followers,专门用来存储我们的粉丝。

    因为localStorage只能存储字符串,我们用JSON序列化一下。

    // 利用localStorage在本地记录所有粉丝
    const FOLLOWER_KEY = 'my_followers';
    const followers = await getFollowers();
    localStorage.setItem(FOLLOWER_KEY, JSON.stringify(followers));
    
    • 1
    • 2
    • 3
    • 4

    第二天,再获取列表,跟昨天的粉丝diff一下

    获取老粉丝,用localStorage中的数据。

    获取新粉丝,重新调用await getFollowers()即可。

    const FOLLOWER_KEY = 'my_followers';
    const oldFollowers = JSON.parse(localStorage.getItem(FOLLOWER_KEY) || '{}');
    const newFollowers = await getFollowers();
    
    • 1
    • 2
    • 3

    问题来了,我们要找出取消关注的粉丝,那么只要遍历oldFollowers,看他们还在不在newFollowers里面即可,在的,就是老粉,不在的,就上暗杀名单。

    const badFollowers = Object.keys(oldFollowers).filter(fan => !(fan in newFollowers));
    
    • 1

    记得更新今日最新粉丝名单:

    localStorage.setItem(FOLLOWER_KEY, JSON.stringify(newFollowers));
    
    • 1

    一些名单

    输出暗杀名单

    console.log(badFollowers.map(id => oldFollowers[id]));
    
    • 1

    大家别上暗杀名单噢!

    输出帅哥美女的名单

    console.log(Object.values(newFollowers));
    
    • 1

    每天看看是谁那么帅那么美!

    输出今日变帅变美的人的名单

    const goodFollowers = Object.keys(newFollowers).filter(fan => !(fan in oldFollowers));
    console.log(goodFollowers.map(id => newFollowers[id]));
    
    • 1
    • 2

    看看今天是谁又变帅变美了!

    写在最后

    我是HullQin,公众号线下聚会游戏的作者(欢迎关注公众号,发送加微信,交个朋友),转发本文前需获得作者HullQin授权。我独立开发了《联机桌游合集》,是个网页,可以很方便的跟朋友联机玩斗地主、五子棋等游戏,不收费没广告。还开发了《Dice Crush》参加Game Jam 2022。喜欢可以关注我 HullQin 噢~我有空了会分享做游戏的相关技术。

  • 相关阅读:
    Cheat Engine CE v7.5 安装教程(专注于游戏的修改器)
    todolist案列——vue脚手架(完整版)
    房地产行业程序员管理痛点分析
    短信平台不知道怎么选?来看看这几个平台:
    CREO:利用CREO软件实现装配设计之四连杆机构设计案例应用(图文教程)之详细攻略
    Cesium:OSGB倾斜摄影模型加载卡顿优化
    MySQL查询语句有代码示例
    simple-pytest 框架使用指南
    【Factory模式】C++设计模式——工厂模式
    qt主窗体
  • 原文地址:https://blog.csdn.net/kd_2015/article/details/126654430