【第三方掘金功能】掘金我的數據統計,第三方實現的掘金用戶 dashboard

查詢入口 lxfriday.gitee.io/juejin-spid…前端

項目地址 juejin-spider,歡迎 star、issue。git

先上圖,通過一段時間的數據積累,掘金的用戶 dashboard 如今能夠開放使用了。這個功能是一個比較重要可是掘金目前尚未提供的功能。github

dashboard 目前提供的功能有 歷史點贊數、歷史 follower、歷史評論數 三個圖web

使用指南

查詢

在上面的搜索框輸入用戶主頁的 url,點擊搜索,喝一口下午茶,等待增加(因爲使用的是 碼雲 pages 服務,可能會有訪問速度和訪問總次數限制)。算法

圖表

三個圖分別爲:關注者增加趨勢總點贊數增加趨勢總評論數增加趨勢。最多會顯示最近一週的數據,目前數據已經採集了6天,明天以後就能夠查看前7天的數據了。npm

關注者增加趨勢 json

總點贊數增加趨勢 promise

總評論數增加趨勢 async

技術實現

前端

前端代碼位於 juejin-spider/website,基於 umi 腳手架 實現的 dashboard,用到了 React、AntD、Dva。ide

可能不少人會有疑問。純靜態代碼是如何提供數據的?

數據固然仍是來自 juejin-spider 腳本,抓取到的數據,按照 uidfile 算法 uidfile,把用戶id user.objectId 通過算法處理以後自動肯定生成到哪一個 json 文件,因此即便有 1.5w+ 做者信息,切分以後,每一個文件大概會有 3000 個做者的信息,在傳輸和解析的時候就不會形成卡頓。

json 文件的規範

{
  "5a66dff2f265da3e4f0a4f1b":[4966,4430,140],  // ...
}
// 關注者,總點贊量,總評論量
// [user.objectId]: [followersCount, totalCollectionsCount, totalCommentsCount]
複製代碼

腳本文件

相比於第一個版本,新增了 npm run sitedata,執行腳本以下

const request = require('request-promise')
const async = require('async')
const path = require('path')
const fs = require('fs')

const travelArticleData = require('../utils/travelArticleData')
const uidfile = require('../utils/uidfile')
const saveDataTofile = require('../utils/saveDataTofile')
const { websitedataDir } = require('../utils/path')

const allUserObj = {}
let userCount = 0
const idSet = new Set()

travelArticleData(articleInfo => {
  const {
    user: {
      followersCount,
      totalCollectionsCount,
      totalCommentsCount,
      objectId,
    },
  } = articleInfo
  if (!idSet.has(objectId) && objectId) {
    // 去重
    idSet.add(objectId)
    // 統計在標籤下發表了專欄的用戶總數
    userCount++
    const filename = uidfile(objectId)
    if (allUserObj[filename]) {
      allUserObj[filename][objectId] = [
        followersCount,
        totalCollectionsCount,
        totalCommentsCount,
      ]
    } else {
      allUserObj[filename] = {
        // 關注者,總點贊量,總評論量
        // [followersCount, totalCollectionsCount, totalCommentsCount]
        [objectId]: [followersCount, totalCollectionsCount, totalCommentsCount],
      }
    }
  }
})
;(async () => {
  const { sysTime1 } = await request('http://quan.suning.com/getSysTime.do', {
    json: true,
  })
    //獲取當天的日期
  const yearDate = sysTime1.substr(0, 8) // 20190825
  const yearDateDirPath = path.resolve(websitedataDir, yearDate)

    // 建立日期命名的文件夾
  const yearDateDirExist = fs.existsSync(yearDateDirPath)
  if (!yearDateDirExist) {
    fs.mkdirSync(yearDateDirPath)
  }
  
  // 寫入用戶總數
  saveDataTofile(
    `../../website/public/data/${yearDate}`,
    `userCount.txt`,
    userCount,
    false
  )

  const filenameArr = Object.keys(allUserObj)
  async.eachLimit(
    filenameArr,
    1,
    (filename, cb) => {
      // 把每一個 number.json 對應的數據寫入,總共寫 50 次
      saveDataTofile(
        // 自動保存到 web 項目 `public/data` 下,通過 `npm run build` 自動複製到 `/dist` 目錄
        `../../website/public/data/${yearDate}`,
        `${filename}`,
        allUserObj[filename]
      )
      cb()
    },
    err => {
      if (err) throw err
      console.log('getData finished')
    }
  )
})()
複製代碼

這就是掘金我的數據統計功能實現的過程,具體實現代碼前往 github.com/lxfriday/ju…。如今在標籤下寫了專欄的用戶,均可以看到本身的歷史數據。


公衆號:

相關文章
相關標籤/搜索