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

原创 2017年05月28日 13:50:36

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




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

免费的实时数据库,我们该选谁?----BerkeleyDB与SQLite评测对比

免费的实时数据库,我们该选谁?----BerkeleyDB与SQLite评测对比 2013-02-18 16:40 858人阅读 评论(0) 收藏 举报  分类:   实时...
  • lltaoyy
  • lltaoyy
  • 2016年07月07日 11:16
  • 938

适时创新与实时问题

在2013年最后一天的上班路上发了一篇《建立产品经理的情报中心》,收到很多同事和朋友的反馈,感谢各位。我想,有必要写一篇续篇,以使“情报中心”的思想更完整,更易落地,何时发?我想2014第一天上班路上...
  • yigm22
  • yigm22
  • 2014年01月02日 13:38
  • 365

苹果UI设计师谈创新原则:注重实时反馈

本文转自:http://sd.csdn.net/a/20120309/312917.html 苹果UI设计师谈创新原则:注重实时反馈 2012-03-09 09:08 | 1424次阅...

(个人)AR电子书系统创新实训第五周(1)

在这个星期,我设计了app的场景切换功能,即上篇文章中提到的开始界面和扫描页直接的切换以及相应的按钮响应功能。...

创新实训开篇: MyFlag创意背景及准备工作相关介绍

引言    很荣幸我们通过了创新实训的立项,对于我们的创新的想法--MyFlag ,今天我们主要简单的介绍以下几个方面: MyFlag的创意背景、创新点开发过程中相关主机的选用、公共开发环境的要...

(个人)AR电子书系统创新实训第四周(1)

(个人)AR电子书系统创新实训第四周(1)宣传册设计周记0701宣传册目录①拷贝封面底层的云纹。 ②设计印象济宁方形框,包括文字的创意与排版,方框的位置摆放,印章的位置摆放。 ③目录的设计,包括目...

(个人)AR电子书系统创新实训第二周(2)

打包安卓遇到的问题&测试二维码生成功能打包安卓在上一篇报告中我成功地做出了一个简单的二维码识别项目,于是我便尝试将其打包为安卓格式。安卓文件确实顺利地打包出来了,程序也可以运行,但出现了一个意想不到的...

(个人)AR电子书系统创新实训第三周(1)

(个人)AR电子书系统创新实训第三周(1)宣传册周记05在上两个周,我将所有的设计思路和设计内容都理清了。所以这个周,我决定开始我的宣传册设计。 但此前我从来没有接触过这方面的设计,所以在打开ps之...

(个人)AR电子书系统创新实训第五周(2)

我们也想制作一个引导页来简要说明我们app的功能,使我们的应用看起来更完整。下面我详细描述我设计引导页的过程。...

【ATF】钱正平:大规模实时计算及其在阿里的应用与创新

2016 ATF阿里技术论坛中,阿里云高级专家钱正平深入分享了在大规模实时计算及其在阿里的应用与创新经验。在他看来,用户需求是真正驱动分布式计算领域发展和变化的核心因素。除了一些比较有特色的技术点之外...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:创新实训5.28 代码转交&实时评测
举报原因:
原因补充:

(最多只允许输入30个字)