Neutralzz的博客

我有自己的梦想和追求!

创新实训5.28 代码转交&实时评测

借助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




阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26572969/article/details/72792779
个人分类: 学校实训
上一篇创新实训5.22 多线程评测
下一篇创新实训6.4 本周汇总
想对作者说点什么? 我来说一句

传感器综合应用创新实训

2018年06月22日 4.52MB 下载

Java项目实训源代码

2014年03月02日 17.56MB 下载

数据结构实训项目源代码

2013年01月14日 21KB 下载

没有更多推荐了,返回首页

关闭
关闭