写点什么

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

作者:HullQin
  • 2022 年 8 月 27 日
    广东
  • 本文字数:1896 字

    阅读完需:约 6 分钟

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

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

背景

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



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


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


思路如下:


  • 获取你当前的粉丝列表,保存到本地。

  • 第二天,再次获取列表,看看少了谁,同时更新本地粉丝列表。

  • 后续每一天,重复第二天的操作。

抓包看请求

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


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


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



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


循环,获取粉丝列表

以下代码,需要在掘金页面的 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;}
复制代码


调用函数 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));
复制代码

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

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


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


const FOLLOWER_KEY = 'my_followers';const oldFollowers = JSON.parse(localStorage.getItem(FOLLOWER_KEY) || '{}');const newFollowers = await getFollowers();
复制代码


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


const badFollowers = Object.keys(oldFollowers).filter(fan => !(fan in newFollowers));
复制代码


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


localStorage.setItem(FOLLOWER_KEY, JSON.stringify(newFollowers));
复制代码

一些名单

输出暗杀名单

console.log(badFollowers.map(id => oldFollowers[id]));
复制代码


大家别上暗杀名单噢!

输出帅哥美女的名单

console.log(Object.values(newFollowers));
复制代码


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

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

const goodFollowers = Object.keys(newFollowers).filter(fan => !(fan in oldFollowers));console.log(goodFollowers.map(id => newFollowers[id]));
复制代码


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

写在最后

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

发布于: 刚刚阅读数: 3
用户头像

HullQin

关注

公众号【线下聚会游戏】 2020.10.07 加入

game.hullqin.cn 我做了一些联机桌游网页:支持2-10人联机的UNO、2-4人联机的斗地主、2人联机的五子棋。无需下载,点开即玩!叫上朋友,即刻开局!不看广告,不做任务,享受「纯粹」的游戏!

评论

发布
暂无评论
[JS真好玩] 掘金创作者必备: 监控每天是谁取关了你?_CSS_HullQin_InfoQ写作社区