创新实训5.28 代码转交&实时评测
2017-05-28 13:50
127 查看
借助urllib做了代码提交到原OJ,并通过上次写的judger.py去实时评测。然后。。没了。。真的没了。。。目前的题目获取、提交和评测都仅仅支持HDU,后面继续做其他OJ的支持。因为开始写代码的时候尽可能的降低了耦合度,所以其他OJ的支持只需要在problem_spider.py status_spider.py submit.py里新建对应的类和方法即可,对原代码的改动极少。
下面是submiter.py
# coding:utf-8
from base64 import b64decode
import requests,re,time
import urllib.request
import urllib.parse
import http.cookiejar
from scrapy.http import FormRequest
LANGUAGE = {
'G++' : '0',
'GCC' : '1',
'C++' : '2',
'C' : '3',
'Pascal' : '4',
'Java' : '5',
'C#' : '6',
'Python' : '7',
}
class HduSubmiter:
loginURL = 'http://acm.hdu.edu.cn/userloginex.php?action=login'
submitURL = 'http://acm.hdu.edu.cn/submit.php?action=submit'
mapLang = {
'0' : '0',
'1' : '1',
'2' : '2',
'3' : '3',
'4' : '4',
'5' : '5',
'6' : '6'
}
def __init__(self,Prob,User,Code,Lang):
self.Prob = str(Prob)
self.User = str(User)
self.Code = str(Code)
self.Lang = str(Lang)
cj = http.cookiejar.CookieJar()
cookie_support = urllib.request.HTTPCookieProcessor(cj)
opener = urllib.request.build_opener(cookie_support, urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
#print("Prob:%s,User:%s,Lang:%s\nCode:%s\n"%(Prob,User,Lang,Code))
def login(self):
postDict={
'username': self.User,
'userpass': "2017shixun"+self.User,
'login': 'Sign+In',
}
postData = urllib.parse.urlencode(postDict).encode()
request = urllib.request.Request(self.loginURL, postData)
response = urllib.request.urlopen(request)
text = response.read()
text = text.decode('gb2312')
#print("after login -> ",response.url)
return not re.search(r'No such user or wrong password.', text)
def submit(self):
postDict={
'problemid': self.Prob,
'language': self.mapLang[self.Lang],
'usercode': b64decode(self.Code),
'check': '0'
}
postData = urllib.parse.urlencode(postDict).encode()
request = urllib.request.Request(self.submitURL, postData)
response = urllib.request.urlopen(request)
#print("after submit ->",response.url)
def submit2OJ(self):
if self.login():
print("login success")
try:
self.submit()
except:
print("submit fail")
return False
print("submit success")
return True
else:
print("login fail")
return False
下面是submiter.py
# coding:utf-8
from base64 import b64decode
import requests,re,time
import urllib.request
import urllib.parse
import http.cookiejar
from scrapy.http import FormRequest
LANGUAGE = {
'G++' : '0',
'GCC' : '1',
'C++' : '2',
'C' : '3',
'Pascal' : '4',
'Java' : '5',
'C#' : '6',
'Python' : '7',
}
class HduSubmiter:
loginURL = 'http://acm.hdu.edu.cn/userloginex.php?action=login'
submitURL = 'http://acm.hdu.edu.cn/submit.php?action=submit'
mapLang = {
'0' : '0',
'1' : '1',
'2' : '2',
'3' : '3',
'4' : '4',
'5' : '5',
'6' : '6'
}
def __init__(self,Prob,User,Code,Lang):
self.Prob = str(Prob)
self.User = str(User)
self.Code = str(Code)
self.Lang = str(Lang)
cj = http.cookiejar.CookieJar()
cookie_support = urllib.request.HTTPCookieProcessor(cj)
opener = urllib.request.build_opener(cookie_support, urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
#print("Prob:%s,User:%s,Lang:%s\nCode:%s\n"%(Prob,User,Lang,Code))
def login(self):
postDict={
'username': self.User,
'userpass': "2017shixun"+self.User,
'login': 'Sign+In',
}
postData = urllib.parse.urlencode(postDict).encode()
request = urllib.request.Request(self.loginURL, postData)
response = urllib.request.urlopen(request)
text = response.read()
text = text.decode('gb2312')
#print("after login -> ",response.url)
return not re.search(r'No such user or wrong password.', text)
def submit(self):
postDict={
'problemid': self.Prob,
'language': self.mapLang[self.Lang],
'usercode': b64decode(self.Code),
'check': '0'
}
postData = urllib.parse.urlencode(postDict).encode()
request = urllib.request.Request(self.submitURL, postData)
response = urllib.request.urlopen(request)
#print("after submit ->",response.url)
def submit2OJ(self):
if self.login():
print("login success")
try:
self.submit()
except:
print("submit fail")
return False
print("submit success")
return True
else:
print("login fail")
return False
相关文章推荐
- (个人)实时交互的太极拳学习系统创新实训第一周(一)
- (个人)实时交互太极拳学习系统创新实训第一周
- 市面上所有号称"虚拟机","防火墙"的实时监控杀毒软件无一不是使用的IFSHOOK技术.但是同时也有一些朋友不断写MAIL给我打听如何实现读写的监控.下面给出用VTOOLSD写的代码.也就是所有实时杀毒软件的奥秘.同时,很多拦截文件操作的软件,例如对目录加
- (个人)VR实时交互的太极拳学习系统创新实训第一周(1)
- (个人)VR实时交互的太极拳学习系统创新实训第一周(1)
- (项目)实时交互太极拳学习系统创新实训第一周
- (个人)实时交互的太极拳学习系统创新实训第二周(一)
- [C++ && Python]简单模拟代码评测系统
- Eclipse 代码评测与优化系列三:TPTP&Findbugs
- C++ 代码统计工具 & 判断一行代码是否为注释行
- win8激活时出现”错误代码:0×8007007B 错误描述:文件名、目录名或卷标语法不正确“解决方法
- Cocos2d-x使用Javascript开发js绑定C++<代码演示样例>
- 字体实时变化代码
- 嵌入式实时操作系统µC/OS-II内核结构简介
- InfoQ - 促进软件开发领域知识与创新的传播 搜索关键词 登录 En |中文 |日本 |Fr |Br 966,690 一月 独立访问用户 语言 & 开发 Java Clojure Scala
- 误区 一下代码是曾经误认为 radio的onclick 事件在 <a href="#"></a> 发生 以下是实例代码
- 项目实训-千寻-服务端代码部署阿里云
- 实时开发框架Meteor API解读系列<一> Meteor.methods
- WebRTC实时通信系列教程3 获取示例代码
- 【数学建模】图与网络 提纲 & matlab代码