当前位置: 首页 > Web前端 > HTML5

Thinking的“问答”签到如何获取完成数?

时间:2023-04-05 18:09:38 HTML5

参与了SegmentFault四物社区十周年“问答”打卡活动,欢迎正在阅读的你加入。最近《SegmentFault10周年问答打卡》很火,但是有个小问题。经常不知道今天的KPI有没有完成,小尾巴有没有正常添加,所以今天来做一个小工具吧。分析的话,先打开个人问答页面看看是否有单独拉取问答数据的接口。(感谢官方boss后期优化,有直接界面)右键copyasfetch我们可以愉快的使用transformation&cycletransformation来检查所有数据,过滤掉不感兴趣的信息(graphql更好,不幸的是不是)getAnswers=function(username,page=1,startTime=newDate('2022-06-0100:00:00.000').getTime()/1000){returnfetch(`https://segmentfault.com/gateway/homepage/${username}/answers?size=20&page=${page}&sort=newest`).then(v=>v.json()).then(v=>v.rows).then(异步v=>{if(v.length===20&&(v[v.length-1]?.created||0)>startTime){returnv.concat(awaitgetAnswers(username,page+1,startTime))}else{returnv.filter(v=>v.created>startTime)}})//.then(console.log)}list=[];getAnswers('linong').then(console.log)//newDate(1655005451*1000).toLocaleString();//newDate('2022-06-0100:00:00.000').getTime()仅供学习,请勿违法!查看几个活跃用户awaitgetAnswers('hfhan').then(console.log)awaitgetAnswers('jamesfancy').then(console.log)awaitgetAnswers('nickw_cn').then(console.log)awaitgetAnswers('xdsnet').then(console.log)我们会发现这里的用户名好像是固定的value,它和用户名不同,所以我们在做一个url提取,这样我们就不用手动选择'https://segmentfault.com/u/jamesfancy/answers'.match(/\/u\/([^/]+)/)[1]分析一下如何获取是否有小尾巴因为不是graphql,所以上面的内容只有这么多答案。如果我们要检查小尾巴的添加,我们需要再做一次收集。通过检查好像没有暴露如果有接口,那我们就只能直接处理html数据了。xhr=newXMLHttpRequest()xhr.open('get','https://segmentfault.com/q/1010000041964562/a-1020000041964682')xhr.responseType='document'xhr.send();xhr.onload=()=>console.log(xhr.response,xhr.response.querySelector('[id="1020000041964682"][href^="https://segmentfault.com/a/1190000041925107"]))所以我们使用选择器设备可以直接判断答案是否包含特征值。猜猜为什么我在这里使用xhr而不是fetch?url提取id'https://segmentfault.com/q/1010000041964562/a-1020000041964682'.match(/\/a-(\d+)$/)[1]转换周期getAnswers=function(username,page=1,startTime=newDate('2022-06-0100:00:00.000').getTime()/1000){返回获取(`https://segmentfault.com/gateway/homepage/${username}/answers?size=20&page=${page}&sort=newest`).then(v=>v.json()).then(v=>v.rows).then(asyncv=>{if(v.length===20&&(v[v.length-1]?.created||0)>startTime){returnv.concat(awaitgetAnswers(username,page+1,startTime))}else{returnv.filter(v=>v.created>startTime)}})//.then(console.log)}checkAnswerExt=asyncfunction(url){constid=url.match(/\/a-(\d+)$/)[1];varxhr=newXMLHttpRequest()xhr.open('get',`https://segmentfault.com${url}`)xhr.responseType='document'xhr.send();returnnewPromise(function(resolve,reject){xhr.onload=()=>resolve(xhr.response.querySelector(`[id="${id}"][href^="https://segmentfault.com/a/1190000041925107"]`))})}answers=[];awaitgetAnswers('cowcomic').then(asyncfunction(list){for(vari=0;i