ConanYu / FriendRatingServer

一个可以网页中查看friends的各个Online Judge的情况的Web服务
MIT License
1 stars 0 forks source link

需求单请接好 #1

Closed DeAntiWang closed 3 years ago

DeAntiWang commented 3 years ago

我来提需求了!!!

Background:我们ACM协会在统计人员每周训练情况的时候是人工统计,但是训练的平台众多,大概有五个,统计起来十分麻烦。于是我们想开发一个爬虫,帮我们收集每个同学的训练情况。

下面是具体需求单,我哥看看有兴趣搞搞吗(手动狗头


需要爬取的网站

需要爬取的数据

多个用户的历史做题数量及每次提交的具体数据(包括通过时间,通过状态)

具体的功能性需求

非功能性需求

可以模仿的项目

OJHunt 源代码 该项目不支持获取多个用户的历史做题数

ConanYu commented 3 years ago

收到需求,排期开发中。

ConanYu commented 3 years ago

看起来你只需要爬虫的内容,我这里有一个使用gRPC的爬虫服务:https://github.com/goodguy-project/goodguy-crawl

这个库使用起来比较方便,使用docker即可搭建。同时可以使用gRPC支持的语言进行调用(前端无法直接调用,可以用nodejs作为脚手架)。

查看 https://github.com/goodguy-project/goodguy-crawl/blob/main/crawl_service/crawl_service.proto 可以看到目前所支持的函数。

目前只有非常简单的平台以及用户名作为输入的参数,而需求中提到的只爬取某一段时间内的数据我认为没有必要,可以全部数据拿到后再自己进行数据的切割。

能够爬取到数据可以看protobuf文件,如果内容不够的话可以提需求。例如目前来说爬取用户做题历史没有题目列表,而是将信息整合了之后再输出,可以看一下是否真的需求,我会进行补充。

以下是本需求内容的说明:

方便增加其他网站的爬虫这个我认为不太能够做到,如果想爬去一个新的OJ,就得去对这个OJ进行API或源码分析,每一个OJ的爬虫都是不一样的。我可以做到的是每一个网站返回的信息是尽可能相似的,比如说vjudge会有其他OJ的信息,但除了vjudge外的OJ不会有除了它自己OJ以外的OJ。

运行失败率方面,如果传的参数是一个正常的参数(用户名正确,平台没有打错),加上网络正常,OJ正常,是不会有失败的。如果参数不正常会100%抛出异常,需要调用方自己来处理;如果网络波动或OJ异常,这个应该能保证服务不会出问题。

一个函数如果某个数据爬取失败,那么所有数据都应该拿不到,所以应该不会有这样的问题。