如何在知乎关注N多大V?

为啥要关注N多大V

今天突然意识到一个问题,在知乎上,我通常只关注那些价值观我比较认同的人,还会在发现关注的人的回答和我的价值观不一致时取消关注。

可是这么一来,我的世界会越来越小,我固有的偏见也就会越来越深,还怎么发现更大的世界呢。

关注更多的人,就能从更多的角度观察这个世界。但是尽管噪声也是声音,比较价值要小一些,所以选择关注下大V。

怎么找大V

根据知乎上有些回答的建议,先找个大V,然后从TA的关注列表里面加关注。

我对于大V的认定目前比较简单,看TA的回答赞同数是不是比较高。

方法基本确定了,但是在页面上一个个点关注,有点慢啊....

怎么自动化加关注

于是,我写了个脚本(比较长,代码留在最后了)。

在调试的过程中,估计是一开始没有考虑发送一大波请求会产生问题,导致....知乎把我封号了!在通过发送短信解除封号后,我在代码里面加入了延迟,尽量模拟人的操作方式吧。

代码使用方式

简单用法

  1. 打开一个大V的个人页面,例如:https://www.zhihu.com/people/excited-vczh
  2. 通过 F12 打开浏览器控制台
  3. 将代码粘贴进去,回车
  4. 等待 .... DONE!

注:2015/12/29 更新 - 简化自动关注步骤

高级用法

请参考代码注释....

附录

声明

代码有风险,粘贴需谨慎!

代码

(function (factory) {

  var zhv = factory(window.$)

  // 1. 自动关注所有大V
  zhv.autoFollowBigVers()

  // 2. 手动处理,自行判断大V
  /*
  zhv.getAllFolloweesOfCurrentUser(function (userList) {
    // user 数据结构参考下面的说明 <UserObject 用户信息数据结构>
    zhv.followUsers(userList.filter(function (user) {
      return user.agreeCount > 1000
    }))
  })
  */

  /*
   * UserObject 用户信息数据结构
   *
   * - {string} id: hash_id
   * - {string} name: 该用户名称
   * - {boolean} hasFollowed: 该用户是否已被你关注
   * - {number} followerCount: 该用户的关注者数目
   * - {number} askCount: 该用户的提问数
   * - {number} answerCount: 该用户的答题数目
   * - {number} agreeCount: 该用户获得的赞同数
   */

})(function ($) {

var zh_xsrf = $('input[name="_xsrf"]').val()
var zh_followee_collection = []
var exports = {}

exports.autoFollowBigVers = function () {
  getAllFolloweesOfCurrentUser(function (userList) {
    followUsers(userList.filter(isNotFollowedBigVer))
  })
}
exports.getAllFolloweesOfCurrentUser = getAllFolloweesOfCurrentUser
exports.followUsers = followUsers

/*
 * @param {function} [done] - 执行完毕后调用的回调函数,callback({UserObject[]})
 */
function getAllFolloweesOfCurrentUser(done) {
  var currentUser = getCurrentUserInfo()
  var hash_id = currentUser.id
  var followeeCount = currentUser.followeeCount

  // 清空已缓存的用户
  zh_followee_collection.length = 0

  var i = 0
  var loadCount = Math.ceil(followeeCount / 20)
  var timer = setInterval(function () {
    if (i < loadCount) {
      getFolloweeList(hash_id, 20 * i).done(function (data) {
        if (data.r === 0) {
          data.msg.forEach(function (item) {
            var user = parseUserInfoFromHTML(item)
            zh_followee_collection.push(user)
          })
        }
      })
      console.log(i + '/' + loadCount + ' ' + ((i * 100 / loadCount).toFixed(2) + '%'))
      i++
    } else {
      clearInterval(timer)
      console.log('加载当前用户所有关注的人,完毕')
      if (typeof done === 'function') {
        done(zh_followee_collection)
      }
    }
  }, 200)
  console.log('尝试加载当前用户所有关注的人,共' + followeeCount + '人')
}

function parseUserInfoFromHTML(html) {
  var $el = $(html)
  var $btnFollow = $el.find('.zm-rich-follow-btn')
  var hash_id = $btnFollow.attr('data-id')
  var hasFollowed = $btnFollow.hasClass('zg-btn-unfollow')
  var userName = $el.find('.zm-item-link-avatar').attr('title')

  var $links = $el.find('.details').find('a')
  var followerCount = parseInt($links.eq(0).text(), 10)
  var askCount = parseInt($links.eq(1).text(), 10)
  var answerCount = parseInt($links.eq(2).text(), 10)
  var agreeCount = parseInt($links.eq(3).text(), 10)

  return {
    id: hash_id,
    name: userName,
    hasFollowed: hasFollowed,
    followerCount: followerCount,
    askCount: askCount,
    answerCount: answerCount,
    agreeCount: agreeCount
  }
}

function isNotFollowedBigVer(user) {
  if (user.hasFollowed) {
    return false
  } else {
    // 各种主观的评价大V的标准
    if (user.agreeCount > 1000 && user.followerCount > 500) {
      return true
    } else if (user.agreeCount > 100 && user.followerCount > 2000) {
      return true
    } else {
      return false
    }
  }
}

/*
 * @param {UserObject[]} userList
 */
function followUsers(userList) {
  var total = userList.length
  if (total > 0) {
    console.log('关注' + total + '个用户,开始....')
    userList.forEach(function (user, i) {
      setTimeout(function () {
        console.log(
          (i + 1) + '/' + total + ' ' +
          user.name + ' ' +
          user.agreeCount + '赞同 ' +
          user.followerCount + '关注'
        )
        followUser(user.id)
        user.hasFollowed = true
        if (i + 1 === total) {
          console.log('结束')
        }
      }, i * 200)
    })
  } else {
    console.log('没有要关注的用户')
  }
}

/*
 * @return {UserObject} 当前用户信息
 */
function getCurrentUserInfo() {
  var $btnFollow = $('.zm-profile-header-op-btns').find('.zm-rich-follow-btn')
  var $followNums = $('.zm-profile-side-following').find('strong')
  var $userNums = $('.profile-navbar').find('.num')
  return {
    // 用户的关注按钮上有该用户对应的 hash_id
    id: $btnFollow.attr('data-id'),
    name: $('.title-section').find('.name').text(),
    // TA关注的人数
    followeeCount: parseInt($followNums.eq(0).text(), 10),
    // 关注TA的人数
    followerCount: parseInt($followNums.eq(1).text(), 10),
    answerCount: parseInt($userNums.eq(1).text(), 10),
    agreeCount: parseInt($('.zm-profile-header-user-agree').find('strong').text(), 10)
  }
}

function getFolloweeList(hash_id, offset) {
  return $.ajax({
    type: 'POST',
    url: '/node/ProfileFolloweesListV2',
    data: {
      method: 'next',
      params: JSON.stringify({
        "offset": offset,
        "order_by": "created",
        "hash_id": hash_id
      }),
      _xsrf: zh_xsrf
    },
    dataType: 'json'
  })
}

function followUser(hash_id) {
  return $.ajax({
    type: 'POST',
    url: '/node/MemberFollowBaseV2',
    data: {
      method: 'follow_member',
      params: JSON.stringify({"hash_id": hash_id}),
      _xsrf: zh_xsrf
    },
    dataType: 'JSON'
  })
}

return exports
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容